Handle non-RFC-conforming end-of-message markers
authorJacob Bachmeyer <jcb@gnu.org>
Sat, 27 Feb 2021 03:35:45 +0000 (21:35 -0600)
committerJacob Bachmeyer <jcb@gnu.org>
Sat, 27 Feb 2021 03:35:45 +0000 (21:35 -0600)
RFC3164 states in 4.1.3 "MSG Part of a syslog Packet":
  The MSG part will fill the remainder of the syslog packet.
  ...
  There is no ending delimiter to this part.

Some implementations do not follow this.

testsuite/lib/exec/minlogd.pl

index 0b5d0c0715a94df5fcd7ff1a983e2ced6709f57f..88b1483ab93afa6300a53f170085eb86721f7a14 100755 (executable)
@@ -164,6 +164,11 @@ sub handle_message ($) {
   } else
     { die "unrecognized syslog message format (newer version?):\n  $_" }
 
+  # Some messages may have a trailing newline, while others do not.  The
+  # syslog RFCs state that end-of-message is end-of-datagram and any octet
+  # is allowed in the message, but Sys::Syslog seems to append a NUL.
+  $MSG =~ s/[\s\r\n\0]+$//;    # remove trailing whitespace, newline, and nulls
+
   print LoggerOutput $PRI,
     join(' ', 1, $TIMESTAMP, $HOSTNAME, $APPNAME, $PROCID, $MSGID,
         $SDAT, $MSG),"\n";