summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Blume <Thomas.Blume@suse.com>2023-03-14 15:21:29 +0100
committerMike Yuan <me@yhndnzj.com>2023-03-31 22:26:44 +0800
commitc7bf1959d7580e1b7e918b75f852b3bf3fb6eb3c (patch)
treee69303cf1a769a5bd746cff0e2b49ada548d3c05
parent6f1fe575f0d293fa801e8f02374988f7bbf69dca (diff)
downloadsystemd-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-functions5
-rwxr-xr-xtest/units/testsuite-20.sh3
-rwxr-xr-xtest/units/testsuite-43.sh3
-rwxr-xr-xtest/units/testsuite-58.sh3
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