@@ -193,6 +193,9 @@ struct session_state {
193193 u_int32_t rekey_interval ; /* how often in seconds */
194194 time_t rekey_time ; /* time of last rekeying */
195195
196+ /* Start time of session */
197+ time_t session_start_time ;
198+
196199 /* roundup current message to extra_pad bytes */
197200 u_char extra_pad ;
198201
@@ -249,6 +252,7 @@ ssh_alloc_session_state(void)
249252 state -> packet_timeout_ms = -1 ;
250253 state -> p_send .packets = state -> p_read .packets = 0 ;
251254 state -> initialized = 1 ;
255+ state -> session_start_time = monotime ();
252256 /*
253257 * ssh_packet_send2() needs to queue packets until
254258 * we've done the initial key exchange.
@@ -2008,7 +2012,10 @@ sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap)
20082012 ssh -> state -> server_side ? "from" : "to" , remote_id );
20092013 case SSH_ERR_DISCONNECTED :
20102014 ssh_packet_clear_keys (ssh );
2011- logdie ("Disconnected from %s" , remote_id );
2015+ time_t session_end_time = monotime ();
2016+ time_t session_length = session_end_time - ssh -> state -> session_start_time ;
2017+ logdie ("Disconnected from %s. Session length: %lu:%02lu:%02lu" , remote_id ,
2018+ session_length / 3600 , (session_length % 3600 ) / 60 , session_length % 60 );
20122019 case SSH_ERR_SYSTEM_ERROR :
20132020 if (errno == ECONNRESET ) {
20142021 ssh_packet_clear_keys (ssh );
0 commit comments