From ed0552f21417ffb90d52ac12becb03cf6a03e13c Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sun, 27 Jul 2014 22:06:26 +0800
Subject: [PATCH] Add '-V' for version -h should exit with success Update
 manpages

---
 cli-runopts.c    | 5 +++++
 common-runopts.c | 5 +++++
 dbclient.1       | 8 +++++---
 dropbear.8       | 9 ++++++---
 runopts.h        | 2 ++
 svr-runopts.c    | 7 ++++++-
 6 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/cli-runopts.c b/cli-runopts.c
index f8e289bf..5f36f7c5 100644
--- a/cli-runopts.c
+++ b/cli-runopts.c
@@ -90,6 +90,7 @@ static void printhelp() {
 					"-c <cipher list> Specify preferred ciphers ('-c help' to list options)\n"
 					"-m <MAC list> Specify preferred MACs for packet verification (or '-m help')\n"
 #endif
+					"-V    Version\n"
 #ifdef DEBUG_TRACE
 					"-v    verbose (compiled with DEBUG_TRACE)\n"
 #endif
@@ -324,6 +325,10 @@ void cli_getopts(int argc, char ** argv) {
 #ifndef ENABLE_CLI_LOCALTCPFWD
 				case 'L':
 #endif
+				case 'V':
+					print_version();
+					exit(EXIT_SUCCESS);
+					break;
 				case 'o':
 				case 'b':
 					next = &dummy;
diff --git a/common-runopts.c b/common-runopts.c
index 699ebdaa..cdac77e1 100644
--- a/common-runopts.c
+++ b/common-runopts.c
@@ -106,3 +106,8 @@ parse_ciphers_macs()
 }
 #endif
 
+void print_version(const char* name) {
+	fprintf(stderr, "Dropbear %s v%s\n", name, DROPBEAR_VERSION);
+}
+
+
diff --git a/dbclient.1 b/dbclient.1
index a6dff62b..4502b237 100644
--- a/dbclient.1
+++ b/dbclient.1
@@ -19,8 +19,7 @@ dbclient \- lightweight SSH client
 
 .SH DESCRIPTION
 .B dbclient
-is a SSH client designed to be small enough to be used in small memory
-environments, while still being functional and secure enough for general use.
+is a small SSH client 
 .SH OPTIONS
 .TP
 .B \-p \fIport
@@ -98,7 +97,7 @@ Ensure that traffic is transmitted at a certain interval in seconds. This is
 useful for working around firewalls or routers that drop connections after
 a certain period of inactivity. The trade-off is that a session may be
 closed if there is a temporary lapse of network connectivity. A setting
-if 0 disables keepalives.
+if 0 disables keepalives. If no response is received for 3 consecutive keepalives the connection will be closed.
 .TP
 .B \-I \fIidle_timeout
 Disconnect the session if no traffic is transmitted or received for \fIidle_timeout\fR seconds.
@@ -121,6 +120,9 @@ Specify a comma separated list of authentication MACs to enable. Use \fI-m help\
 .TP
 .B \-s 
 The specified command will be requested as a subsystem, used for sftp. Dropbear doesn't implement sftp itself but the OpenSSH sftp client can be used eg \fIsftp -S dbclient user@host\fR
+.TP
+.B \-V
+Print the version
 
 .SH MULTI-HOP
 Dropbear will also allow multiple "hops" to be specified, separated by commas. In
diff --git a/dropbear.8 b/dropbear.8
index 032e4ce0..42f8ddb3 100644
--- a/dropbear.8
+++ b/dropbear.8
@@ -10,8 +10,7 @@ dropbear \- lightweight SSH server
 .IR [address:]port ]
 .SH DESCRIPTION
 .B dropbear
-is a SSH server designed to be small enough to be used in small memory
-environments, while still being functional and secure enough for general use.
+is a small SSH server 
 .SH OPTIONS
 .TP
 .B \-b \fIbanner
@@ -88,10 +87,14 @@ Ensure that traffic is transmitted at a certain interval in seconds. This is
 useful for working around firewalls or routers that drop connections after
 a certain period of inactivity. The trade-off is that a session may be
 closed if there is a temporary lapse of network connectivity. A setting
-if 0 disables keepalives.
+if 0 disables keepalives. If no response is received for 3 consecutive keepalives the connection will be closed.
 .TP
 .B \-I \fIidle_timeout
 Disconnect the session if no traffic is transmitted or received for \fIidle_timeout\fR seconds.
+.TP
+.B \-V
+Print the version
+
 .SH FILES
 
 .TP
diff --git a/runopts.h b/runopts.h
index f3d784c5..28a50ddb 100644
--- a/runopts.h
+++ b/runopts.h
@@ -164,4 +164,6 @@ void cli_getopts(int argc, char ** argv);
 void parse_ciphers_macs();
 #endif
 
+void print_version(const char* name);
+
 #endif /* _RUNOPTS_H_ */
diff --git a/svr-runopts.c b/svr-runopts.c
index 414cb45e..ad946bcd 100644
--- a/svr-runopts.c
+++ b/svr-runopts.c
@@ -92,6 +92,7 @@ static void printhelp(const char * progname) {
 					"-W <receive_window_buffer> (default %d, larger may be faster, max 1MB)\n"
 					"-K <keepalive>  (0 is never, default %d, in seconds)\n"
 					"-I <idle_timeout>  (0 is never, default %d, in seconds)\n"
+					"-V    Version\n"
 #ifdef DEBUG_TRACE
 					"-v		verbose (compiled with DEBUG_TRACE)\n"
 #endif
@@ -256,7 +257,7 @@ void svr_getopts(int argc, char ** argv) {
 #endif
 				case 'h':
 					printhelp(argv[0]);
-					exit(EXIT_FAILURE);
+					exit(EXIT_SUCCESS);
 					break;
 				case 'u':
 					/* backwards compatibility with old urandom option */
@@ -266,6 +267,10 @@ void svr_getopts(int argc, char ** argv) {
 					debug_trace = 1;
 					break;
 #endif
+				case 'V':
+					print_version("server");
+					exit(EXIT_SUCCESS);
+					break;
 				default:
 					fprintf(stderr, "Unknown argument %s\n", argv[i]);
 					printhelp(argv[0]);
-- 
GitLab