diff options
author | Eugene Grosbein <eugen@FreeBSD.org> | 2021-09-27 07:25:21 +0000 |
---|---|---|
committer | Eugene Grosbein <eugen@FreeBSD.org> | 2021-09-27 07:25:21 +0000 |
commit | 3b4cc56e524ac947ba0e6571e2c455139c2839ec (patch) | |
tree | a35714c4f0f44e799b9f9c0a66912f0a4668ecfc /usr.sbin/syslogd | |
parent | 77087b11e222a4b21e0c72bd3d82ace0bfdf511b (diff) | |
download | src-3b4cc56e524ac947ba0e6571e2c455139c2839ec.tar.gz src-3b4cc56e524ac947ba0e6571e2c455139c2839ec.zip |
syslogd: undo regression after r326573
Restore ability for our syslogd to collect pre-RFC3164 formatted
messages from remote hosts that was broken with r326573.
For example, the line from Cisco SCE8000 splitted for readability:
1130: 03:37:57: %USER-6-PORT_OPERSTATUS_CHANGE_TRAP: CPU#000 trap:link
down EntityAdminState: 4 EntityAlarmStatus: 32
Such line was collected and stored before mentioned change
but silently dropped after that. Now syslogd saves it again.
Note that parsing of RFC5424 format not changed.
MFC after: 1 month
Diffstat (limited to 'usr.sbin/syslogd')
-rw-r--r-- | usr.sbin/syslogd/syslogd.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 1837c41c4e8b..dc07d4781553 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -1357,31 +1357,25 @@ parsemsg(const char *from, char *msg) size_t i; int pri; + i = -1; + pri = DEFUPRI; + /* Parse PRI. */ - if (msg[0] != '<' || !isdigit(msg[1])) { - dprintf("Invalid PRI from %s\n", from); - return; - } - for (i = 2; i <= 4; i++) { - if (msg[i] == '>') - break; - if (!isdigit(msg[i])) { - dprintf("Invalid PRI header from %s\n", from); - return; + if (msg[0] == '<' && isdigit(msg[1])) { + for (i = 2; i <= 4; i++) { + if (msg[i] == '>') { + errno = 0; + n = strtol(msg + 1, &q, 10); + if (errno == 0 && *q == msg[i] && n >= 0 && n <= INT_MAX) { + pri = n; + msg += i + 1; + i = 0; + } + break; } + } } - if (msg[i] != '>') { - dprintf("Invalid PRI header from %s\n", from); - return; - } - errno = 0; - n = strtol(msg + 1, &q, 10); - if (errno != 0 || *q != msg[i] || n < 0 || n >= INT_MAX) { - dprintf("Invalid PRI %ld from %s: %s\n", - n, from, strerror(errno)); - return; - } - pri = n; + if (pri &~ (LOG_FACMASK|LOG_PRIMASK)) pri = DEFUPRI; @@ -1394,8 +1388,7 @@ parsemsg(const char *from, char *msg) pri = LOG_MAKEPRI(LOG_USER, LOG_PRI(pri)); /* Parse VERSION. */ - msg += i + 1; - if (msg[0] == '1' && msg[1] == ' ') + if (i == 0 && msg[0] == '1' && msg[1] == ' ') parsemsg_rfc5424(from, pri, msg + 2); else parsemsg_rfc3164(from, pri, msg); |