Fix the daemon test when running it as root.
[rsync/rsync.git] / testsuite / rsync.fns
index eaad40a..b58bd0d 100644 (file)
 # License along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-
 tmpdir="$scratchdir"
 fromdir="$tmpdir/from"
 todir="$tmpdir/to"
 chkdir="$tmpdir/chk"
 
+# For itemized output:
+all_plus='+++++++++'
+allspace='         '
+dots='.....' # trailing dots after changes
+
 # Berkley's nice.
 PATH="$PATH:/usr/ucb"
 
-if diff -u "$srcdir/testsuite/rsync.fns" "$srcdir/testsuite/rsync.fns" >/dev/null 2>&1; then
+if diff -u "$suitedir/rsync.fns" "$suitedir/rsync.fns" >/dev/null 2>&1; then
     diffopt="-u"
 else
     diffopt="-c"
@@ -47,6 +51,29 @@ runtest() {
     fi
 }
 
+set_cp_destdir() {
+    while test $# -gt 1; do
+       shift
+    done
+    destdir="$1"
+}
+
+# Perform a "cp -p", making sure that timestamps are really the same,
+# even if the copy rounded microsecond times on the destination file.
+cp_touch() {
+    cp -p "${@}" || test_fail "cp -p failed"
+    if test $# -gt 2 -o -d "$2"; then
+       set_cp_destdir "${@}" # sets destdir var
+       while test $# -gt 1; do
+           destname="$destdir/`basename $1`"
+           touch -r "$destname" "$1" "$destname"
+           shift
+       done
+    else
+       touch -r "$2" "$1" "$2"
+    fi
+}
+
 # Call this if you want to filter out verbose messages (-v or -vv) from
 # the output of an rsync run (whittling the output down to just the file
 # messages).  This isn't needed if you use -i without -v.
@@ -229,32 +256,69 @@ build_rsyncd_conf() {
     logfile="$scratchdir/rsyncd.log"
     hostname=`uname -n`
 
+    uid_setting='uid = 0'
+    gid_setting='gid = 0'
+    case `id -u` in
+    0) ;;
+    *)
+       # Non-root cannot specify uid & gid settings
+       uid_setting="#$uid_setting"
+       gid_setting="#$gid_setting"
+       ;;
+    esac
+
     cat >"$conf" <<EOF
 # rsyncd configuration file autogenerated by $0
 
 pid file = $pidfile
 use chroot = no
-hosts allow = localhost 127.0.0.1 10.0.1.2 $hostname
+munge symlinks = no
+hosts allow = localhost 127.0.0.0/24 192.168.0.0/16 10.0.0.0/8 $hostname
 log file = $logfile
 log format = %i %h [%a] %m (%u) %l %f%L
 transfer logging = yes
-exclude = foobar.baz
-max verbosity = 9
-uid = 0
-gid = 0
+exclude = foobar.baz
+max verbosity = 4
+$uid_setting
+$gid_setting
 
 [test-from]
        path = $fromdir
        read only = yes
+       comment = r/o
 
 [test-to]
        path = $todir
        read only = no
+       comment = r/w
 
 [test-scratch]
        path = $scratchdir
        read only = no
+
+[test-hidden]
+       path = $fromdir
+       list = no
 EOF
+
+    # Build a helper script to ignore exit code 23
+    ignore23="$scratchdir/ignore23"
+    echo "building help script $ignore23"
+
+    cat >"$ignore23" <<'EOT'
+if "${@}"; then
+    exit
+fi
+
+ret=$?
+
+if test $ret = 23; then
+    exit
+fi
+
+exit $ret
+EOT
+chmod +x "$ignore23"
 }