bin/88215: [PATCH] syslogd does not pass cleanly parameters to
cfline()
Daniel Molina Wegener
dmw at unete.cl
Sun Oct 30 00:30:17 PDT 2005
>Number: 88215
>Category: bin
>Synopsis: [PATCH] syslogd does not pass cleanly parameters to cfline()
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Oct 30 07:30:15 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Daniel Molina Wegener
>Release: FreeBSD 5.4-STABLE i386
>Organization:
Daniel Molina Wegener
>Environment:
System: FreeBSD dmw.hopto.org 5.4-STABLE FreeBSD 5.4-STABLE #10: Wed Oct 26 22:37:00 CLST 2005 root at dmw.hopto.org:/usr/obj/usr/src/sys/PHOBOS i386
>Description:
In the syslogd function init(), parameters passed to cfline()
are not clean when the user attempt to use a remote host entry
as the source of syslog messages.
Instead of a clean host name, it passes the hostname and the
last program specification in the syslog.conf file.
>How-To-Repeat:
Put any program specification and start syslogd with -vv and -d
flags, you can see the parameters passed to cfline() function in
a list.
>Fix:
Apply the next patch from the source tree:
--- usr.sbin/syslogd/syslogd.c.dist Sun Oct 30 02:05:56 2005
+++ usr.sbin/syslogd/syslogd.c Sun Oct 30 04:04:10 2005
@@ -1,3 +1,4 @@
+/* -*- mode: c; c-basic-offset: 4; c-default-style: "bsd" -*- */
/*
* Copyright (c) 1983, 1988, 1993, 1994
* The Regents of the University of California. All rights reserved.
@@ -734,7 +735,7 @@
*q++ = '-';
}
if (isascii(c) && iscntrl(c)) {
- if (c == '\n') {
+ if (c == '\n' || c == '\r') {
*q++ = ' ';
} else if (c == '\t') {
*q++ = '\t';
@@ -747,7 +748,6 @@
}
}
*q = '\0';
-
logmsg(pri, line, hname, 0);
}
@@ -1588,6 +1588,7 @@
continue;
}
if (*p == '+' || *p == '-') {
+ (void)strlcpy(prog, "*", sizeof(prog));
host[0] = *p++;
while (isspace(*p))
p++;
@@ -1607,6 +1608,7 @@
continue;
}
if (*p == '!') {
+ (void)strlcpy(host, "*", sizeof(host));
p++;
while (isspace(*p)) p++;
if ((!*p) || (*p == '*')) {
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list