]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: tcpcheck: conf parsing error when no port configured on server and last...
authorBaptiste Assmann <bedis9@gmail.com>
Fri, 4 Dec 2015 05:57:25 +0000 (06:57 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 4 Dec 2015 06:48:35 +0000 (07:48 +0100)
Current configuration parsing is permissive in such situation:
A server in a backend with no port conigured on the IP address
statement, no 'port' parameter configured and last rule of a tcp-check
is a CONNECT with no port.

The current code currently parses all the rules to validate a port is
well available, but it misses the last one, which means such
configuration is valid:

  backend b
   option tcp-check
   tcp-check connect port 8444
   tcp-check connect
   server s 127.0.0.1 check

the second connect tentative is sent to port '0'...

Current patch fixes this by parsing the list the right way, including
the last rule.

backport status: 1.6 and above

src/server.c

index b45a7fd9d7661c552fb5d49d00197f3ea65fe992..481697564b96a9b0bfece89601663eb7cfb9c796 100644 (file)
@@ -1719,7 +1719,7 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
                                        /* scan the tcp-check ruleset to ensure a port has been configured */
                                        l = &newsrv->proxy->tcpcheck_rules;
                                        list_for_each_entry(n, l, list) {
-                                               r = (struct tcpcheck_rule *)n->list.p;
+                                               r = (struct tcpcheck_rule *)n->list.n;
                                                if ((r->action == TCPCHK_ACT_CONNECT) && (!r->port)) {
                                                        Alert("parsing [%s:%d] : server %s has neither service port nor check port, and a tcp_check rule 'connect' with no port information. Check has been disabled.\n",
                                                              file, linenum, newsrv->id);