Apply patch from Georg Magschok to fix syslog behavior so that the

'>' charactor can be logged, per rfc3164.

Also, a small patch from me to fix it so we use MAXLINE when allocating the
buffer, which is consistant with use everywhere else.  This is needed since
uClibc defines BUFSIZE as 255, causing lines to be truncated at 255...
This commit is contained in:
Eric Andersen 2003-05-16 08:35:02 +00:00
parent d3af409eae
commit 900c8f3362

View File

@ -426,19 +426,29 @@ static int serveConnection(char *tmpbuf, int n_read)
int pri = (LOG_USER | LOG_NOTICE); int pri = (LOG_USER | LOG_NOTICE);
char line[MAXLINE + 1]; char line[MAXLINE + 1];
unsigned char c; unsigned char c;
char *q = line; char *q = line;
char *p1 = 0;
int oldpri;
while ((c = *p) && q < &line[sizeof(line) - 1]) { while ((c = *p) && q < &line[sizeof(line) - 1]) {
if (c == '<') { if (c == '<' && p1 == 0) {
/* Parse the magic priority number. */ /* Parse the magic priority number. */
p1 = p;
oldpri = pri;
pri = 0; pri = 0;
while (isdigit(*(++p))) { while (isdigit(*(++p))) {
pri = 10 * pri + (*p - '0'); pri = 10 * pri + (*p - '0');
} }
if ( *p != '>') {
*q++ = c;
p=p1;
p1=0;
pri=oldpri;
} else {
if (pri & ~(LOG_FACMASK | LOG_PRIMASK)){ if (pri & ~(LOG_FACMASK | LOG_PRIMASK)){
pri = (LOG_USER | LOG_NOTICE); pri = (LOG_USER | LOG_NOTICE);
} }
}
} else if (c == '\n') { } else if (c == '\n') {
*q++ = ' '; *q++ = ' ';
} else if (iscntrl(c) && (c < 0177)) { } else if (iscntrl(c) && (c < 0177)) {
@ -563,10 +573,10 @@ static void doSyslogd(void)
if (FD_ISSET(sock_fd, &fds)) { if (FD_ISSET(sock_fd, &fds)) {
int i; int i;
RESERVE_CONFIG_BUFFER(tmpbuf, BUFSIZ + 1); RESERVE_CONFIG_BUFFER(tmpbuf, MAXLINE + 1);
memset(tmpbuf, '\0', BUFSIZ + 1); memset(tmpbuf, '\0', MAXLINE + 1);
if ((i = recv(sock_fd, tmpbuf, BUFSIZ, 0)) > 0) { if ((i = recv(sock_fd, tmpbuf, MAXLINE, 0)) > 0) {
serveConnection(tmpbuf, i); serveConnection(tmpbuf, i);
} else { } else {
bb_perror_msg_and_die("UNIX socket error"); bb_perror_msg_and_die("UNIX socket error");