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 964cc7d..3f315a6 100644
--- a/src/fcgi-app.c
+++ b/src/fcgi-app.c
@@ -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 @@
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 @@
}
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: