<div dir="ltr">This adds a command line option for specifying an idle_timeout.&nbsp; The command line is:<br>-I &lt;secs&gt;.&nbsp; If dropbear doesn&#39;t receive any data packets within &lt;secs&gt;, the dropbear process<br>associated with that session will exit.<br>
<br><br>diff -up ../../dropbear-vanilla/dropbear-0.51/cli-runopts.c ../../dropbear-idle_timeout/dropbear-0.51/cli-runopts.c<br>--- ../../dropbear-vanilla/dropbear-0.51/cli-runopts.c&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:14.000000000 -0400<br>
+++ ../../dropbear-idle_timeout/dropbear-0.51/cli-runopts.c&nbsp;&nbsp;&nbsp; 2008-09-19 13:52:58.000000000 -0400<br>@@ -65,11 +65,12 @@ static void printhelp() {<br>&nbsp;#endif<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-W &lt;receive_window_buffer&gt; (default %d, larger may be faster, max 1MB)\n&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-K &lt;keepalive&gt;&nbsp; (0 is never, default %d)\n&quot;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-I &lt;idle_timeout&gt;&nbsp; (0 is never, default %d)\n&quot;<br>&nbsp;#ifdef DEBUG_TRACE<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-v&nbsp;&nbsp;&nbsp; verbose\n&quot;<br>
&nbsp;#endif<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ,DROPBEAR_VERSION, cli_opts.progname,<br>-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE);<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE, DEFAULT_IDLE_TIMEOUT);<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;}<br>&nbsp;<br>@@ -91,6 +92,7 @@ void cli_getopts(int argc, char ** argv)<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; char* recv_window_arg = NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp; char* keepalive_arg = NULL;<br>+&nbsp;&nbsp;&nbsp; char* idle_timeout_arg = NULL;<br>&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; /* see printhelp() for options */<br>&nbsp;&nbsp;&nbsp;&nbsp; cli_opts.progname = argv[0];<br>@@ -215,6 +217,9 @@ void cli_getopts(int argc, char ** argv)<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case &#39;K&#39;:<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; next = &amp;keepalive_arg;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case &#39;I&#39;:<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; next = &amp;idle_timeout_arg;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;#ifdef DEBUG_TRACE<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case &#39;v&#39;:<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; debug_trace = 1;<br>
@@ -322,7 +327,12 @@ void cli_getopts(int argc, char ** argv)<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dropbear_exit(&quot;Bad keepalive &#39;%s&#39;&quot;, keepalive_arg);<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>-&nbsp;&nbsp;&nbsp; <br>+&nbsp;&nbsp;&nbsp; if (idle_timeout_arg) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; opts.idle_timeout_secs = strtoul(idle_timeout_arg, NULL, 10);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (opts.idle_timeout_secs == 0 &amp;&amp; errno == EINVAL) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dropbear_exit(&quot;Bad idle_timeout &#39;%s&#39;&quot;, idle_timeout_arg);<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>+&nbsp;&nbsp;&nbsp; }<br>&nbsp;}<br>&nbsp;<br>&nbsp;#ifdef ENABLE_CLI_PUBKEY_AUTH<br>
diff -up ../../dropbear-vanilla/dropbear-0.51/common-session.c ../../dropbear-idle_timeout/dropbear-0.51/common-session.c<br>--- ../../dropbear-vanilla/dropbear-0.51/common-session.c&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:14.000000000 -0400<br>
+++ ../../dropbear-idle_timeout/dropbear-0.51/common-session.c&nbsp;&nbsp;&nbsp; 2008-09-19 11:24:18.000000000 -0400<br>@@ -63,6 +63,7 @@ void common_session_init(int sock, char*<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; ses.connect_time = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp; ses.last_packet_time = 0;<br>
+&nbsp;&nbsp;&nbsp; ses.last_recv_packet_time = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; if (pipe(ses.signal_pipe) &lt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dropbear_exit(&quot;signal pipe failed&quot;);<br>@@ -397,6 +398,11 @@ static void checktimeouts() {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; now - ses.last_packet_time &gt;= opts.keepalive_secs) {<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; send_msg_ignore();<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>+<br>+&nbsp;&nbsp;&nbsp; if (opts.idle_timeout_secs &gt; 0 &amp;&amp; ses.last_recv_packet_time &gt; 0<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; now - ses.last_recv_packet_time &gt;= opts.idle_timeout_secs) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dropbear_close(&quot;Idle timeout&quot;);<br>
+&nbsp;&nbsp;&nbsp; }<br>&nbsp;}<br>&nbsp;<br>&nbsp;static long select_timeout() {<br>@@ -409,5 +415,7 @@ static long select_timeout() {<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ret = MIN(AUTH_TIMEOUT, ret);<br>&nbsp;&nbsp;&nbsp;&nbsp; if (opts.keepalive_secs &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ret = MIN(opts.keepalive_secs, ret);<br>
+&nbsp;&nbsp;&nbsp; if (opts.idle_timeout_secs &gt; 0)<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ret = MIN(opts.idle_timeout_secs, ret);<br>&nbsp;&nbsp;&nbsp;&nbsp; return ret;<br>&nbsp;}<br>Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/debian and ../../dropbear-idle_timeout/dropbear-0.51/debian<br>
Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/libtomcrypt and ../../dropbear-idle_timeout/dropbear-0.51/libtomcrypt<br>Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/libtommath and ../../dropbear-idle_timeout/dropbear-0.51/libtommath<br>
Common subdirectories: ../../dropbear-vanilla/dropbear-0.51/_MTN and ../../dropbear-idle_timeout/dropbear-0.51/_MTN<br>diff -up ../../dropbear-vanilla/dropbear-0.51/options.h ../../dropbear-idle_timeout/dropbear-0.51/options.h<br>
--- ../../dropbear-vanilla/dropbear-0.51/options.h&nbsp;&nbsp;&nbsp; 2008-03-27 09:34:39.000000000 -0400<br>+++ ../../dropbear-idle_timeout/dropbear-0.51/options.h&nbsp;&nbsp;&nbsp; 2008-09-19 11:26:04.000000000 -0400<br>@@ -235,6 +235,10 @@ etc) slower (perhaps by 50%). Recommende<br>
&nbsp;be overridden at runtime with -K. 0 disables keepalives */<br>&nbsp;#define DEFAULT_KEEPALIVE 0<br>&nbsp;<br>+/* Ensure that data is received within IDLE_TIMEOUT seconds. This can<br>+be overridden at runtime with -I. 0 disables idle timeouts */<br>
+#define DEFAULT_IDLE_TIMEOUT 0<br>+<br>&nbsp;/*******************************************************************<br>&nbsp; * You shouldn&#39;t edit below here unless you know you need to.<br>&nbsp; *******************************************************************/<br>
Only in ../../dropbear-idle_timeout/dropbear-0.51: patch051.idle_timeout<br>diff -up ../../dropbear-vanilla/dropbear-0.51/process-packet.c ../../dropbear-idle_timeout/dropbear-0.51/process-packet.c<br>--- ../../dropbear-vanilla/dropbear-0.51/process-packet.c&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:15.000000000 -0400<br>
+++ ../../dropbear-idle_timeout/dropbear-0.51/process-packet.c&nbsp;&nbsp;&nbsp; 2008-09-19 11:26:58.000000000 -0400<br>@@ -51,6 +51,7 @@ void process_packet() {<br>&nbsp;&nbsp;&nbsp;&nbsp; TRACE((&quot;process_packet: packet type = %d&quot;, type))<br>&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; ses.lastpacket = type;<br>+&nbsp;&nbsp;&nbsp; ses.last_recv_packet_time = time(NULL);<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; /* These packets we can receive at any time */<br>&nbsp;&nbsp;&nbsp;&nbsp; switch(type) {<br>diff -up ../../dropbear-vanilla/dropbear-0.51/runopts.h ../../dropbear-idle_timeout/dropbear-0.51/runopts.h<br>
--- ../../dropbear-vanilla/dropbear-0.51/runopts.h&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:15.000000000 -0400<br>+++ ../../dropbear-idle_timeout/dropbear-0.51/runopts.h&nbsp;&nbsp;&nbsp; 2008-09-19 11:29:17.000000000 -0400<br>@@ -38,6 +38,7 @@ typedef struct runopts {<br>
&nbsp;#endif<br>&nbsp;&nbsp;&nbsp;&nbsp; unsigned int recv_window;<br>&nbsp;&nbsp;&nbsp;&nbsp; time_t keepalive_secs;<br>+&nbsp;&nbsp;&nbsp; time_t idle_timeout_secs;<br>&nbsp;<br>&nbsp;} runopts;<br>&nbsp;<br>diff -up ../../dropbear-vanilla/dropbear-0.51/session.h ../../dropbear-idle_timeout/dropbear-0.51/session.h<br>
--- ../../dropbear-vanilla/dropbear-0.51/session.h&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:15.000000000 -0400<br>+++ ../../dropbear-idle_timeout/dropbear-0.51/session.h&nbsp;&nbsp;&nbsp; 2008-09-19 11:30:56.000000000 -0400<br>@@ -137,6 +137,10 @@ struct sshsession {<br>
&nbsp;&nbsp;&nbsp;&nbsp; time_t last_packet_time; /* time of the last packet transmission, for<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; keepalive purposes */<br>&nbsp;<br>+&nbsp;&nbsp;&nbsp; time_t last_recv_packet_time; /* time of the last packet received, for<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; idle timeout purposes */<br>
+<br>+<br>&nbsp;&nbsp;&nbsp;&nbsp; /* KEX/encryption related */<br>&nbsp;&nbsp;&nbsp;&nbsp; struct KEXState kexstate;<br>&nbsp;&nbsp;&nbsp;&nbsp; struct key_context *keys;<br>diff -up ../../dropbear-vanilla/dropbear-0.51/svr-runopts.c ../../dropbear-idle_timeout/dropbear-0.51/svr-runopts.c<br>
--- ../../dropbear-vanilla/dropbear-0.51/svr-runopts.c&nbsp;&nbsp;&nbsp; 2008-03-27 09:17:16.000000000 -0400<br>+++ ../../dropbear-idle_timeout/dropbear-0.51/svr-runopts.c&nbsp;&nbsp;&nbsp; 2008-09-19 11:34:15.000000000 -0400<br>@@ -82,6 +82,7 @@ static void printhelp(const char * progn<br>
&nbsp;#endif<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-W &lt;receive_window_buffer&gt; (default %d, larger may be faster, max 1MB)\n&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-K &lt;keepalive&gt;&nbsp; (0 is never, default %d)\n&quot;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-I &lt;idle_timeout&gt;&nbsp; (0 is never, default %d)\n&quot;<br>
&nbsp;#ifdef DEBUG_TRACE<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;-v&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; verbose\n&quot;<br>&nbsp;#endif<br>@@ -93,7 +94,7 @@ static void printhelp(const char * progn<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RSA_PRIV_FILENAME,<br>&nbsp;#endif<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DROPBEAR_MAX_PORTS, DROPBEAR_DEFPORT, DROPBEAR_PIDFILE,<br>
-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE);<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE, DEFAULT_IDLE_TIMEOUT);<br>&nbsp;}<br>&nbsp;<br>&nbsp;void svr_getopts(int argc, char ** argv) {<br>@@ -103,6 +104,7 @@ void svr_getopts(int argc, char ** argv)<br>
&nbsp;&nbsp;&nbsp;&nbsp; int nextisport = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp; char* recv_window_arg = NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp; char* keepalive_arg = NULL;<br>+&nbsp;&nbsp;&nbsp; char* idle_timeout_arg = NULL;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; /* see printhelp() for options */<br>&nbsp;&nbsp;&nbsp;&nbsp; svr_opts.rsakeyfile = NULL;<br>
@@ -134,7 +136,8 @@ void svr_getopts(int argc, char ** argv)<br>&nbsp;&nbsp;&nbsp;&nbsp; svr_opts.usingsyslog = 1;<br>&nbsp;#endif<br>&nbsp;&nbsp;&nbsp;&nbsp; opts.recv_window = DEFAULT_RECV_WINDOW;<br>-&nbsp;&nbsp;&nbsp; opts.keepalive_secs = DEFAULT_KEEPALIVE;&nbsp;&nbsp;&nbsp; <br>+&nbsp;&nbsp;&nbsp; opts.keepalive_secs = DEFAULT_KEEPALIVE;<br>
+&nbsp;&nbsp;&nbsp; opts.idle_timeout_secs = DEFAULT_IDLE_TIMEOUT;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;#ifdef ENABLE_SVR_REMOTETCPFWD<br>&nbsp;&nbsp;&nbsp;&nbsp; opts.listen_fwd_all = 0;<br>@@ -218,6 +221,9 @@ void svr_getopts(int argc, char ** argv)<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case &#39;K&#39;:<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; next = &amp;keepalive_arg;<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case &#39;I&#39;:<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; next = &amp;idle_timeout_arg;<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;#if defined(ENABLE_SVR_PASSWORD_AUTH) || defined(ENABLE_SVR_PAM_AUTH)<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case &#39;s&#39;:<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; svr_opts.noauthpass = 1;<br>@@ -297,6 +303,13 @@ void svr_getopts(int argc, char ** argv)<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dropbear_exit(&quot;Bad keepalive &#39;%s&#39;&quot;, keepalive_arg);<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>+<br>+&nbsp;&nbsp;&nbsp; if (idle_timeout_arg) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; opts.idle_timeout_secs = strtoul(idle_timeout_arg, NULL, 10);<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (opts.idle_timeout_secs == 0 &amp;&amp; errno == EINVAL) {<br>+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dropbear_exit(&quot;Bad idle_timeout &#39;%s&#39;&quot;, idle_timeout_arg);<br>
+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>+&nbsp;&nbsp;&nbsp; }<br>&nbsp;}<br>&nbsp;<br>&nbsp;static void addportandaddress(char* spec) {<br></div>