3c727473252a146e5c543ac8b5f9eb1e4386fe56
[platform/upstream/coreutils.git] / tests / cp / acl
1 #!/bin/sh
2 # copy files/directories across file system boundaries
3 # and make sure acls are preserved appropriately
4
5 . $srcdir/../acl
6 # Make sure we get English translations.
7 . $srcdir/../lang-default
8
9 if test "$VERBOSE" = yes; then
10   set -x
11   mv --version
12   getfacl --version
13   setfacl --version
14 fi
15
16 pwd=`pwd`
17 t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
18 trap 'status=$?; cd $pwd; chmod -R u+rwx $t0; rm -rf $t0 && exit $status' 0
19 trap '(exit $?); exit $?' 1 2 13 15
20
21 framework_failure=0
22 mkdir -p $tmp || framework_failure=1
23 cd $tmp || framework_failure=1
24
25 mkdir -p a b || framework_failure=1
26 touch a/file || framework_failure=1
27
28 if test $framework_failure = 1; then
29   echo 'failure in testing framework'
30   (exit 1); exit 1
31 fi
32
33 skip=no
34 # Ensure that setfacl and getfacl work on this file system.
35 setfacl -m user:bin:rw a/file 2> /dev/null || skip=yes
36 acl1=`cd a && getfacl file | grep -v ':bin:' | grep -v 'mask::'` \
37   || skip=yes
38
39 test $skip = yes &&
40   {
41     echo "$0: '.' is not on a suitable file system for this test" 1>&2
42     echo "$0: skipping this test" 1>&2
43     (exit 77); exit 77
44   }
45
46 # copy a file without preserving permissions
47 cp a/file b/ || fail=1
48
49 acl2=`cd b && getfacl file` || framework_failure=1
50 test "$acl1" = "$acl2" || fail=1
51 rm a/file || framework_failure=1
52
53 # copy a file, preserving permissions
54 touch a/file || framework_failure=1
55 setfacl -m user:bin:rw a/file || framework_failure=1
56 acl1=`cd a && getfacl file` || framework_failure=1
57 cp -p a/file b/ || fail=1
58 acl2=`cd b && getfacl file` || framework_failure=1
59 test "$acl1" = "$acl2" || fail=1
60
61 if test $framework_failure = 1; then
62   echo 'failure in testing framework'
63   (exit 1); exit 1
64 fi
65
66 exit $fail