From 1a38684fbc0b510f000e3df77ad6ddeaf27580f7 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 18 Sep 2024 18:05:02 +0200 Subject: [PATCH] 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. --- src/cfgparse-listen.c | 13 +++++++++++++ src/log.c | 10 ++++++++++ 2 files changed, 23 insertions(+) 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; -- 2.39.5