[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.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index a86ed0e..fd273b0 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1162,7 +1162,7 @@
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;
@@ -2339,7 +2339,7 @@
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;
@@ -2365,12 +2365,41 @@
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")) {