Apply patch from Georg Magschok to fix syslog behavior so that the
authorEric Andersen <andersen@codepoet.org>
Fri, 16 May 2003 08:35:02 +0000 (08:35 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 16 May 2003 08:35:02 +0000 (08:35 -0000)
'>' 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...

sysklogd/syslogd.c

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