On 12/14/12 3:32 AM, Xin LI wrote: > Author: delphij > Date: Thu Dec 13 23:32:47 2012 > New Revision: 244198 > URL: http://svnweb.freebsd.org/changeset/base/244198 > > Log: > Teach sysctl(8) about parsing a file (while I'm there also give it > capability of parsing both = and : formats). > > Submitted by: hrs (initial version, bugs are mine) > MFC after: 3 months > > Modified: > head/etc/rc.d/sysctl > head/sbin/sysctl/sysctl.8 > head/sbin/sysctl/sysctl.c > > Modified: head/etc/rc.d/sysctl > ============================================================================== > --- head/etc/rc.d/sysctl Thu Dec 13 23:19:13 2012 (r244197) > +++ head/etc/rc.d/sysctl Thu Dec 13 23:32:47 2012 (r244198) > @@ -8,51 +8,27 @@ > . /etc/rc.subr > > name="sysctl" > +command="/sbin/sysctl" > stop_cmd=":" > start_cmd="sysctl_start" > reload_cmd="sysctl_start" > lastload_cmd="sysctl_start last" > extra_commands="reload lastload" > > -# > -# Read in a file containing sysctl settings and set things accordingly. > -# > -parse_file() > -{ > - if [ -f $1 ]; then > - while read var comments > - do > - case ${var} in > - \#*|'') > - ;; > - *) > - mib=${var%=*} > - val=${var#*=} > - > - if current_value=`${SYSCTL} -n ${mib} > 2>/dev/null`; then > - case ${current_value} in > - ${val}) > - ;; > - *) > - if ! sysctl "${var}" >/dev/null > 2>&1; then > - warn "unable to set > ${var}" > - fi > - ;; > - esac > - elif [ "$2" = "last" ]; then > - warn "sysctl ${mib} does not exist." > - fi > - ;; > - esac > - done < $1 > - fi > -} > - > sysctl_start() > { > - > - parse_file /etc/sysctl.conf $1 > - parse_file /etc/sysctl.conf.local $1 > + case $1 in > + last) > + command_args="-i -f" > + ;; > + *) > + command_args="-f" > + ;; > + esac > + > + for _f in /etc/sysctl.conf /etc/sysctl.conf.local; do > + [ -r ${_f} ] && ${command} ${command_args} ${_f} > /dev/null > + done > } > > load_rc_config $name >
Hi, I'd really like to see something like the patch bellow in the tree. I found it very useful with cfengine configuration (as like as cron.d). What do think? diff --git a/etc/rc.d/sysctl b/etc/rc.d/sysctl index 36f1414..014e4c5 100755 --- a/etc/rc.d/sysctl +++ b/etc/rc.d/sysctl @@ -26,7 +26,7 @@ sysctl_start() ;; esac - for _f in /etc/sysctl.conf /etc/sysctl.conf.local; do + for _f in `ls /etc/sysctl.d/* 2> /dev/null` /etc/sysctl.conf /etc/sysctl.conf.local; do [ -r ${_f} ] && ${command} ${command_args} ${_f} > /dev/null done } -- Andrey Zonov
signature.asc
Description: OpenPGP digital signature