From fdbff3a02083c398b895ac198f22deeb5c042dc6 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Thu, 17 Oct 2024 12:09:05 +0200 Subject: [PATCH] BUG/MEDIUM: mworker/httpclient: initialization skipped by accident in mworker mode Since commit fe75c1e12da061 ("MEDIUM: startup: remove MODE_MWORKER_WAIT") the MODE_MWORKER_WAIT constant disappearded. The initialization of the httpclient proxy was conditionned by this constant. The proxy must be created in mworker mode, but only in the worker not in the master. It was currently completely disabled in both the master and the worker provoking a NULL dereference upon httpclient usage. No backport needed. --- src/http_client.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/http_client.c b/src/http_client.c index f137a6e3b..a1b976ca0 100644 --- a/src/http_client.c +++ b/src/http_client.c @@ -1208,7 +1208,8 @@ struct proxy *httpclient_create_proxy(const char *id) struct server *srv_ssl = NULL; #endif - if (global.mode & MODE_MWORKER) + /* the httpclient is not usable in the master process */ + if (master) return ERR_NONE; px = alloc_new_proxy(id, PR_CAP_LISTEN|PR_CAP_INT|PR_CAP_HTTPCLIENT, &errmsg); @@ -1345,8 +1346,11 @@ err: */ static int httpclient_precheck() { - /* initialize the default httpclient_proxy which is used for the CLI and the lua */ + /* the httpclient is not usable in the master process */ + if (master) + return ERR_NONE; + /* initialize the default httpclient_proxy which is used for the CLI and the lua */ httpclient_proxy = httpclient_create_proxy(""); if (!httpclient_proxy) return ERR_RETRYABLE; @@ -1365,7 +1369,8 @@ static int httpclient_postcheck_proxy(struct proxy *curproxy) struct server *srv_ssl = NULL; #endif - if (global.mode & MODE_MWORKER) + /* the httpclient is not usable in the master process */ + if (master) return ERR_NONE; if (!(curproxy->cap & PR_CAP_HTTPCLIENT))