Allow space-deliminated fields in syslog.conf in addition to
authormillert <millert@openbsd.org>
Wed, 6 Jul 2016 19:29:13 +0000 (19:29 +0000)
committermillert <millert@openbsd.org>
Wed, 6 Jul 2016 19:29:13 +0000 (19:29 +0000)
traditional tabs-deliminated fields.  This is consistent with what
FreeBSD, NetBSD and Linux do.  Adapted from FreeBSD.

usr.sbin/syslogd/syslog.conf.5
usr.sbin/syslogd/syslogd.c

index 98c684a..28029f8 100644 (file)
 .\" SUCH DAMAGE.
 .\"
 .\"     from: @(#)syslog.conf.5        8.1 (Berkeley) 6/9/93
-.\"     $OpenBSD: syslog.conf.5,v 1.33 2015/09/10 15:16:44 schwarze Exp $
+.\"     $OpenBSD: syslog.conf.5,v 1.34 2016/07/06 19:29:13 millert Exp $
 .\"    $NetBSD: syslog.conf.5,v 1.4 1996/01/02 17:41:46 perry Exp $
 .\"
-.Dd $Mdocdate: September 10 2015 $
+.Dd $Mdocdate: July 6 2016 $
 .Dt SYSLOG.CONF 5
 .Os
 .Sh NAME
@@ -55,7 +55,7 @@ The
 .Em selector
 field is separated from the
 .Em action
-field by one or more tab characters.
+field by one or more tab or space characters.
 .Pp
 The
 .Em selectors
@@ -334,6 +334,10 @@ file appeared in
 .Bx 4.3 ,
 along with
 .Xr syslogd 8 .
+.Pp
+Historic versions of
+.Xr syslogd 8
+did not support space-delimited fields.
 .Sh BUGS
 The effects of multiple selectors are sometimes not intuitive.
 For example
index a3f83d6..881fe0b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: syslogd.c,v 1.207 2016/07/01 15:47:15 millert Exp $   */
+/*     $OpenBSD: syslogd.c,v 1.208 2016/07/06 19:29:13 millert Exp $   */
 
 /*
  * Copyright (c) 1983, 1988, 1993, 1994
@@ -2454,19 +2454,19 @@ cfline(char *line, char *progblock, char *hostblock)
                f->f_hostname = strdup(hostblock);
 
        /* scan through the list of selectors */
-       for (p = line; *p && *p != '\t';) {
+       for (p = line; *p && *p != '\t' && *p != ' ';) {
 
                /* find the end of this facility name list */
-               for (q = p; *q && *q != '\t' && *q++ != '.'; )
+               for (q = p; *q && *q != '\t' && *q != ' ' && *q++ != '.'; )
                        continue;
 
                /* collect priority name */
-               for (bp = buf; *q && !strchr("\t,;", *q); )
+               for (bp = buf; *q && !strchr("\t,; ", *q); )
                        *bp++ = *q++;
                *bp = '\0';
 
                /* skip cruft */
-               while (*q && strchr(", ;", *q))
+               while (*q && strchr(",;", *q))
                        q++;
 
                /* decode priority name */
@@ -2489,8 +2489,8 @@ cfline(char *line, char *progblock, char *hostblock)
                }
 
                /* scan facilities */
-               while (*p && !strchr("\t.;", *p)) {
-                       for (bp = buf; *p && !strchr("\t,;.", *p); )
+               while (*p && !strchr("\t.; ", *p)) {
+                       for (bp = buf; *p && !strchr("\t,;. ", *p); )
                                *bp++ = *p++;
                        *bp = '\0';
                        if (*buf == '*')
@@ -2516,7 +2516,7 @@ cfline(char *line, char *progblock, char *hostblock)
        }
 
        /* skip to action part */
-       while (*p == '\t')
+       while (*p == '\t' || *p == ' ')
                p++;
 
        switch (*p) {