From: Krzysztof Piotr Oledzki Date: Sun, 27 Sep 2009 14:17:31 +0000 (+0200) Subject: [BUG] check if rise/fall has an argument and it is > 0 X-Git-Tag: v1.3.21~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5e947894afd592e6bdcabc40b1ee5cf9d9cb0175;p=thirdparty%2Fhaproxy.git [BUG] check if rise/fall has an argument and it is > 0 Check if rise/fall has an argument and it is > 0 or bad things may happen in the health checks. ;) Now it is verified and the code no longer allows for such condition: backend bad (...) server o-f0 192.168.129.27:80 check inter 4000 source 0.0.0.0 rise 0 server o-r0 192.168.129.27:80 check inter 4000 source 0.0.0.0 fall 0 server o-f1 192.168.129.27:80 check inter 4000 source 0.0.0.0 rise server o-r1 192.168.129.27:80 check inter 4000 source 0.0.0.0 fall [ALERT] 269/161830 (24136) : parsing [../git/haproxy.cfg:98]: 'rise' has to be > 0. [ALERT] 269/161830 (24136) : parsing [../git/haproxy.cfg:99]: 'fall' has to be > 0. [ALERT] 269/161830 (24136) : parsing [../git/haproxy.cfg:100]: 'rise' expects an integer argument. [ALERT] 269/161830 (24136) : parsing [../git/haproxy.cfg:101]: 'fall' expects an integer argument. Also add endline in the custom id checking code. (cherry picked from commit 08ff959c3eaaac89efb38f249f095a8b0d04ef47) --- diff --git a/src/cfgparse.c b/src/cfgparse.c index 1ac64cb61e..4052bd313e 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1095,7 +1095,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv) curproxy->uuid = atol(args[1]); if (curproxy->uuid < 1001) { - Alert("parsing [%s:%d]: custom id has to be > 1000", + Alert("parsing [%s:%d]: custom id has to be > 1000.\n", file, linenum); err_code |= ERR_ALERT | ERR_FATAL; goto out; @@ -2193,7 +2193,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv) newsrv->puid = atol(args[cur_arg + 1]); if (newsrv->puid< 1001) { - Alert("parsing [%s:%d]: custom id has to be > 1000", + Alert("parsing [%s:%d]: custom id has to be > 1000.\n", file, linenum); err_code |= ERR_ALERT | ERR_FATAL; goto out; @@ -2219,12 +2219,41 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv) cur_arg += 2; } else if (!strcmp(args[cur_arg], "rise")) { + if (!*args[cur_arg + 1]) { + Alert("parsing [%s:%d]: '%s' expects an integer argument.\n", + file, linenum, args[cur_arg]); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + newsrv->rise = atol(args[cur_arg + 1]); + if (newsrv->rise <= 0) { + Alert("parsing [%s:%d]: '%s' has to be > 0.\n", + file, linenum, args[cur_arg]); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + newsrv->health = newsrv->rise; cur_arg += 2; } else if (!strcmp(args[cur_arg], "fall")) { newsrv->fall = atol(args[cur_arg + 1]); + + if (!*args[cur_arg + 1]) { + Alert("parsing [%s:%d]: '%s' expects an integer argument.\n", + file, linenum, args[cur_arg]); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + + if (newsrv->fall <= 0) { + Alert("parsing [%s:%d]: '%s' has to be > 0.\n", + file, linenum, args[cur_arg]); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + cur_arg += 2; } else if (!strcmp(args[cur_arg], "inter")) {