Merge pull request #34771 from ZLima12/run0-root-working-directory
run: fix bug causing run0 to ignore `-D /`.
This commit is contained in:
+6
-1
@@ -862,7 +862,8 @@ static int parse_argv_sudo_mode(int argc, char *argv[]) {
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
r = parse_path_argument(optarg, true, &arg_working_directory);
|
||||
/* Root will be manually suppressed later. */
|
||||
r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_working_directory);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -901,6 +902,10 @@ static int parse_argv_sudo_mode(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get current working directory: %m");
|
||||
}
|
||||
} else {
|
||||
/* Root was not suppressed earlier, to allow the above check to work properly. */
|
||||
if (empty_or_root(arg_working_directory))
|
||||
arg_working_directory = mfree(arg_working_directory);
|
||||
}
|
||||
|
||||
arg_service_type = "exec";
|
||||
|
||||
@@ -211,6 +211,7 @@ BASICTOOLS=(
|
||||
ping
|
||||
pkill
|
||||
ps
|
||||
pwd
|
||||
readlink
|
||||
realpath
|
||||
rev
|
||||
|
||||
@@ -246,4 +246,16 @@ if [[ -e /usr/lib/pam.d/systemd-run0 ]] || [[ -e /etc/pam.d/systemd-run0 ]]; the
|
||||
# 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"
|
||||
|
||||
# Tests for working directory, especially for specifying "/" (see PR #34771).
|
||||
cd /
|
||||
assert_eq "$(run0 pwd)" "/"
|
||||
assert_eq "$(run0 -D /tmp pwd)" "/tmp"
|
||||
assert_eq "$(run0 --user=testuser pwd)" "/home/testuser"
|
||||
assert_eq "$(run0 -D /tmp --user=testuser pwd)" "/tmp"
|
||||
cd /tmp
|
||||
assert_eq "$(run0 pwd)" "/tmp"
|
||||
assert_eq "$(run0 -D / pwd)" "/"
|
||||
assert_eq "$(run0 --user=testuser pwd)" "/home/testuser"
|
||||
assert_eq "$(run0 -D / --user=testuser pwd)" "/"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user