diff options
author | Pádraig Brady <P@draigBrady.com> | 2014-05-13 15:56:34 +0100 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2014-05-16 22:01:31 +0100 |
commit | 99960eeab9bf7fb479ab9f5342fc12a1fae629e6 (patch) | |
tree | 451f8fc6ba8c3ce9214d14eb24bd848c86b15597 /tests/misc | |
parent | ffd1a1d8dee921e20db515e7d4b3c3e47006c8b4 (diff) | |
download | coreutils-99960eeab9bf7fb479ab9f5342fc12a1fae629e6.tar.xz |
chroot: don't chdir() if not changing root
This allows chroot to be used as a light weight tool
to change user identification for a command,
while not changing the current working directory.
It also makes `chroot / true` consistently succeed on
all platforms for non root users.
* src/chroot.c (main): If the same root is specified. i.e. '/'
then don't change the current working directory, and avoid the
overhead of the other redundant calls.
* tests/misc/chroot-fail.sh: Remove failure guard previously
needed on some systems. Also add an explicit case to ensure
we don't change directory.
* NEWS: Mention the change in behavior.
Diffstat (limited to 'tests/misc')
-rwxr-xr-x | tests/misc/chroot-fail.sh | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/tests/misc/chroot-fail.sh b/tests/misc/chroot-fail.sh index 11f03458c..56be8e231 100755 --- a/tests/misc/chroot-fail.sh +++ b/tests/misc/chroot-fail.sh @@ -28,16 +28,18 @@ test $? = 125 || fail=1 chroot --- / true # unknown option test $? = 125 || fail=1 -# chroot("/") succeeds for non-root users on some systems, but not all. -if chroot / true ; then - chroot / sh -c 'exit 2' # exit status propagation - test $? = 2 || fail=1 - chroot / . # invalid command - test $? = 126 || fail=1 - chroot / no_such # no such command - test $? = 127 || fail=1 -else - test $? = 125 || fail=1 -fi +# Note chroot("/") succeeds for non-root users on some systems, but not all, +# however we avoid the chroot() with "/" to have common behvavior. +chroot / sh -c 'exit 2' # exit status propagation +test $? = 2 || fail=1 +chroot / . # invalid command +test $? = 126 || fail=1 +chroot / no_such # no such command +test $? = 127 || fail=1 + +# Ensure we don't chdir("/") when not changing root +# to allow only changing user ids for a command. +curdir=$(chroot / env pwd) || fail=1 +test "$curdir" = '/' && fail=1 Exit $fail |