From 04fefcddb8e71e87abeb0faff0f547eb8ae88a64 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Thu, 1 Aug 2013 12:14:02 +0200 Subject: journal: handle multiline syslog messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the journal can handle multiple lines just well natively, and rsyslog can be configured to handle them as well, there is no need to truncate messages from syslog() after the first newline. Reproducer: 1. Add following four lines to /etc/rsyslog.conf ---------- $EscapeControlCharactersOnReceive off $ActionFileDefaultTemplate RSYSLOG_SysklogdFileFormat $SpaceLFOnReceive on $DropTrailingLFOnReception off ---------- 3. Restart rsyslog # service rsyslog restart 4. Compile and run the following program ---------- #include #include int main() { syslog(LOG_INFO, "aaa%caaa", '\n'); return 0; } ---------- Actual results: Below message appears in /var/log/messages. ----------    Sep 7 19:19:39 localhost test2: aaa ---------- Expected results: Below message, which worked prior to systemd-journald appears in /var/log/messages. ----------    Sep 7 19:19:39 localhost test2: aaa aaa https://bugzilla.redhat.com/show_bug.cgi?id=855313 --- src/journal/journald-server.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 821935c390..f417059ec5 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -1240,12 +1240,7 @@ int process_event(Server *s, struct epoll_event *ev) { char *e; if (n > 0 && n_fds == 0) { - e = memchr(s->buffer, '\n', n); - if (e) - *e = 0; - else - s->buffer[n] = 0; - + s->buffer[n] = 0; server_process_syslog_message(s, strstrip(s->buffer), ucred, tv, label, label_len); } else if (n_fds > 0) log_warning("Got file descriptors via syslog socket. Ignoring."); -- cgit v1.2.3-54-g00ecf