]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: use setpriv instead of su for user switch from root
authorThomas Blume <Thomas.Blume@suse.com>
Tue, 14 Mar 2023 14:21:29 +0000 (15:21 +0100)
committerMike Yuan <me@yhndnzj.com>
Fri, 31 Mar 2023 14:26:44 +0000 (22:26 +0800)
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]

test/test-functions
test/units/testsuite-20.sh
test/units/testsuite-43.sh
test/units/testsuite-58.sh

index 1a4e42f575d10cdc0f946a88f7c196aa337b5e12..0a93c1a67bbb289455b65f076e707837afc924c1 100644 (file)
@@ -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
index 338769aacc500902d49ab7660e18592d87222bbc..1a3d09e99de6252f21c7bef77bacc167fd89ca71 100755 (executable)
@@ -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
index 40b94fdb48635d35aaf8b645d5fef5c814b1408c..fe47de26f007a06608a8d20532470e47432bb793 100755 (executable)
@@ -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 \
index 20c2c5707366d48508805423d07985172eb14c2a..83d7757a13c35db224673dc98723e9b5cae8da11 100755 (executable)
@@ -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