diff options
author | Thomas Blume <Thomas.Blume@suse.com> | 2023-03-14 15:21:29 +0100 |
---|---|---|
committer | Mike Yuan <me@yhndnzj.com> | 2023-03-31 22:26:44 +0800 |
commit | c7bf1959d7580e1b7e918b75f852b3bf3fb6eb3c (patch) | |
tree | e69303cf1a769a5bd746cff0e2b49ada548d3c05 | |
parent | 6f1fe575f0d293fa801e8f02374988f7bbf69dca (diff) | |
download | systemd-c7bf1959d7580e1b7e918b75f852b3bf3fb6eb3c.tar.gz |
test: use setpriv instead of su for user switch from root
systemd-repart needs to find mkfs.ext4 for the test.
This is located in the directory /usr/sbin on openSUSE Tumbleweed.
But since the variable ALWAYS_SET_PATH in /etc/login.defs is set to yes,
su re-initializes the $PATH variable and removes /usr/sbin.
Hence, mkfs.ext4 is not found and the test fails.
Using setpriv instead of su fixes this issue and is more appropriate to
do the switch user task from root.
[zjs: move setpriv to $BASICTOOLS and force-push to retrigger CI]
-rw-r--r-- | test/test-functions | 5 | ||||
-rwxr-xr-x | test/units/testsuite-20.sh | 3 | ||||
-rwxr-xr-x | test/units/testsuite-43.sh | 3 | ||||
-rwxr-xr-x | test/units/testsuite-58.sh | 3 |
4 files changed, 6 insertions, 8 deletions
diff --git a/test/test-functions b/test/test-functions index 1a4e42f575..0a93c1a67b 100644 --- a/test/test-functions +++ b/test/test-functions @@ -214,6 +214,7 @@ BASICTOOLS=( seq setfattr setfont + setpriv setsid sfdisk sh @@ -2651,12 +2652,12 @@ inst_binary() { # Same as above, but we need to wrap certain libraries unconditionally # # chown, getent, login, su, useradd, userdel - dlopen() (not only) systemd's PAM modules - # ls, mkfs.*, mksquashfs, mkswap, stat + # ls, mkfs.*, mksquashfs, mkswap, setpriv, stat # - pull in nss_systemd with certain options (like ls -l) when # nsswitch.conf uses [SUCCESS=merge] (like on Arch Linux) # delv, dig - pull in nss_resolve if `resolve` is in nsswitch.conf # tar - called by machinectl in TEST-25 - bin_rx='/(chown|delv|dig|getent|login|ls|mkfs\.[a-z0-9]+|mksquashfs|mkswap|stat|su|tar|useradd|userdel)$' + bin_rx='/(chown|delv|dig|getent|login|ls|mkfs\.[a-z0-9]+|mksquashfs|mkswap|setpriv|stat|su|tar|useradd|userdel)$' if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ $bin_rx ]]; then wrap_binary=1 fi diff --git a/test/units/testsuite-20.sh b/test/units/testsuite-20.sh index 338769aacc..1a3d09e99d 100755 --- a/test/units/testsuite-20.sh +++ b/test/units/testsuite-20.sh @@ -151,8 +151,7 @@ test "$(systemctl show -P Result test20-true.scope)" = success runas() { declare userid=$1 shift - # shellcheck disable=SC2016 - su "$userid" -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID exec "$@"' -- sh "$@" + XDG_RUNTIME_DIR=/run/user/"$(id -u "$userid")" setpriv --reuid="$userid" --init-groups "$@" } systemctl start user@4711.service diff --git a/test/units/testsuite-43.sh b/test/units/testsuite-43.sh index 40b94fdb48..fe47de26f0 100755 --- a/test/units/testsuite-43.sh +++ b/test/units/testsuite-43.sh @@ -8,8 +8,7 @@ systemd-analyze log-level debug runas() { declare userid=$1 shift - # shellcheck disable=SC2016 - su "$userid" -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID exec "$@"' -- sh "$@" + XDG_RUNTIME_DIR=/run/user/"$(id -u "$userid")" setpriv --reuid="$userid" --init-groups "$@" } runas testuser systemd-run --wait --user --unit=test-private-users \ diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh index 20c2c57073..83d7757a13 100755 --- a/test/units/testsuite-58.sh +++ b/test/units/testsuite-58.sh @@ -6,8 +6,7 @@ set -o pipefail runas() { declare userid=$1 shift - # shellcheck disable=SC2016 - su "$userid" -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID exec "$@"' -- sh "$@" + XDG_RUNTIME_DIR=/run/user/"$(id -u "$userid")" setpriv --reuid="$userid" --init-groups "$@" } if ! command -v systemd-repart &>/dev/null; then |