From 6f69110191971ab6505ed9edb278f64d404a3a60 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 4 Mar 2021 16:35:26 +0100 Subject: [PATCH] BUG/MINOR: server-state: Don't load server-state file for disabled backends Recent changes on the server-state file loading have introduced a regression. HAproxy crashes if a backend with no server-state file is disabled in the configuration. Indeed, configuration of such backends is not finalized. Thus many fields are not defined. To fix the bug, disabled backends must be ignored. In addition a BUG_ON() has been added to verify the proxy mode regarding the server-state file. It must be specified (none, global or local) for enabled backends. No backport needed. --- src/server_state.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server_state.c b/src/server_state.c index 302ffb34d..a4df1fa7d 100644 --- a/src/server_state.c +++ b/src/server_state.c @@ -815,10 +815,13 @@ void apply_server_state(void) for (curproxy = proxies_list; curproxy != NULL; curproxy = curproxy->next) { struct eb_root local_state_tree = EB_ROOT_UNIQUE; - /* servers are only in backends */ - if (!(curproxy->cap & PR_CAP_BE) || !curproxy->srv) + /* Must be an enabled backend with at least a server */ + if (!(curproxy->cap & PR_CAP_BE) || curproxy->disabled || !curproxy->srv) continue; /* next proxy */ + /* Mode must be specified */ + BUG_ON(curproxy->load_server_state_from_file == PR_SRV_STATE_FILE_UNSPEC); + /* No server-state file for this proxy */ if (curproxy->load_server_state_from_file == PR_SRV_STATE_FILE_NONE) continue; /* next proxy */