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.
This commit is contained in:
Christopher Faulet 2020-06-22 11:07:18 +02:00
parent 60837d340c
commit c97406f790

View File

@ -26,6 +26,7 @@
#include <haproxy/sample.h>
#include <haproxy/server-t.h>
#include <haproxy/session.h>
#include <haproxy/sink.h>
#include <haproxy/tools.h>
@ -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: