diff --git a/usr.sbin/syslogd/syslog.conf.5 b/usr.sbin/syslogd/syslog.conf.5 index 18579a3054cd..099b9cb0fc0c 100644 --- a/usr.sbin/syslogd/syslog.conf.5 +++ b/usr.sbin/syslogd/syslog.conf.5 @@ -185,6 +185,17 @@ specification for .Ql foo will also match any message logged by the kernel with the prefix .Ql "foo: " . +The +.Ql #!+prog +or +.Ql !+prog +specification works just like the previous one, +and the +.Ql #!-prog +or +.Ql !-prog +specification will match any message but the ones from that +program. A .Em hostname specification of the form diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 999254a15c8b..c3887acb170e 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -853,8 +853,20 @@ logmsg(int pri, const char *msg, const char *from, int flags) /* skip messages with the incorrect program name */ if (f->f_program) - if (strcmp(prog, f->f_program) != 0) - continue; + switch (f->f_program[0]) { + case '+': + if (strcmp(prog, f->f_program + 1) != 0) + continue; + break; + case '-': + if (strcmp(prog, f->f_program + 1) == 0) + continue; + break; + default: + if (strcmp(prog, f->f_program) != 0) + continue; + break; + } if (f->f_type == F_CONSOLE && (flags & IGN_CONS)) continue;