]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: tcpcheck: Don't forget to reset tcp-check flags on new kind of check
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 25 Nov 2020 15:43:12 +0000 (16:43 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 27 Nov 2020 09:08:18 +0000 (10:08 +0100)
When a new kind of check is found during the parsing of a proxy section (via
an option directive), we must reset tcpcheck flags for this proxy. It is
mandatory to not inherit some flags from a previously declared check (for
instance in the default section).

This patch must be backported as far as 2.2.

src/check.c

index 315bc873f64c5612fee46d1c77ee3f94cd7bbb62..03966d858c795a8f49224c2c2b23312f53f5d03b 100644 (file)
@@ -1598,8 +1598,8 @@ int proxy_parse_tcp_check_opt(char **args, int cur_arg, struct proxy *curpx, str
   ruleset_found:
        free_tcpcheck_vars(&rules->preset_vars);
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_TCP_CHK;
-       rules->flags &= ~TCPCHK_RULES_UNUSED_TCP_RS;
 
   out:
        return err_code;
@@ -1669,6 +1669,7 @@ int proxy_parse_redis_check_opt(char **args, int cur_arg, struct proxy *curpx, s
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_REDIS_CHK;
 
   out:
@@ -1768,6 +1769,7 @@ int proxy_parse_ssl_hello_chk_opt(char **args, int cur_arg, struct proxy *curpx,
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_SSL3_CHK;
 
   out:
@@ -1905,6 +1907,7 @@ int proxy_parse_smtpchk_opt(char **args, int cur_arg, struct proxy *curpx, struc
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_SMTP_CHK;
 
   out:
@@ -2050,6 +2053,7 @@ int proxy_parse_pgsql_check_opt(char **args, int cur_arg, struct proxy *curpx, s
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_PGSQL_CHK;
 
   out:
@@ -2273,6 +2277,7 @@ int proxy_parse_mysql_check_opt(char **args, int cur_arg, struct proxy *curpx, s
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_MYSQL_CHK;
 
   out:
@@ -2356,6 +2361,7 @@ int proxy_parse_ldap_check_opt(char **args, int cur_arg, struct proxy *curpx, st
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_LDAP_CHK;
 
   out:
@@ -2431,6 +2437,7 @@ int proxy_parse_spop_check_opt(char **args, int cur_arg, struct proxy *curpx, st
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_SPOP_CHK;
 
   out:
@@ -2621,8 +2628,8 @@ int proxy_parse_httpchk_opt(char **args, int cur_arg, struct proxy *curpx, struc
        }
 
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_HTTP_CHK;
-       rules->flags &= ~TCPCHK_RULES_UNUSED_HTTP_RS;
        if (!tcpcheck_add_http_rule(chk, rules, &errmsg)) {
                ha_alert("parsing [%s:%d] : '%s %s' : %s.\n", file, line, args[0], args[1], errmsg);
                rules->list = NULL;
@@ -2752,6 +2759,7 @@ static int srv_parse_agent_check(char **args, int *cur_arg, struct proxy *curpx,
 
   ruleset_found:
        rules->list = &rs->rules;
+       rules->flags &= ~(TCPCHK_RULES_PROTO_CHK|TCPCHK_RULES_UNUSED_RS);
        rules->flags |= TCPCHK_RULES_AGENT_CHK;
        srv->do_agent = 1;