From 0a327f9db4a881fbdf50ea890f74a1ce17112519 Mon Sep 17 00:00:00 2001 From: dcs Date: Mon, 23 Sep 2002 11:59:19 +0000 Subject: Introduce to the !program specification a capability similar to the one that already exists for hosts: being able to specify a section that applies to every program *except* the one in question. The normal syntax for program specification is still valid. For the new capability, one uses: !-program Since there is no way to specify a program beginning with a dash in the old syntax, as it would be interpreted as the case above, the following alternative syntax to the original capability is provided: !+program This shouldn't introduce incompatibilities with any syslogd configuration in production because -stable's syslogd does not support a dash anywhere in the program specification. MFC after: 2 weeks --- usr.sbin/syslogd/syslog.conf.5 | 11 +++++++++++ usr.sbin/syslogd/syslogd.c | 16 ++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) (limited to 'usr.sbin') diff --git a/usr.sbin/syslogd/syslog.conf.5 b/usr.sbin/syslogd/syslog.conf.5 index 18579a3..099b9cb 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 999254a..c3887ac 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; -- cgit v1.1