diff options
-rw-r--r-- | sysklogd/syslogd.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c index b912f5f8f..bafbaa35b 100644 --- a/sysklogd/syslogd.c +++ b/sysklogd/syslogd.c | |||
@@ -426,19 +426,29 @@ static int serveConnection(char *tmpbuf, int n_read) | |||
426 | int pri = (LOG_USER | LOG_NOTICE); | 426 | int pri = (LOG_USER | LOG_NOTICE); |
427 | char line[MAXLINE + 1]; | 427 | char line[MAXLINE + 1]; |
428 | unsigned char c; | 428 | unsigned char c; |
429 | |||
430 | char *q = line; | 429 | char *q = line; |
430 | char *p1 = 0; | ||
431 | int oldpri; | ||
431 | 432 | ||
432 | while ((c = *p) && q < &line[sizeof(line) - 1]) { | 433 | while ((c = *p) && q < &line[sizeof(line) - 1]) { |
433 | if (c == '<') { | 434 | if (c == '<' && p1 == 0) { |
434 | /* Parse the magic priority number. */ | 435 | /* Parse the magic priority number. */ |
436 | p1 = p; | ||
437 | oldpri = pri; | ||
435 | pri = 0; | 438 | pri = 0; |
436 | while (isdigit(*(++p))) { | 439 | while (isdigit(*(++p))) { |
437 | pri = 10 * pri + (*p - '0'); | 440 | pri = 10 * pri + (*p - '0'); |
438 | } | 441 | } |
439 | if (pri & ~(LOG_FACMASK | LOG_PRIMASK)) { | 442 | if ( *p != '>') { |
440 | pri = (LOG_USER | LOG_NOTICE); | 443 | *q++ = c; |
441 | } | 444 | p=p1; |
445 | p1=0; | ||
446 | pri=oldpri; | ||
447 | } else { | ||
448 | if (pri & ~(LOG_FACMASK | LOG_PRIMASK)){ | ||
449 | pri = (LOG_USER | LOG_NOTICE); | ||
450 | } | ||
451 | } | ||
442 | } else if (c == '\n') { | 452 | } else if (c == '\n') { |
443 | *q++ = ' '; | 453 | *q++ = ' '; |
444 | } else if (iscntrl(c) && (c < 0177)) { | 454 | } else if (iscntrl(c) && (c < 0177)) { |
@@ -563,10 +573,10 @@ static void doSyslogd(void) | |||
563 | if (FD_ISSET(sock_fd, &fds)) { | 573 | if (FD_ISSET(sock_fd, &fds)) { |
564 | int i; | 574 | int i; |
565 | 575 | ||
566 | RESERVE_CONFIG_BUFFER(tmpbuf, BUFSIZ + 1); | 576 | RESERVE_CONFIG_BUFFER(tmpbuf, MAXLINE + 1); |
567 | 577 | ||
568 | memset(tmpbuf, '\0', BUFSIZ + 1); | 578 | memset(tmpbuf, '\0', MAXLINE + 1); |
569 | if ((i = recv(sock_fd, tmpbuf, BUFSIZ, 0)) > 0) { | 579 | if ((i = recv(sock_fd, tmpbuf, MAXLINE, 0)) > 0) { |
570 | serveConnection(tmpbuf, i); | 580 | serveConnection(tmpbuf, i); |
571 | } else { | 581 | } else { |
572 | bb_perror_msg_and_die("UNIX socket error"); | 582 | bb_perror_msg_and_die("UNIX socket error"); |