Bug#822753: /lib/init/init-d-script: exit 0 at end of script prevents all other exit codes

Jonathan de Boyne Pollard J.deBoynePollard-newsgroups at NTLWorld.COM
Tue Nov 20 10:15:33 GMT 2018


Dmitry Bogatov:

> Can you please elaborate, what exactly would break?
>

Look at the way that the init-d-script script is used.  It isn't used as 
the interpreter of an rc script.  (Your manual needs fixing to show the 
correct way to invoke it, by the way.)  It is invoked as:

> #!/bin/sh
> if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
>     set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
> fi
>

init-d-script proceeds to source the script that sourced it. Consider 
what happens if its final action is not to exit $? .  The shell returns 
to the original rc script, and runs the rest of it *again*.  This 
wouldn't be a problem if rc scripts were purely pseudo-declarative, as 
it would just run some variable assignments and function definitions a 
second time.  But in reality people are writing rc scripts like these, 
cargo-cult style:

* 
https://raw.githubusercontent.com/Sean-Der/fail2rest/master/init-scripts/debian.sh

* https://askubuntu.com/questions/1053107/

* https://forum.ubuntu.ru/index.php?topic=281688.msg2217941#msg2217941




More information about the Debian-init-diversity mailing list