From: Mike Yuan Date: Tue, 8 Apr 2025 23:38:52 +0000 (+0200) Subject: test: add test case for PAMName= $SHELL acquisition for root X-Git-Tag: v258-rc1~854^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F37052%2Fhead;p=thirdparty%2Fsystemd.git test: add test case for PAMName= $SHELL acquisition for root --- diff --git a/test/units/TEST-74-AUX-UTILS.run.sh b/test/units/TEST-74-AUX-UTILS.run.sh index f6f422a3057..3229a522b7e 100755 --- a/test/units/TEST-74-AUX-UTILS.run.sh +++ b/test/units/TEST-74-AUX-UTILS.run.sh @@ -248,13 +248,19 @@ if [[ -e /usr/lib/pam.d/systemd-run0 ]] || [[ -e /etc/pam.d/systemd-run0 ]]; the run0 ls / assert_eq "$(run0 echo foo)" "foo" # Check if we set some expected environment variables - for arg in "" "--user=root" "--user=0" "--user=testuser"; do - assert_eq "$(run0 ${arg:+"$arg"} bash -c 'echo $SUDO_USER')" "$USER" - assert_eq "$(run0 ${arg:+"$arg"} bash -c 'echo $SUDO_UID')" "$(id -u "$USER")" - assert_eq "$(run0 ${arg:+"$arg"} bash -c 'echo $SUDO_GID')" "$(id -u "$USER")" + for tu in "" "root" "0" "testuser"; do + assert_eq "$(run0 ${tu:+"--user=$tu"} bash -c 'echo $SUDO_USER')" "$USER" + assert_eq "$(run0 ${tu:+"--user=$tu"} bash -c 'echo $SUDO_UID')" "$(id -u "$USER")" + assert_eq "$(run0 ${tu:+"--user=$tu"} bash -c 'echo $SUDO_GID')" "$(id -u "$USER")" # Validate that we actually went properly through PAM (XDG_SESSION_TYPE is set by pam_systemd) - assert_eq "$(run0 ${arg:+"$arg"} bash -c 'echo $XDG_SESSION_TYPE')" "unspecified" + assert_eq "$(run0 ${tu:+"--user=$tu"} bash -c 'echo $XDG_SESSION_TYPE')" "unspecified" + + if [[ -n "$tu" ]]; then + # Validate that $SHELL is set to login shell of target user when cmdline is supplied (not invoking shell) + TARGET_LOGIN_SHELL="$(getent passwd "$tu" | cut -d: -f7)" + assert_eq "$(run0 --user="$tu" printenv SHELL)" "$TARGET_LOGIN_SHELL" + fi done # Let's chain a couple of run0 calls together, for fun readarray -t cmdline < <(printf "%.0srun0\n" {0..31})