From: Jonh Wendell <[email protected]>

Currently we are ignoring the '-l' command line with
regards to remote logging. We're sending all logs to
the remote machine.

This patch makes remote logging behave just like local
logging by honoring the '-l' flag.

Signed-off-by: Jonh Wendell <[email protected]>
---
 sysklogd/syslogd.c |   87 ++++++++++++++++++++++++++++++----------------------
 1 file changed, 51 insertions(+), 36 deletions(-)

diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 3fe3f53..a19ad6e 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -758,6 +758,24 @@ static void timestamp_and_log_internal(const char *msg)
        timestamp_and_log(LOG_SYSLOG | LOG_INFO, (char*)msg, 0);
 }
 
+static int extract_prio (char **buf)
+{
+       char *p = *buf;
+       int pri = (LOG_USER | LOG_NOTICE);
+
+       if (*p == '<') {
+               /* Parse the magic priority number */
+               pri = bb_strtou(p + 1, &p, 10);
+               if (*p == '>')
+                       p++;
+               if (pri & ~(LOG_FACMASK | LOG_PRIMASK))
+                       pri = (LOG_USER | LOG_NOTICE);
+       }
+
+       buf = &p;
+       return pri;
+}
+
 /* tmpbuf[len] is a NUL byte (set by caller), but there can be other,
  * embedded NULs. Split messages on each of these NULs, parse prio,
  * escape control chars and log each locally. */
@@ -769,16 +787,7 @@ static void split_escape_and_log(char *tmpbuf, int len)
        while (p < tmpbuf) {
                char c;
                char *q = G.parsebuf;
-               int pri = (LOG_USER | LOG_NOTICE);
-
-               if (*p == '<') {
-                       /* Parse the magic priority number */
-                       pri = bb_strtou(p + 1, &p, 10);
-                       if (*p == '>')
-                               p++;
-                       if (pri & ~(LOG_FACMASK | LOG_PRIMASK))
-                               pri = (LOG_USER | LOG_NOTICE);
-               }
+               int pri = extract_prio (&p);
 
                while ((c = *p++)) {
                        if (c == '\n')
@@ -863,6 +872,8 @@ static void do_syslogd(void)
        int sock_fd;
 #if ENABLE_FEATURE_REMOTE_LOG
        llist_t *item;
+       char *p;
+       int pri;
 #endif
 #if ENABLE_FEATURE_SYSLOGD_DUP
        int last_sz = -1;
@@ -935,33 +946,37 @@ static void do_syslogd(void)
                 * over network, mimic that */
                recvbuf[sz] = '\n';
 
-               /* We are not modifying log messages in any way before send */
-               /* Remote site cannot trust _us_ anyway and need to do 
validation again */
-               for (item = G.remoteHosts; item != NULL; item = item->link) {
-                       remoteHost_t *rh = (remoteHost_t *)item->data;
-
-                       if (rh->remoteFD == -1) {
-                               rh->remoteFD = try_to_resolve_remote(rh);
-                               if (rh->remoteFD == -1)
-                                       continue;
-                       }
+               p = recvbuf;
+               pri = extract_prio (&p);
+               if (LOG_PRI(pri) < G.logLevel) {
+                       /* We are not modifying log messages in any way before 
send */
+                       /* Remote site cannot trust _us_ anyway and need to do 
validation again */
+                       for (item = G.remoteHosts; item != NULL; item = 
item->link) {
+                               remoteHost_t *rh = (remoteHost_t *)item->data;
+
+                               if (rh->remoteFD == -1) {
+                                       rh->remoteFD = 
try_to_resolve_remote(rh);
+                                       if (rh->remoteFD == -1)
+                                               continue;
+                               }
 
-                       /* Send message to remote logger.
-                        * On some errors, close and set remoteFD to -1
-                        * so that DNS resolution is retried.
-                        */
-                       if (sendto(rh->remoteFD, recvbuf, sz+1,
-                                       MSG_DONTWAIT | MSG_NOSIGNAL,
-                                       &(rh->remoteAddr->u.sa), 
rh->remoteAddr->len) == -1
-                       ) {
-                               switch (errno) {
-                               case ECONNRESET:
-                               case ENOTCONN: /* paranoia */
-                               case EPIPE:
-                                       close(rh->remoteFD);
-                                       rh->remoteFD = -1;
-                                       free(rh->remoteAddr);
-                                       rh->remoteAddr = NULL;
+                               /* Send message to remote logger.
+                                * On some errors, close and set remoteFD to -1
+                                * so that DNS resolution is retried.
+                                */
+                               if (sendto(rh->remoteFD, recvbuf, sz+1,
+                                               MSG_DONTWAIT | MSG_NOSIGNAL,
+                                               &(rh->remoteAddr->u.sa), 
rh->remoteAddr->len) == -1
+                               ) {
+                                       switch (errno) {
+                                       case ECONNRESET:
+                                       case ENOTCONN: /* paranoia */
+                                       case EPIPE:
+                                               close(rh->remoteFD);
+                                               rh->remoteFD = -1;
+                                               free(rh->remoteAddr);
+                                               rh->remoteAddr = NULL;
+                                       }
                                }
                        }
                }
-- 
1.7.10.4

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to