diff options
author | Matt Johnston <matt@ucc.asn.au> | 2015-12-15 22:57:22 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2015-12-15 22:57:22 +0800 |
commit | 20bdf3a5b1a1227b55a94830e5046b68b5ebc60c (patch) | |
tree | 7f1b75c6e92641d4045ca6c3a5f7998901b57bbe /cli-runopts.c | |
parent | da108a932769806aca0e6e50831a6213becf42c8 (diff) |
revert removal of space handling, different fix for avoiding option prefix
matches
Diffstat (limited to 'cli-runopts.c')
-rw-r--r-- | cli-runopts.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/cli-runopts.c b/cli-runopts.c index 60b4aa1..ab25d37 100644 --- a/cli-runopts.c +++ b/cli-runopts.c @@ -824,22 +824,34 @@ badport: #endif static int match_extendedopt(const char** strptr, const char *optname) { + int seen_eq = 0; int optlen = strlen(optname); const char *str = *strptr; + while (isspace(*str)) { + ++str; + } + if (strncasecmp(str, optname, optlen) != 0) { return DROPBEAR_FAILURE; } str += optlen; - if (*str == '=') { - *strptr = str+1; - return DROPBEAR_SUCCESS; - } else { + while (isspace(*str) || (!seen_eq && *str == '=')) { + if (*str == '=') { + seen_eq = 1; + } + ++str; + } + + if (str-*strptr == optlen) { + /* matched just a prefix of optname */ return DROPBEAR_FAILURE; } + *strptr = str; + return DROPBEAR_SUCCESS; } static int parse_flag_value(const char *value) { |