summaryrefslogtreecommitdiff
path: root/tests/misc/chroot-fail.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/misc/chroot-fail.sh')
-rwxr-xr-xtests/misc/chroot-fail.sh29
1 files changed, 17 insertions, 12 deletions
diff --git a/tests/misc/chroot-fail.sh b/tests/misc/chroot-fail.sh
index 86095f3c..a84826fd 100755
--- a/tests/misc/chroot-fail.sh
+++ b/tests/misc/chroot-fail.sh
@@ -1,7 +1,7 @@
#!/bin/sh
# Verify that internal failure in chroot gives exact status.
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ chroot
+require_built_ chroot
# These tests verify exact status of internal failure; since none of
# them actually run a command, we don't need root privileges
@@ -28,16 +29,20 @@ 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.
+for dir in '/' '/.' '/../'; do
+ curdir=$(chroot "$dir" env pwd) || fail=1
+ test "$curdir" = '/' && fail=1
+done
Exit $fail