summaryrefslogtreecommitdiffhomepage
path: root/cli-runopts.c
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2015-12-15 22:57:22 +0800
committerMatt Johnston <matt@ucc.asn.au>2015-12-15 22:57:22 +0800
commit20bdf3a5b1a1227b55a94830e5046b68b5ebc60c (patch)
tree7f1b75c6e92641d4045ca6c3a5f7998901b57bbe /cli-runopts.c
parentda108a932769806aca0e6e50831a6213becf42c8 (diff)
revert removal of space handling, different fix for avoiding option prefix
matches
Diffstat (limited to 'cli-runopts.c')
-rw-r--r--cli-runopts.c20
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) {