summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2006-12-07 08:10:35 +0100
committerJim Meyering <jim@meyering.net>2006-12-07 08:10:35 +0100
commitfc92148eac1cd2f8a5e99b3facc21e630e815bef (patch)
treee7f6086bd126eb980877eea391b69ec1aad3b614 /tests
parenta4f7b723f0723ec17b48ae25f0a218adcab2ff54 (diff)
downloadcoreutils-fc92148eac1cd2f8a5e99b3facc21e630e815bef.tar.xz
cp -p now clears special bits if it fails to preserve owner or group
* NEWS: Document the cp -p fix for special bits. * src/copy.c (set_owner): Now returns a three-way result, so that the caller can clear the special bits. All callers changed. (copy_reg): Don't set the special bits if chown failed. (copy_internal): Likewise. * tests/cp/special-bits: Test this fix. Signed-off-by: Jim Meyering <jim@meyering.net>
Diffstat (limited to 'tests')
-rwxr-xr-xtests/cp/special-bits10
1 files changed, 9 insertions, 1 deletions
diff --git a/tests/cp/special-bits b/tests/cp/special-bits
index 6a9b0949d..96dbf3d92 100755
--- a/tests/cp/special-bits
+++ b/tests/cp/special-bits
@@ -38,9 +38,12 @@ framework_failure=0
mkdir -p $tmp || framework_failure=1
cd $tmp || framework_failure=1
-touch a b || framework_failure=1
+touch a b c || framework_failure=1
chmod u+sx,go= a || framework_failure=1
chmod u=rwx,g=sx,o= b || framework_failure=1
+chmod a=r,ug+sx c || framework_failure=1
+chown $NON_ROOT_USERNAME . || framework_failure=1
+chmod u=rwx,g=rx,o=rx . || framework_failure=1
if test $framework_failure = 1; then
echo 'failure in testing framework'
@@ -59,4 +62,9 @@ set _ `ls -l b`; shift; p1=$1
set _ `ls -l b2`; shift; p2=$1
test $p1 = $p2 || fail=1
+setuidgid $NON_ROOT_USERNAME env PATH="$PATH" cp -p c c2 || fail=1
+set _ `ls -l c`; shift; p1=$1
+set _ `ls -l c2`; shift; p2=$1
+test $p1 = $p2 && fail=1
+
(exit $fail); exit $fail