#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-2.1-or-later # shellcheck disable=SC2016 set -eux set -o pipefail # shellcheck source=test/units/util.sh . "$(dirname "$0")"/util.sh systemd-run --help --no-pager systemd-run --version systemd-run --no-ask-password true systemd-run --no-block --collect true export PARENT_FOO=bar touch /tmp/public-marker : "Transient service (system daemon)" systemd-run --wait --pipe \ bash -xec '[[ "$(/dev/null systemd-run --json=pretty /bin/true | jq . >/dev/null (! SHELL=/bin/false systemd-run --quiet --shell) (! systemd-run) (! systemd-run "") (! systemd-run --foo=bar) (! systemd-run --wait --pipe --slice=foo.service true) for opt in nice on-{active,boot,calendar,startup,unit-active,unit-inactive} property service-type setenv; do (! systemd-run "--$opt=" true) (! systemd-run "--$opt=''" true) done # Let's make sure that ProtectProc= properly moves submounts of the original /proc over to the new proc BOOT_ID="$("$TMP_KVER" mount --bind "$TMP_KVER" /proc/version UNIT_KVER="$(systemd-run -q --wait --pipe -p ProtectProc=invisible cat /proc/version)" assert_eq "$KVER" "$UNIT_KVER" umount /proc/version rm -f "$TMP_KVER" if [[ -e /usr/lib/pam.d/systemd-run0 ]] || [[ -e /etc/pam.d/systemd-run0 ]]; then # Check that invoking the tool under the run0 alias name works run0 ls / assert_eq "$(run0 echo foo)" "foo" # Check if we set some expected environment variables for arg in "" "--user=root" "--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")" done # Let's chain a couple of run0 calls together, for fun readarray -t cmdline < <(printf "%.0srun0\n" {0..31}) assert_eq "$("${cmdline[@]}" bash -c 'echo $SUDO_USER')" "$USER" fi