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