From 244331f6e7f2f22275cc20eeba2a0c36e27f4e7a Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 25 Jul 2022 15:10:44 +0200 Subject: [PATCH] Revert "BUG/MINOR: peers: set the proxy's name to the peers section name" This reverts commit 356866accefd16458f0e3c335d1b784e24e86d2d. It seems that an undocumented expectation of peers is based on the peers proxy name to determine if the local peer is fully configured or not. Thus because of the commit above, we are no longer able to detect incomplete peers sections. On side effect of this bug is a segfault when HAProxy is stopped/reloaded if we try to perform a local resync on a mis-configured local peer. So waiting for a better solution, the patch is reverted. This patch must be backported as far as 2.5. --- src/cfgparse.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index a56052151..0edfad095 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -566,12 +566,13 @@ unsigned long parse_cpu_set(const char **args, struct hap_cpuset *cpu_set, #endif /* Allocate and initialize the frontend of a "peers" section found in - * file at line for section . + * file at line with as ID. * Return 0 if succeeded, -1 if not. * Note that this function may be called from "default-server" * or "peer" lines. */ -static int init_peers_frontend(const char *file, int linenum, struct peers *peers) +static int init_peers_frontend(const char *file, int linenum, + const char *id, struct peers *peers) { struct proxy *p; @@ -593,9 +594,8 @@ static int init_peers_frontend(const char *file, int linenum, struct peers *peer peers->peers_fe = p; out: - if (!p->id && peers->id) - p->id = strdup(peers->id); - + if (id && !p->id) + p->id = strdup(id); free(p->conf.file); p->conf.args.file = p->conf.file = strdup(file); if (linenum != -1) @@ -697,7 +697,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) cur_arg = 1; - if (init_peers_frontend(file, linenum, curpeers) != 0) { + if (init_peers_frontend(file, linenum, NULL, curpeers) != 0) { err_code |= ERR_ALERT | ERR_ABORT; goto out; } @@ -771,7 +771,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) goto out; } else if (strcmp(args[0], "default-server") == 0) { - if (init_peers_frontend(file, -1, curpeers) != 0) { + if (init_peers_frontend(file, -1, NULL, curpeers) != 0) { err_code |= ERR_ALERT | ERR_ABORT; goto out; } @@ -779,7 +779,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) SRV_PARSE_DEFAULT_SERVER|SRV_PARSE_IN_PEER_SECTION|SRV_PARSE_INITIAL_RESOLVE); } else if (strcmp(args[0], "log") == 0) { - if (init_peers_frontend(file, linenum, curpeers) != 0) { + if (init_peers_frontend(file, linenum, NULL, curpeers) != 0) { err_code |= ERR_ALERT | ERR_ABORT; goto out; } @@ -876,6 +876,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) /* Line number and peer ID are updated only if this peer is the local one. */ if (init_peers_frontend(file, newpeer->local ? linenum: -1, + newpeer->local ? newpeer->id : NULL, curpeers) != 0) { err_code |= ERR_ALERT | ERR_ABORT; goto out; @@ -968,7 +969,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm) size_t prefix_len; /* Line number and peer ID are updated only if this peer is the local one. */ - if (init_peers_frontend(file, -1, curpeers) != 0) { + if (init_peers_frontend(file, -1, NULL, curpeers) != 0) { err_code |= ERR_ALERT | ERR_ABORT; goto out; }