Cherry-pick upstream fix to properly handle multiline syslog messages

Closes: #746351
This commit is contained in:
Michael Biebl 2014-06-23 17:47:10 +02:00
parent 548e024301
commit b35f7581e0
3 changed files with 78 additions and 0 deletions

2
debian/changelog vendored
View File

@ -10,6 +10,8 @@ systemd (204-11) UNRELEASED; urgency=medium
[ Michael Biebl ]
* Make no-patch-numbers the default for gbp-pq.
* Cherry-pick upstream fix to properly handle multiline syslog messages.
(Closes: #746351)
[ Michael Stapelberg ]
* Clarify that “systemd” does not influence init whereas “systemd-sysv” does

View File

@ -0,0 +1,75 @@
From: Harald Hoyer <harald@redhat.com>
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 <stdio.h>
#include <syslog.h>
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 01f23ce..5c607b6 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -1142,12 +1142,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.");

View File

@ -55,3 +55,4 @@ Add-targets-for-compatibility-with-Debian-insserv-sy.patch
more-cd-aliases.patch
rules-drivers-always-call-kmod-even-when-a-driver-is.patch
Advertise-hibernation-only-if-there-s-enough-free-sw.patch
journal-handle-multiline-syslog-messages.patch