]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: tcpcheck: conf parsing error when no port configured on server and first...
authorBaptiste Assmann <bedis9@gmail.com>
Fri, 4 Dec 2015 05:49:31 +0000 (06:49 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 4 Dec 2015 06:48:44 +0000 (07:48 +0100)
A small configuration parsing error exists when no port is setup on the
server IP:port statement and the server's parameter 'port' is not set
and if the first tcp-check rule is a comment, like in the example below:

  backend b
   option tcp-check
   tcp-check comment blah
   tcp-check connect 8444
   server s 127.0.0.1 check

In such case, an ALERT is improperly returned, despite this
configuration is valid and works.

The new code move the pointer to the first tcp-check rule which isn't a
comment before checking the presence of the port.

backport status: 1.6 and above

src/server.c

index 481697564b96a9b0bfece89601663eb7cfb9c796..a76ca6b04357aba45c840c602591c3fe44706eb1 100644 (file)
@@ -1709,6 +1709,13 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
                                        err_code |= ERR_ALERT | ERR_FATAL;
                                        goto out;
                                }
+                               /* search the first action (connect / send / expect) in the list */
+                               l = &newsrv->proxy->tcpcheck_rules;
+                               list_for_each_entry(n, l, list) {
+                                       r = (struct tcpcheck_rule *)n->list.n;
+                                       if (r->action != TCPCHK_ACT_COMMENT)
+                                               break;
+                               }
                                if ((r->action != TCPCHK_ACT_CONNECT) || !r->port) {
                                        Alert("parsing [%s:%d] : server %s has neither service port nor check port nor tcp_check rule 'connect' with port information. Check has been disabled.\n",
                                              file, linenum, newsrv->id);