BUG/MINOR: tcpcheck: conf parsing error when no port configured on server and last rule is a CONNECT with no port

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
This commit is contained in:
Baptiste Assmann 2015-12-04 06:57:25 +01:00 committed by Willy Tarreau
parent b65e0335d9
commit 3dd73bea64

View 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 */ /* scan the tcp-check ruleset to ensure a port has been configured */
l = &newsrv->proxy->tcpcheck_rules; l = &newsrv->proxy->tcpcheck_rules;
list_for_each_entry(n, l, list) { 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)) { 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", 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); file, linenum, newsrv->id);