From: Evgeny Vereshchagin Date: Sun, 21 Oct 2018 03:21:36 +0000 (+0000) Subject: journald: use the "driver" transport for logging a refused connection X-Git-Tag: v240~488 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8758e726c58babdfd654c622c5524e029232787;p=thirdparty%2Fsystemd.git journald: use the "driver" transport for logging a refused connection Otherwise, these messages can end up in `/dev/null` when journald is run in containers as was shown in https://github.com/systemd/systemd/pull/10444#issuecomment-430927793. --- diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c index 502bd6f51bb..9ddcbb9d9d7 100644 --- a/src/journal/journald-stream.c +++ b/src/journal/journald-stream.c @@ -610,7 +610,17 @@ static int stdout_stream_new(sd_event_source *es, int listen_fd, uint32_t revent } if (s->n_stdout_streams >= STDOUT_STREAMS_MAX) { - log_warning("Too many stdout streams, refusing connection."); + struct ucred u; + + r = getpeercred(fd, &u); + + /* By closing fd here we make sure that the client won't wait too long for journald to + * gather all the data it adds to the error message to find out that the connection has + * just been refused. + */ + fd = safe_close(fd); + + server_driver_message(s, r < 0 ? 0 : u.pid, NULL, LOG_MESSAGE("Too many stdout streams, refusing connection."), NULL); return 0; }