1: #! /bin/sh
2:
3: # Copyright (C) 2002 by Martin Pool <mbp@samba.org>
4:
5: # This program is distributable under the terms of the GNU GPL (see
6: # COPYING).
7:
8: # Test that when rsync is running as root and has -a it correctly sets
9: # the ownership of the destination.
10:
11: # We don't know what users will be present on this system, so we just
12: # use random numeric uids and gids.
13:
14: . "$suitedir/rsync.fns"
15:
16: case $0 in
17: *fake*)
18: $RSYNC --version | grep "[, ] xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests"
19: RSYNC="$RSYNC --fake-super"
20: TLS_ARGS="$TLS_ARGS --fake-super"
21: case "$HOST_OS" in
22: darwin*)
23: chown() {
24: own=$1
25: shift
26: xattr -s 'rsync.%stat' "100644 0,0 $own" "${@}"
27: }
28: ;;
29: solaris*)
30: chown() {
31: own=$1
32: shift
33: for fn in "${@}"; do
34: runat "$fn" "$SHELL_PATH" <<EOF
35: echo "100644 0,0 $own" > rsync.%stat
36: EOF
37: done
38: }
39: ;;
40: freebsd*)
41: chown() {
42: own=$1
43: shift
44: setextattr -h user "rsync.%stat" "100644 0,0 $own" "${@}"
45: }
46: ;;
47: *)
48: chown() {
49: own=$1
50: shift
51: setfattr -n 'user.rsync.%stat' -v "100644 0,0 $own" "${@}"
52: }
53: ;;
54: esac
55: ;;
56: *)
57: RSYNC="$RSYNC --super"
58: my_uid=`get_testuid`
59: root_uid=`get_rootuid`
60: if test x"$my_uid" = x; then
61: : # If "id" failed, try to continue...
62: elif test x"$my_uid" != x"$root_uid"; then
63: if [ -e "$FAKEROOT_PATH" ]; then
64: echo "Let's try re-running the script under fakeroot..."
65: exec "$FAKEROOT_PATH" "$SHELL_PATH" "$0"
66: fi
67: fi
68: ;;
69: esac
70:
71: # Build some hardlinks
72:
73: mkdir "$fromdir"
74: name1="$fromdir/name1"
75: name2="$fromdir/name2"
76: echo "This is the file" > "$name1"
77: echo "This is the other file" > "$name2"
78:
79: chown 5000:5002 "$name1" || test_skipped "Can't chown (probably need root)"
80: chown 5001:5003 "$name2" || test_skipped "Can't chown (probably need root)"
81:
82: cd "$fromdir/.."
83: checkit "$RSYNC -aHvv from/ to/" "$fromdir" "$todir"
84:
85: # The script would have aborted on error, so getting here means we've won.
86: exit 0
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>