From: Willy Tarreau Date: Wed, 4 Oct 2017 12:43:44 +0000 (+0200) Subject: BUG/MINOR: unix: properly check for octal digits in the "mode" argument X-Git-Tag: v1.8-dev3~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1a247bd90248f92005b3a456b0ccabc11efe602;p=thirdparty%2Fhaproxy.git BUG/MINOR: unix: properly check for octal digits in the "mode" argument A config containing "stats socket /path/to/socket mode admin" used to silently start and be unusable (mode 0, level user) because the "mode" parser doesn't take care of non-digits. Now it properly reports : [ALERT] 276/144303 (7019) : parsing [ext-check.cfg:4] : 'stats socket' : ''mode' : missing or invalid mode 'admin' (octal integer expected)' This can probably be backported to 1.7, 1.6 and 1.5, though reporting parsing errors in very old versions probably isn't a good idea if the feature was left unused for years. --- diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 80237b1b4f..80ba8cceb0 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -623,12 +623,15 @@ static int uxst_unbind_listeners(struct protocol *proto) /* parse the "mode" bind keyword */ static int bind_parse_mode(char **args, int cur_arg, struct proxy *px, struct bind_conf *conf, char **err) { - if (!*args[cur_arg + 1]) { - memprintf(err, "'%s' : missing mode (octal integer expected)", args[cur_arg]); + char *endptr; + + conf->ux.mode = strtol(args[cur_arg + 1], &endptr, 8); + + if (!*args[cur_arg + 1] || *endptr) { + memprintf(err, "'%s' : missing or invalid mode '%s' (octal integer expected)", args[cur_arg], args[cur_arg + 1]); return ERR_ALERT | ERR_FATAL; } - conf->ux.mode = strtol(args[cur_arg + 1], NULL, 8); return 0; }