From c70906c8a1d262194e416c0094e5eba8f30ba7c9 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 17 Sep 2024 19:22:28 +0200 Subject: [PATCH] BUG/MINOR: cfgparse: detect incorrect overlap of same backend names As reported below, it's possible to declare a backend then a proxy with the same name, because for the proxy we check a frontend capability (the first one to be tested): backend b listen b bind :8888 Let's check the two capabilities in this case and not just the frontend. Better not backport this, as there's a risk of breakage of existing setups that work by accident. It might make sense to report them as diag warnings though. Link: https://www.mail-archive.com/haproxy@formilux.org/msg45185.html --- src/cfgparse-listen.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c index 310951616..da1bc336e 100644 --- a/src/cfgparse-listen.c +++ b/src/cfgparse-listen.c @@ -271,8 +271,15 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) err_code |= ERR_ALERT | ERR_FATAL; } - curproxy = (rc & PR_CAP_FE) ? proxy_fe_by_name(args[1]) : proxy_be_by_name(args[1]); + curproxy = NULL; + if (rc & PR_CAP_FE) + curproxy = proxy_fe_by_name(args[1]); + + if (!curproxy && (rc & PR_CAP_BE)) + curproxy = proxy_be_by_name(args[1]); + if (curproxy) { + /* same capability in common: always forbidden */ ha_alert("Parsing [%s:%d]: %s '%s' has the same name as %s '%s' declared at %s:%d.\n", file, linenum, proxy_cap_str(rc), args[1], proxy_type_str(curproxy), curproxy->id, curproxy->conf.file, curproxy->conf.line);