NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

misc/42300: name space confusion in /etc/rc.d/syslogd



>Number:         42300
>Category:       misc
>Synopsis:       /etc/rc.d/syslogd assumes file names always match a variable 
>in the file instead of reading the variable
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    misc-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Nov 10 13:15:01 +0000 2009
>Originator:     T. M. Pederson
>Release:        NetBSD 5.0_STABLE
>Organization:
T. M. Pederson <tmp+nb-spr%disfinite.org@localhost>
GPG key fingerprint = FFAF D056 F12B E03F 7084  1288 EF8B E1FE 1693 21EB
+Accept: text/plain; charset=ISO-8859-*,UTF-*
>Environment:
System: NetBSD echo.disfinite.org 5.0_STABLE NetBSD 5.0_STABLE (ECHO) #5: Wed 
Oct 28 08:00:06 CDT 2009 
tmp%echo.disfinite.org@localhost:/usr/obj/sys/arch/sparc64/compile/ECHO sparc64
Architecture: sparc64
Machine: sparc64
>Description:
        When /etc/rc.d/syslogd checks for chroot daemons, it assumes that
        their files in /etc/rc.d/ have names that exactly match the name
        variable inside the file. Locally maintained daemons sometimes lack
        synchronization between the two name spaces, and syslogd then works
        poorly with the chroot'd daemon.
>How-To-Repeat:
        Add a chroot'd daemon whose file in /etc/rc.d/ has a name that differs
        from the name variable inside the file.
>Fix:
        Patch /etc/rc.d/syslogd to read the variable instead of the file name.
        The patch below is in use locally. I expect awk would be more typical
        here, but I'm better with sed.
--- /etc/rc.d/syslogd.orig      2004-10-11 08:29:52.000000000 -0500
+++ /etc/rc.d/syslogd   2009-11-10 06:24:21.000000000 -0600
@@ -37,7 +37,7 @@
        #
        for _lr in $(rcorder -k chrootdir /etc/rc.d/*); do
            (
-               _l=${_lr##*/}
+               eval $(sed -n -e '/^name=/s/name/_l/' -e '/^_l=/p' ${_lr})
                load_rc_config ${_l}
                eval _ldir=\$${_l}_chrootdir
                if checkyesno $_l && [ -n "$_ldir" ]; then



Home | Main Index | Thread Index | Old Index