BUG/MINOR: tcpcheck: Don't forget to reset tcp-check flags on new kind of check

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.
This commit is contained in:
Christopher Faulet 2020-11-25 16:43:12 +01:00
parent 5a7d6ebf2c
commit 1faf18ae39

View File

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