From: Christopher Faulet Date: Mon, 22 Jun 2020 09:07:18 +0000 (+0200) Subject: BUG/MEDIUM: fcgi-app: Resolve the sink if a fcgi-app logs in a ring buffer X-Git-Tag: v2.2-dev11~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c97406f7907f545a9a5645d81da56d79b5043f80;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: fcgi-app: Resolve the sink if a fcgi-app logs in a ring buffer If a fcgi application is configured to send its logs to a ring buffer, the corresponding sink must be resolved during the configuration post parsing. Otherwise, the sink is undefined when a log message is emitted, crashing HAProxy. No need to backport. --- diff --git a/src/fcgi-app.c b/src/fcgi-app.c index 964cc7d3f6..3f315a6cf9 100644 --- a/src/fcgi-app.c +++ b/src/fcgi-app.c @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -646,6 +647,7 @@ static int cfg_fcgi_apps_postparser() struct fcgi_app *curapp; struct proxy *px; struct server *srv; + struct logsrv *logsrv; int err_code = 0; for (px = proxies_list; px; px = px->next) { @@ -694,6 +696,19 @@ static int cfg_fcgi_apps_postparser() } curapp->maxreqs = 1; } + + list_for_each_entry(logsrv, &curapp->logsrvs, list) { + if (logsrv->type == LOG_TARGET_BUFFER) { + struct sink *sink = sink_find(logsrv->ring_name); + + if (!sink || sink->type != SINK_TYPE_BUFFER) { + ha_alert("config : fcgi-app '%s' : log server uses unkown ring named '%s'.\n", + curapp->name, logsrv->ring_name); + err_code |= ERR_ALERT | ERR_FATAL; + } + logsrv->sink = sink; + } + } } end: