From 9736221e90e51e9fd63e04f9ac638cf777071791 Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Wed, 27 Aug 2025 12:27:53 +0200 Subject: [PATCH] MINOR: haproxy: abort config parsing on fatal errors for post parsing hooks When pre-check and post-check postparsing hooks= are evaluated in step_init_2() potential fatal errors are ignored during the iteration and are only taken into account at the end of the loop. This is not ideal because some errors (ie: memory errors) could cause multiple alert messages in a row, which could make troubleshooting harder for the user. Let's stop as soon as a fatal error is encountered for post parsing hooks, as we use to do everywhere else. --- src/haproxy.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/haproxy.c b/src/haproxy.c index 52d93c228..7a3b511ea 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -2061,12 +2061,12 @@ static void step_init_2(int argc, char** argv) /* destroy unreferenced defaults proxies */ proxy_destroy_all_unref_defaults(); - list_for_each_entry(prcf, &pre_check_list, list) + list_for_each_entry(prcf, &pre_check_list, list) { err_code |= prcf->fct(); - - if (err_code & (ERR_ABORT|ERR_FATAL)) { - ha_alert("Fatal errors found in configuration.\n"); - exit(1); + if (err_code & (ERR_ABORT|ERR_FATAL)) { + ha_alert("Fatal errors found in configuration.\n"); + exit(1); + } } /* update the ready date that will be used to count the startup time @@ -2119,17 +2119,24 @@ static void step_init_2(int argc, char** argv) continue; list_for_each_entry(pscf, &post_server_check_list, list) { - for (srv = px->srv; srv; srv = srv->next) + for (srv = px->srv; srv; srv = srv->next) { err_code |= pscf->fct(srv); + if (err_code & (ERR_ABORT|ERR_FATAL)) { + ha_alert("Fatal errors found in configuration.\n"); + exit(1); + } + } } - list_for_each_entry(ppcf, &post_proxy_check_list, list) + list_for_each_entry(ppcf, &post_proxy_check_list, list) { err_code |= ppcf->fct(px); + if (err_code & (ERR_ABORT|ERR_FATAL)) { + ha_alert("Fatal errors found in configuration.\n"); + exit(1); + } + + } px->flags |= PR_FL_CHECKED; } - if (err_code & (ERR_ABORT|ERR_FATAL)) { - ha_alert("Fatal errors found in configuration.\n"); - exit(1); - } err_code |= pattern_finalize_config(); if (err_code & (ERR_ABORT|ERR_FATAL)) {