Bug#931867: /lib/init/init-d-script is sourcing /etc/default/* too late

Justin Pasher justinp at distribion.com
Thu Jul 11 18:05:10 BST 2019


Package: sysvinit-utils
Version: 2.93-8

I started testing the upgrade from Debian Stretch to Buster, and I've 
encountered a problem that affects the snmpd package's init.d script. It 
looks like it has been changed to utilize /lib/init/init-d-script for 
its core functionality. However, by doing so, the SNMPDOPTS value is 
ignored from the init config file at /etc/default/snmpd. This is because 
of the following lines in /etc/init.d/snmpd:

==============================
DEFAULT_SNMPDOPTS="-Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I 
-smux,mteTrigger,mteTriggerConf"
[ -z "$SNMPDOPTS" ] && SNMPDOPTS=$DEFAULT_SNMPDOPTS
==============================

Because the /lib/init/init-d-script script sources /etc/init.d/snmpd 
BEFORE it sources /etc/default/snmpd, none of the values in 
/etc/default/snmpd are visible to /etc/init.d/snmpd. This results in 
SNMPDOPTS always being set to the default arguments.

One could view this as a bug in either snmpd or sysvinit-utils, 
depending on your viewpoint. However, it seems more appropriate for a 
fix to be applied to /lib/init/init-d-script within sysvinit-utils, as 
other scripts may try (or even be trying already) to use this method 
within the init.d script to set defaults. The /etc/init.d/snmpd script 
could manually force an inclusion of /etc/defaults/snmpd, but it seems a 
little redundant when /lib/init/init-d-script is supposed to do that work.

The line in question in /lib/init/init-d-script is below:

==============================
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
==============================

Moving it above the following block would ensure it's sourced first:

==============================
SCRIPTNAME="$__init_d_script_name"
scriptbasename="$(basename "$__init_d_script_name")"
if [ "$scriptbasename" != "init-d-script" ] ; then
     . "$__init_d_script_name"
else
     exit 0
fi
==============================

I checked the latest experimental version (2.95) and it doesn't have any 
changes like this (although it does fix the snmpd package install bug as 
referenced in #926390). Without knowing all the ins and outs of how 
/lib/init/init-d-script is used throughout Debian, I can't say if this 
change would be considered safe or not. Perhaps there are instances 
where the /etc/default/* config file tries to do more than just set some 
shell variables and it would cause some bizarre side effects.

Thanks.

--
Justin Pasher




More information about the Debian-init-diversity mailing list