mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-26 21:31:01 +01:00
BUG/MINOR: check: Don't perform any check on servers defined in a frontend
If a server is defined in a frontend, thus a proxy without the backend capability, the 'check' and 'agent-check' keywords are ignored. This way, no check is performed on an ignored server. This avoids a segfault because some part of the tcpchecks are not fully initialized (or released for frontends during the post-check). In addition, an test on the server's proxy capabilities is performed when checks or agent-checks are initialized and nothing is performed for servers attached to a non-backend proxy. This patch should fix the issue #1043. It must be backported as far as 2.2.
This commit is contained in:
parent
22e0d9b39c
commit
6ecd59326f
16
src/check.c
16
src/check.c
@ -1272,7 +1272,7 @@ static int init_srv_check(struct server *srv)
|
||||
int ret = ERR_NONE;
|
||||
int check_type;
|
||||
|
||||
if (!srv->do_check)
|
||||
if (!srv->do_check || !(srv->proxy->cap & PR_CAP_BE))
|
||||
goto out;
|
||||
|
||||
check_type = srv->check.tcpcheck_rules->flags & TCPCHK_RULES_PROTO_CHK;
|
||||
@ -1397,7 +1397,7 @@ static int init_srv_agent_check(struct server *srv)
|
||||
const char *err;
|
||||
int ret = ERR_NONE;
|
||||
|
||||
if (!srv->do_agent)
|
||||
if (!srv->do_agent || !(srv->proxy->cap & PR_CAP_BE))
|
||||
goto out;
|
||||
|
||||
/* If there is no connect rule preceding all send / expect rules, an
|
||||
@ -1551,6 +1551,12 @@ static int srv_parse_agent_check(char **args, int *cur_arg, struct proxy *curpx,
|
||||
if (srv->do_agent)
|
||||
goto out;
|
||||
|
||||
if (!(curpx->cap & PR_CAP_BE)) {
|
||||
memprintf(errmsg, "'%s' ignored because %s '%s' has no backend capability",
|
||||
args[*cur_arg], proxy_type_str(curpx), curpx->id);
|
||||
return ERR_WARN;
|
||||
}
|
||||
|
||||
if (!rules) {
|
||||
rules = calloc(1, sizeof(*rules));
|
||||
if (!rules) {
|
||||
@ -1750,6 +1756,12 @@ static int srv_parse_no_agent_check(char **args, int *cur_arg, struct proxy *cur
|
||||
static int srv_parse_check(char **args, int *cur_arg, struct proxy *curpx, struct server *srv,
|
||||
char **errmsg)
|
||||
{
|
||||
if (!(curpx->cap & PR_CAP_BE)) {
|
||||
memprintf(errmsg, "'%s' ignored because %s '%s' has no backend capability",
|
||||
args[*cur_arg], proxy_type_str(curpx), curpx->id);
|
||||
return ERR_WARN;
|
||||
}
|
||||
|
||||
srv->do_check = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user