diff --git a/include/proto/proxy.h b/include/proto/proxy.h index d4d4c854c..5297d0806 100644 --- a/include/proto/proxy.h +++ b/include/proto/proxy.h @@ -39,7 +39,8 @@ int session_set_backend(struct session *s, struct proxy *be); const char *proxy_cap_str(int cap); const char *proxy_mode_str(int mode); -struct proxy *findproxy(const char *name, int mode, int cap); +struct proxy *findproxy_mode(const char *name, int mode, int cap); +struct proxy *findproxy(const char *name, int cap); struct server *findserver(const struct proxy *px, const char *name); int proxy_cfg_ensure_no_http(struct proxy *curproxy); int get_backend_server(const char *bk_name, const char *sv_name, diff --git a/src/cfgparse.c b/src/cfgparse.c index 43637968f..34d4476e2 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -4166,7 +4166,7 @@ int check_config_validity() if (curproxy->defbe.name) { struct proxy *target; - target = findproxy(curproxy->defbe.name, curproxy->mode, PR_CAP_BE); + target = findproxy_mode(curproxy->defbe.name, curproxy->mode, PR_CAP_BE); if (!target) { Alert("Proxy '%s': unable to find required default_backend: '%s'.\n", curproxy->id, curproxy->defbe.name); @@ -4196,7 +4196,7 @@ int check_config_validity() if (exp->action != ACT_SETBE) continue; - target = findproxy(exp->replace, PR_MODE_HTTP, PR_CAP_BE); + target = findproxy_mode(exp->replace, PR_MODE_HTTP, PR_CAP_BE); if (!target) { Alert("Proxy '%s': unable to find required setbe: '%s'.\n", curproxy->id, exp->replace); @@ -4221,7 +4221,7 @@ int check_config_validity() list_for_each_entry(rule, &curproxy->switching_rules, list) { struct proxy *target; - target = findproxy(rule->be.name, curproxy->mode, PR_CAP_BE); + target = findproxy_mode(rule->be.name, curproxy->mode, PR_CAP_BE); if (!target) { Alert("Proxy '%s': unable to find required use_backend: '%s'.\n", @@ -4433,7 +4433,7 @@ int check_config_validity() } if (pname) { - px = findproxy(pname, curproxy->mode, PR_CAP_BE); + px = findproxy(pname, PR_CAP_BE); if (!px) { Alert("config : %s '%s', server '%s': unable to find required proxy '%s' for tracking.\n", proxy_type_str(curproxy), curproxy->id, @@ -4455,7 +4455,7 @@ int check_config_validity() if (!(srv->state & SRV_CHECKED)) { Alert("config : %s '%s', server '%s': unable to use %s/%s for " - "tracing as it does not have checks enabled.\n", + "tracking as it does not have checks enabled.\n", proxy_type_str(curproxy), curproxy->id, newsrv->id, px->id, srv->id); cfgerr++; diff --git a/src/proxy.c b/src/proxy.c index dd6504802..181cdd8bd 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -281,7 +281,7 @@ static int proxy_parse_rate_limit(char **args, int section, struct proxy *proxy, * requested name as this often leads into unexpected situations. */ -struct proxy *findproxy(const char *name, int mode, int cap) { +struct proxy *findproxy_mode(const char *name, int mode, int cap) { struct proxy *curproxy, *target = NULL; @@ -311,6 +311,25 @@ struct proxy *findproxy(const char *name, int mode, int cap) { return target; } +struct proxy *findproxy(const char *name, int cap) { + + struct proxy *curproxy, *target = NULL; + + for (curproxy = proxy; curproxy; curproxy = curproxy->next) { + if ((curproxy->cap & cap)!=cap || strcmp(curproxy->id, name)) + continue; + + if (!target) { + target = curproxy; + continue; + } + + return NULL; + } + + return target; +} + /* * This function finds a server with matching name within selected proxy. * It also checks if there are more matching servers with