diff options
author | Matt Johnston <matt@ucc.asn.au> | 2015-10-21 22:05:50 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2015-10-21 22:05:50 +0800 |
commit | 23cc2bfb8cf82d378c4e678b9505ec328998aee7 (patch) | |
tree | 6bc7e7501480e71eaa9a2fe142225e5d02522fd7 | |
parent | 9e379835c4ebbfef41440416fc72518e48ea8dde (diff) |
don't silently ignore extra flag arguments
-rw-r--r-- | cli-runopts.c | 8 | ||||
-rw-r--r-- | dbclient.1 | 2 | ||||
-rw-r--r-- | dropbear.8 | 2 | ||||
-rw-r--r-- | svr-runopts.c | 7 |
4 files changed, 14 insertions, 5 deletions
diff --git a/cli-runopts.c b/cli-runopts.c index 58b64ce..b251550 100644 --- a/cli-runopts.c +++ b/cli-runopts.c @@ -218,8 +218,12 @@ void cli_getopts(int argc, char ** argv) { if (argv[i][0] == '-') { /* A flag *waves* */ - - switch (argv[i][1]) { + char c = argv[i][1]; + if (strlen(argv[i]) != 2) { + /* Ensure only one flag per hyphen. '?' falls through to print help */ + c = '?'; + } + switch (c) { case 'y': /* always accept the remote hostkey */ if (cli_opts.always_accept_key) { /* twice means no checking at all */ @@ -3,7 +3,7 @@ dbclient \- lightweight SSH client .SH SYNOPSIS .B dbclient -[\-Tt] [\-p +[flag arguments] [\-p .I port\fR] [\-i .I id\fR] [\-L .I l\fR:\fIh\fR:\fIr\fR] [\-R @@ -3,7 +3,7 @@ dropbear \- lightweight SSH server .SH SYNOPSIS .B dropbear -[\-RFEmwsgjki] [\-b +[flag arguments] [\-b .I banner\fR] [\-r .I hostkeyfile\fR] [\-p diff --git a/svr-runopts.c b/svr-runopts.c index 09fc9af..acb7cc1 100644 --- a/svr-runopts.c +++ b/svr-runopts.c @@ -189,7 +189,12 @@ void svr_getopts(int argc, char ** argv) { } if (argv[i][0] == '-') { - switch (argv[i][1]) { + char c = argv[i][1]; + if (strlen(argv[i]) != 2) { + /* Ensure only one flag per hyphen. '?' falls through to print help */ + c = '?'; + } + switch (c) { case 'b': next = &svr_opts.bannerfile; break; |