Fix compile w/o openssl; disable sha256 & sha512 for --checksum.
[rsync.git] / testsuite / dir-sgid.test
blobd6b9a3c5912ebf15464d2e26fa27c4d2f6b1ba66
1 #!/bin/sh
3 # This program is distributable under the terms of the GNU GPL (see
4 # COPYING).
6 # Test that rsync obeys directory setgid. -- Matt McCutchen
8 . $suitedir/rsync.fns
10 umask 077
12 # Call as: testit <dirname> <dirperms> <file-expected> <program-expected> <dir-expected>
13 testit() {
14 todir="$scratchdir/$1"
15 mkdir "$todir"
16 chmod $2 "$todir"
17 # Make sure we obey directory setgid when creating a directory to hold multiple transferred files,
18 # even though the directory itself is outside the transfer
19 $RSYNC -rvv "$scratchdir/dir" "$scratchdir/file" "$scratchdir/program" "$todir/to/"
20 check_perms "$todir/to" $5 "Target $1"
21 check_perms "$todir/to/dir" $5 "Target $1"
22 check_perms "$todir/to/file" $3 "Target $1"
23 check_perms "$todir/to/program" $4 "Target $1"
26 mkdir "$scratchdir/dir"
27 # Cygwin has a persistent default dir ACL that ruins this test.
28 case `getfacl "$scratchdir/dir" 2>/dev/null || true` in
29 *default:user::*) test_skipped "The default ACL mode interferes with this test" ;;
30 esac
32 echo "File!" >"$scratchdir/file"
33 echo "#!/bin/sh" >"$scratchdir/program"
35 chmod u=rwx,g=rw,g+s,o=r "$scratchdir/dir" || test_skipped "Can't chmod"
36 chmod 664 "$scratchdir/file"
37 chmod 775 "$scratchdir/program"
39 [ -g "$scratchdir/dir" ] || test_skipped "The directory setgid bit vanished!"
40 mkdir "$scratchdir/dir/blah"
41 [ -g "$scratchdir/dir/blah" ] || test_skipped "Your filesystem doesn't use directory setgid; maybe it's BSD."
43 # Test some target directories
44 testit setgid-off 700 rw------- rwx------ rwx------
45 testit setgid-on u=rwx,g=rw,g+s,o-rwx rw------- rwx------ rwx--S---
47 # Hooray
48 exit 0