]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
profile.d: don't bail if $SHELL_* variables are unset
authorTobias Klauser <tklauser@distanz.ch>
Wed, 11 Dec 2024 14:10:39 +0000 (15:10 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 11 Dec 2024 18:33:41 +0000 (18:33 +0000)
If - for whatever reason - a script uses set -u (nounset) and includes
/etc/profile.d/70-systemd-shell-extra.sh (e.g. transitively via
/etc/profile) the script would fail with:

    /etc/profile.d/70-systemd-shell-extra.sh: line 15: SHELL_PROMPT_PREFIX: unbound variable

For example:

    $ cat > foo.sh <<EOF
    #!/bin/sh
    set -u

    source /etc/profile
    EOF
    $ chmod 700 foo.sh
    $ ./foo.sh
    /etc/profile.d/70-systemd-shell-extra.sh: line 15: SHELL_PROMPT_PREFIX: unbound variable

Fix this by using shell parameter substitution[^1] (which is a POSIX
shell concept) to set the $SHELL_* variables to the empty string if
undefined.

[^1]: https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/V3_chap02.html

profile.d/70-systemd-shell-extra.sh

index 70be3341b95a2257dd92167c584e18ed77c6278e..dae77e4bc76941077b73e6698ae2a6cd1d0ee0d0 100644 (file)
 # credentials shell.prompt.prefix, shell.prompt.suffix and shell.welcome, and
 # are propagated into these environment variables by pam_systemd(8).
 
-if [ -n "$SHELL_PROMPT_PREFIX" ]; then
+if [ -n "${SHELL_PROMPT_PREFIX-}" ]; then
     PS1="$SHELL_PROMPT_PREFIX$PS1"
 fi
 
-if [ -n "$SHELL_PROMPT_SUFFIX" ]; then
+if [ -n "${SHELL_PROMPT_SUFFIX-}" ]; then
     PS1="$PS1$SHELL_PROMPT_SUFFIX"
 fi
 
-if [ -n "$SHELL_WELCOME" ]; then
+if [ -n "${SHELL_WELCOME-}" ]; then
    printf '%b\n' "$SHELL_WELCOME"
 fi