summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorOndřej Vašík <ovasik@redhat.com>2009-02-17 15:53:39 +0100
committerJim Meyering <meyering@redhat.com>2009-02-18 15:27:10 +0100
commit8c243ff965d477a89582a1b329923516a4d64668 (patch)
treeb0b9d6e5c1d4f3b9aa0134ffe327b1c9ddec4aed /tests
parent86cef85b3671ed0a14a444eef3b6cb07fa26ee64 (diff)
downloadcoreutils-8c243ff965d477a89582a1b329923516a4d64668.tar.xz
cp: -a now preserves SELinux context, with reduced diagnostics
* copy.c (copy_reg): Reduce SELinux context diagnostics for 'cp -a'. (copy_internal): Likewise * copy.h (cp_options): Add boolean reduce_diagnostics. * cp.c (usage): Say that --archive (-a) behaves like -dR --preserve=all. (cp_option_init): Initialize added reduce_diagnostics. (main): Add reduce_diagnostics for the -a option, and preserve SELinux context, if possible. * mv.c (cp_options_init): Initialize new cp_options booleans. * install.c (cp_option_init): Likewise. * NEWS: Mention those behaviour changes. * doc/coreutils.texi: Document --preserve=context, document that diagnostics are not shown for failures of non-mandatory attributes (just SELinux at the moment). * tests/cp/cp-a-selinux: Check not only failures, but succesful use of preserving SELinux context in cp.
Diffstat (limited to 'tests')
-rwxr-xr-xtests/cp/cp-a-selinux22
1 files changed, 18 insertions, 4 deletions
diff --git a/tests/cp/cp-a-selinux b/tests/cp/cp-a-selinux
index 2f4af3593..8b7cc4d30 100755
--- a/tests/cp/cp-a-selinux
+++ b/tests/cp/cp-a-selinux
@@ -1,8 +1,10 @@
#!/bin/sh
# Ensure that cp -a and cp --preserve=context work properly.
# In particular, test on a writable NFS partition.
+# Check also locally if --preserve=context, -a and --preserve=all
+# does work
-# Copyright (C) 2007-2008 Free Software Foundation, Inc.
+# Copyright (C) 2007-2009 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
@@ -29,6 +31,21 @@ require_selinux_
cwd=`pwd`
cleanup_() { cd /; umount "$cwd/mnt"; }
+# This context is special: it works even when mcstransd isn't running.
+ctx=root:object_r:tmp_t:s0
+
+# Check basic functionality - before check on fixed context mount
+touch c || framework_failure
+chcon $ctx c || framework_failure
+cp -a c d 2>err || framework_failure
+cp --preserve=context c e || framework_failure
+cp --preserve=all c f || framework_failure
+ls -Z d | grep $ctx || fail=1
+test -s err && fail=1 #there must be no stderr output for -a
+ls -Z e | grep $ctx || fail=1
+ls -Z f | grep $ctx || fail=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
@@ -36,9 +53,6 @@ mkdir mnt || framework_failure
mkfs -t ext2 -F blob ||
skip_test_ "failed to create an ext2 file system"
-# This context is special: it works even when mcstransd isn't running.
-ctx=root:object_r:tmp_t:s0
-
mount -oloop,context=$ctx blob mnt || framework_failure
cd mnt || framework_failure