From owner-freebsd-stable Sun Oct 11 14:03:44 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id OAA07214 for freebsd-stable-outgoing; Sun, 11 Oct 1998 14:03:44 -0700 (PDT) (envelope-from owner-freebsd-stable@FreeBSD.ORG) Received: from alecto.physics.uiuc.edu (alecto.physics.uiuc.edu [130.126.8.20]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id OAA07209 for ; Sun, 11 Oct 1998 14:03:42 -0700 (PDT) (envelope-from igor@alecto.physics.uiuc.edu) Received: (from igor@localhost) by alecto.physics.uiuc.edu (8.9.0/8.9.0) id QAA14342; Sun, 11 Oct 1998 16:03:30 -0500 (CDT) From: Igor Roshchin Message-Id: <199810112103.QAA14342@alecto.physics.uiuc.edu> Subject: syslogd and syslog.conf To: stable@FreeBSD.ORG Date: Sun, 11 Oct 1998 16:03:30 -0500 (CDT) X-Mailer: ELM [version 2.4ME+ PL43 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Hello! Those who are reading freebsd-security, already saw this. For others, briefly: There was a question and few followups about the syslogd which doesn't allow to have spaces between the first and the second field in /etc/syslog.conf . (this is a feature of syslogd in some (or all ?) other Unices). Only s are allowed. Neither man pages nor anybody of the responders (nor brief analyses of the source code) provided any reason why it is essential to have just tabs, and not any combination of tabs and spaces, as it is allowed in most (any?) other config files. So, here is my attempt to implement the desired behavior of syslogd. This patch allows syslogd to understand both - tabs and spaces as fields separator in syslog.conf. (this seems to be possible, because the first field - selector field can not contain spaces) It is Important that this patch should not brake compatibility with the old ("classical" [?] ) form of syslog.conf, because many people want to be able to continue using just tabs (including cases with cross-platform environments). I tested this syslogd (using the debug mode), and it understands my syslog.conf, even when I introduced a few spaces instead of tabs (and mixed them together). It's been running just fine on a production machine for 4 days by now. I wonder if somebody can test it on some complicated syslog.conf (use the debug mode -d) and make sure it doesn't brake on something which escaped from my sight (especially new features introduced in later 2.2.x releases) IgoR ----- Forwarded message from Igor Roshchin ----- Ok, don't crash me with your swords .. ;) I just compiled the syslogd with the changes suggested. THe diff file is at the bottom. It works fine for me. Can anybody else test it against different syslog.conf's ? My only concern: In line 1410 - there was a space inside ", ;" originally: while (strchr(", ;", *q)) According to man syslog.conf - I don't see why it should be there.. This is the moment when the priority is analyzed. No spaces are allowed before the priority specification. So, I assume, this was just a typo. so, it should be while (strchr(",;", *q)) If this is not a typo, but I just missed some meaning, please, correct me! IgoR =====================8< =============================== --- syslogd.c.orig Thu Aug 6 00:58:10 1998 +++ syslogd.c Thu Oct 8 22:19:27 1998 @@ -1365,12 +1365,12 @@ } /* scan through the list of selectors */ - for (p = line; *p && *p != '\t';) { + for (p = line; *p && *p != '\t' && *p != ' ';) { int pri_done; int pri_cmp; /* find the end of this facility name list */ - for (q = p; *q && *q != '\t' && *q++ != '.'; ) + for (q = p; *q && *q != '\t' && *q != ' ' && *q++ != '.'; ) continue; /* get the priority comparison */ @@ -1402,12 +1402,12 @@ ; /* collect priority name */ - for (bp = buf; *q && !strchr("\t,;", *q); ) + for (bp = buf; *q && !strchr("\t,; ", *q); ) *bp++ = *q++; *bp = '\0'; /* skip cruft */ - while (strchr(", ;", *q)) + while (strchr(",;", *q)) q++; /* decode priority name */ @@ -1424,8 +1424,8 @@ } /* 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'; @@ -1454,7 +1454,7 @@ } /* skip to action part */ - while (*p == '\t') + while (*p == '\t' || *p == ' ') p++; switch (*p) ----- End of forwarded message from Igor Roshchin ----- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message