[systemd-commits] src/journal

Harald Hoyer harald at kemper.freedesktop.org
Tue Aug 6 03:58:32 PDT 2013


 src/journal/journald-server.c |    7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

New commits:
commit 04fefcddb8e71e87abeb0faff0f547eb8ae88a64
Author: Harald Hoyer <harald at redhat.com>
Date:   Thu Aug 1 12:14:02 2013 +0200

    journal: handle multiline syslog messages
    
    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

diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 821935c..f417059 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.");



More information about the systemd-commits mailing list