From: Willy Tarreau Date: Wed, 18 Sep 2024 16:05:02 +0000 (+0200) Subject: MEDIUM: cfgparse: detect collisions between defaults and log-forward X-Git-Tag: v3.1-dev8~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a38684fbc;p=thirdparty%2Fhaproxy.git MEDIUM: cfgparse: detect collisions between defaults and log-forward Sadly, when log-forward were introduced they took great care of avoiding collision with regular proxies but defaults were missed (they need to be explicitly checked for). So now we have to move them to a warning for 3.1 instead of rejecting them. --- diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c index e5945d8e24..60f20ecd2c 100644 --- a/src/cfgparse-listen.c +++ b/src/cfgparse-listen.c @@ -318,6 +318,19 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) curproxy->id, curproxy->conf.file, curproxy->conf.line); err_code |= ERR_WARN; } + else if (rc & PR_CAP_DEF) { + /* only defaults need to be checked here, other proxies + * have already been above. + */ + curproxy = log_forward_by_name(args[1]); + if (curproxy) { + ha_warning("Parsing [%s:%d]: %s '%s' has the same name as log-forward section '%s' declared at %s:%d." + " This is dangerous and will not be supported anymore in version 3.3.\n", + file, linenum, proxy_cap_str(rc), args[1], + curproxy->id, curproxy->conf.file, curproxy->conf.line); + err_code |= ERR_WARN; + } + } if (rc & PR_CAP_DEF && strcmp(args[1], "from") == 0 && *args[2] && !*args[3]) { // also support "defaults from blah" (no name then) diff --git a/src/log.c b/src/log.c index 993fe08e80..8b6e9b61f7 100644 --- a/src/log.c +++ b/src/log.c @@ -5867,6 +5867,16 @@ int cfg_parse_log_forward(const char *file, int linenum, char **args, int kwm) goto out; } + px = proxy_find_by_name(args[1], PR_CAP_DEF, 0); + if (px) { + /* collision with a "defaults" section */ + ha_warning("Parsing [%s:%d]: log-forward section '%s' has the same name as %s '%s' declared at %s:%d." + " This is dangerous and will not be supported anymore in version 3.3.\n", + file, linenum, args[1], proxy_type_str(px), + px->id, px->conf.file, px->conf.line); + err_code |= ERR_WARN; + } + px = calloc(1, sizeof *px); if (!px) { err_code |= ERR_ALERT | ERR_FATAL;