fe20ad692d
- Do not require grubby, lorax now takes care of grubby - cherry-picked a lot of patches from upstream
77 lines
2.4 KiB
Diff
77 lines
2.4 KiB
Diff
From 9d5dbdd18f4c106856f031ae94d4f05aa3259de7 Mon Sep 17 00:00:00 2001
|
||
From: Harald Hoyer <harald@redhat.com>
|
||
Date: Thu, 1 Aug 2013 12:14:02 +0200
|
||
Subject: [PATCH] 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 60c32b1..c5c195a 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.");
|