summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2007-02-12 19:35:25 +0100
committerJim Meyering <jim@meyering.net>2007-03-29 21:37:06 +0200
commitadd8b3614847cacba66662ee701d0ce2f3e36802 (patch)
treeda27f455d51d24364c9e03365c3cdbb8f3566f6e /tests
parentc6922b6f7e3ed8c0d565f588df3bd4daf6635f2b (diff)
downloadcoreutils-add8b3614847cacba66662ee701d0ce2f3e36802.tar.xz
Arrange for "make check-root" to run the new root-only test.
* tests/Makefile.am (t9): New target, to run tests/cp/cp-a-selinux. (all_t): Add t9. Use a directory on a loopback device mounted with -o context=... * tests/cp/cp-a-selinux: Since this test now runs mount and umount, it is a root-only one.
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am4
-rwxr-xr-xtests/cp/cp-a-selinux36
2 files changed, 23 insertions, 17 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b2cbbfc09..4371d73a9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -30,7 +30,7 @@ SUBDIRS = \
tsort unexpand uniq wc
## N O T E :: Please do not add new directories.
-all_t = t1 t2 t3 t4 t5 t6 t7 t8
+all_t = t1 t2 t3 t4 t5 t6 t7 t8 t9
.PHONY: check-root $(all_t)
check-root: $(all_t)
@@ -50,6 +50,8 @@ t7:
cd ls && $(MAKE) check TESTS=nameless-uid
t8:
cd misc && $(MAKE) check TESTS=chcon
+t9:
+ cd cp && $(MAKE) check TESTS=cp-a-selinux
check-recursive: root-hint
diff --git a/tests/cp/cp-a-selinux b/tests/cp/cp-a-selinux
index d28b333e0..338044f16 100755
--- a/tests/cp/cp-a-selinux
+++ b/tests/cp/cp-a-selinux
@@ -27,19 +27,28 @@ fi
. $srcdir/../envvar-check
. $srcdir/../lang-default
. $srcdir/../selinux
-PRIV_CHECK_ARG=require-non-root . $srcdir/../priv-check
+PRIV_CHECK_ARG=require-root . $srcdir/../priv-check
pwd=`pwd`
t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
-trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0
+trap 'status=$?; cd "$pwd"; umount $tmp/mnt; chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0
trap '(exit $?); exit $?' 1 2 13 15
framework_failure=0
mkdir -p $tmp || framework_failure=1
cd $tmp || framework_failure=1
-echo > f || framework_failure=1
-echo > g || framework_failure=1
+# Create a file system, then mount it with the context=... option.
+dd if=/dev/zero of=blob bs=8192 count=200 > /dev/null 2>&1 \
+ || framework_failure=1
+mkdir mnt || framework_failure=1
+mkfs -t ext2 -F blob > /dev/null 2>&1 || framework_failure=1
+mount -oloop,context=system_u:object_r:removable_t blob mnt \
+ || framework_failure=1
+cd mnt || framework_failure=1
+
+echo > f || framework_failure=1
+echo > g || framework_failure=1
if test $framework_failure = 1; then
echo "$0: failure in testing framework" 1>&2
@@ -58,25 +67,20 @@ rm -f g err
echo > g
# =====================================================
-# Here, we expect cp to fail, because it (currently?) cannot
-# set the SELinux security context through NFS.
+# Here, we expect cp to fail, because it cannot set the SELinux
+# security context through NFS or a mount with fixed context.
cp --preserve=context f g 2> out && fail=1
# Here, we *do* expect the destination to be empty.
test -s g && fail=1
-# FIXME: currently, this test must be run in an NFS mounted
-# directory, and that's not checked. Move this part into a separate
-# test and make that a prerequisite.
-# In addition, we can add a root-only test that takes one of two
-# approaches: 1) create a loopback context=... mount and run the test there.
-# 2) run in a confined domain (maybe creating/loading it) that lacks the
-# required permissions to the file type).
-
-# Currently, I get this diagnostic:
+# An alternative to the current approach would be to run in a confined
+# domain (maybe creating/loading it) that lacks the required permissions
+# to the file type.
+# Note: this test could also be run by a regular (non-root) user in an
+# NFS mounted directory. When doing that, I get this diagnostic:
# cp: failed to set the security context of `g' to `system_u:object_r:nfs_t': \
# Operation not supported
-# but don't want to depend on ENOTSUP or that specific context triple:
sed "s/ .g' to .*//" out > k
mv k out