diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2024-12-11 15:10:39 +0100 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2024-12-11 19:33:41 +0100 |
commit | 12e33d332b3f8754f4d5d0d21d5d3f0de8adc54c (patch) | |
tree | fdd469fcfecee3f18e007b64221b7f280f62e784 | |
parent | virt: drop userns detection heuristic (diff) | |
download | systemd-12e33d332b3f8754f4d5d0d21d5d3f0de8adc54c.tar.xz systemd-12e33d332b3f8754f4d5d0d21d5d3f0de8adc54c.zip |
profile.d: don't bail if $SHELL_* variables are unset
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
-rw-r--r-- | profile.d/70-systemd-shell-extra.sh | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/profile.d/70-systemd-shell-extra.sh b/profile.d/70-systemd-shell-extra.sh index 70be3341b9..dae77e4bc7 100644 --- a/profile.d/70-systemd-shell-extra.sh +++ b/profile.d/70-systemd-shell-extra.sh @@ -12,14 +12,14 @@ # 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 |