pkgsrc-Users archive

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

mysqld rc.d script



The mysqld rc.d script has two problems when launching logger
a) it requires su -m which runs it in a subprocess using root's login shell b) it keeps stderr open as a pipe which can lead to blocking when launching from some scripts

For a) we can use perl to change the effective uid directly with $>= For b) we can close stderr

I propose changing:

/usr/pkg/bin/perl -e 'use POSIX qw(setsid); setsid(); { exec (@ARGV) }' /usr/bin/su -m ${mysqld_user} -c 'logger -t nbmysqld_safe'

to:

uid=`id -u ${mysql_user}`
/usr/pkg/bin/perl -e 'use POSIX qw(setsid); setsid(); { $>='$uid'; exec (@ARGV) }' logger -t nbmysqld_safe 2>&-

Before:

# ps ax | grep logger
  888 ?        I       0:00.01 logger -t nbmysqld_safe
 1287 ?        Is      0:00.18 _tcsh -m -c logger -t nbmysqld_safe (tcsh)
# ls -l /proc/`pgrep logger`/fd/2
prw-------  1 root  wheel  0 Apr 10 15:56 /proc/888/fd/2

After:

# ps ax | grep logger
11106 ?        Is     0:00.07 logger -t nbmysqld_safe
# ls -l /proc/`pgrep logger`/fd/2
crw-rw-rw-  1 root  wheel  2, 2 Apr 10 14:53 /proc/11106/fd/2
# ls -l /dev/null
crw-rw-rw-  1 root  wheel  2, 2 Apr 10 15:50 /dev/null

Any reason for me not to commit this change?

--
Stephen



Home | Main Index | Thread Index | Old Index