| 1 | #! /bin/sh |
| 2 | |
| 3 | # This program is distributable under the terms of the GNU GPL (see |
| 4 | # COPYING). |
| 5 | |
| 6 | # Test that rsync obeys default ACLs. -- Matt McCutchen |
| 7 | |
| 8 | . $srcdir/testsuite/rsync.fns |
| 9 | |
| 10 | $RSYNC --version | grep ", ACLs" >/dev/null || test_skipped "Rsync is configured without ACL support" |
| 11 | |
| 12 | case "$setfacl_nodef" in |
| 13 | true) test_skipped "I don't know how to use your setfacl command" ;; |
| 14 | *-k*) opts='-dm u::7,g::5,o:5' ;; |
| 15 | *) opts='-m d:u::7,d:g::5,d:o:5' ;; |
| 16 | esac |
| 17 | setfacl $opts "$scratchdir" || test_skipped "Your filesystem has ACLs disabled" |
| 18 | |
| 19 | # Call as: testit <dirname> <default-acl> <file-expected> <program-expected> |
| 20 | testit() { |
| 21 | todir="$scratchdir/$1" |
| 22 | mkdir "$todir" |
| 23 | $setfacl_nodef "$todir" |
| 24 | if [ "$2" ]; then |
| 25 | case "$setfacl_nodef" in |
| 26 | *-k*) opts="-dm $2" ;; |
| 27 | *) opts="-m `echo $2 | sed 's/\([ugom]:\)/d:\1/g'`" |
| 28 | esac |
| 29 | setfacl $opts "$todir" |
| 30 | fi |
| 31 | # Make sure we obey ACLs when creating a directory to hold multiple transferred files, |
| 32 | # even though the directory itself is outside the transfer |
| 33 | $RSYNC -rvv "$scratchdir/dir" "$scratchdir/file" "$scratchdir/program" "$todir/to/" |
| 34 | check_perms "$todir/to" $4 "Target $1" |
| 35 | check_perms "$todir/to/dir" $4 "Target $1" |
| 36 | check_perms "$todir/to/file" $3 "Target $1" |
| 37 | check_perms "$todir/to/program" $4 "Target $1" |
| 38 | # Make sure get_local_name doesn't mess us up when transferring only one file |
| 39 | $RSYNC -rvv "$scratchdir/file" "$todir/to/anotherfile" |
| 40 | check_perms "$todir/to/anotherfile" $3 "Target $1" |
| 41 | # Make sure we obey default ACLs when not transferring a regular file |
| 42 | $RSYNC -rvv "$scratchdir/dir/" "$todir/to/anotherdir/" |
| 43 | check_perms "$todir/to/anotherdir" $4 "Target $1" |
| 44 | } |
| 45 | |
| 46 | mkdir "$scratchdir/dir" |
| 47 | echo "File!" >"$scratchdir/file" |
| 48 | echo "#!/bin/sh" >"$scratchdir/program" |
| 49 | chmod 777 "$scratchdir/dir" |
| 50 | chmod 666 "$scratchdir/file" |
| 51 | chmod 777 "$scratchdir/program" |
| 52 | |
| 53 | # Test some target directories |
| 54 | umask 0077 |
| 55 | testit da777 u::7,g::7,o:7 rw-rw-rw- rwxrwxrwx |
| 56 | testit da775 u::7,g::7,o:5 rw-rw-r-- rwxrwxr-x |
| 57 | testit da750 u::7,g::5,o:0 rw-r----- rwxr-x--- |
| 58 | testit da750mask u::7,u:0:7,g::7,m:5,o:0 rw-r----- rwxr-x--- |
| 59 | testit noda1 '' rw------- rwx------ |
| 60 | umask 0000 |
| 61 | testit noda2 '' rw-rw-rw- rwxrwxrwx |
| 62 | umask 0022 |
| 63 | testit noda3 '' rw-r--r-- rwxr-xr-x |
| 64 | |
| 65 | # Hooray |
| 66 | exit 0 |