aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2008-05-06 10:39:19 -0700
committerWayne Davison <wayned@samba.org>2008-05-06 10:39:19 -0700
commit5b385336b93019fef963a0141f6cf94107f2ef23 (patch)
tree2ab9aee8acf75bc767d51d049a355000d85f4195
parentc3a2d95cfa45de18a961a9f86082a49e91647259 (diff)
downloadandroid_external_rsync-5b385336b93019fef963a0141f6cf94107f2ef23.tar.gz
android_external_rsync-5b385336b93019fef963a0141f6cf94107f2ef23.tar.bz2
android_external_rsync-5b385336b93019fef963a0141f6cf94107f2ef23.zip
Added options to tls.c to allow us to ask for mtime and ownership info
on symlinks. The testsuite will now pass these options to tls if rsync is configured to affect such attributes on symlinks.
-rwxr-xr-xruntests.sh11
-rw-r--r--testsuite/chown.test2
-rw-r--r--testsuite/devices.test2
-rw-r--r--tls.c14
4 files changed, 23 insertions, 6 deletions
diff --git a/runtests.sh b/runtests.sh
index c401ac45..a4d7141b 100755
--- a/runtests.sh
+++ b/runtests.sh
@@ -154,12 +154,21 @@ fi
RSYNC="$rsync_bin $*"
#RSYNC="valgrind $rsync_bin $*"
-export POSIXLY_CORRECT TOOLDIR srcdir RSYNC
+TLS_ARGS=''
+if egrep '^#define HAVE_UTIMES 1' "$srcdir/config.h" >/dev/null; then
+ TLS_ARGS="$TLS_ARGS -l"
+fi
+if egrep '#undef CHOWN_MODIFIES_SYMLINK' "$srcdir/config.h" >/dev/null; then
+ TLS_ARGS="$TLS_ARGS -L"
+fi
+
+export POSIXLY_CORRECT TOOLDIR srcdir RSYNC TLS_ARGS
echo "============================================================"
echo "$0 running in $TOOLDIR"
echo " rsync_bin=$RSYNC"
echo " srcdir=$srcdir"
+echo " TLS_ARGS=$TLS_ARGS"
if [ -f /usr/bin/whoami ]; then
testuser=`/usr/bin/whoami`
diff --git a/testsuite/chown.test b/testsuite/chown.test
index 28988903..d2908d7a 100644
--- a/testsuite/chown.test
+++ b/testsuite/chown.test
@@ -17,7 +17,7 @@ case $0 in
*fake*)
$RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests"
RSYNC="$RSYNC --fake-super"
- TLS_ARGS=--fake-super
+ TLS_ARGS="$TLS_ARGS --fake-super"
case "`xattr 2>&1`" in
*--list:*)
chown() {
diff --git a/testsuite/devices.test b/testsuite/devices.test
index 804e4c33..8df0be62 100644
--- a/testsuite/devices.test
+++ b/testsuite/devices.test
@@ -18,7 +18,7 @@ case $0 in
*fake*)
$RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests"
RSYNC="$RSYNC --fake-super"
- TLS_ARGS=--fake-super
+ TLS_ARGS="$TLS_ARGS --fake-super"
case "`xattr 2>&1`" in
*--list:*)
mknod() {
diff --git a/tls.c b/tls.c
index 4cb4c7a2..c11bdb45 100644
--- a/tls.c
+++ b/tls.c
@@ -45,6 +45,8 @@ int dry_run = 0;
int am_root = 0;
int read_only = 1;
int list_only = 0;
+int link_times = 0;
+int link_owner = 0;
int preserve_perms = 0;
int preserve_executability = 0;
@@ -134,12 +136,14 @@ static void list_file(const char *fname)
/* On some BSD platforms the mode bits of a symlink are
* undefined. Also it tends not to be possible to reset a
- * symlink's mtime, so we have to ignore it too. */
+ * symlink's mtime, so we default to ignoring it too. */
if (S_ISLNK(buf.st_mode)) {
int len;
buf.st_mode &= ~0777;
- buf.st_mtime = (time_t)0;
- buf.st_uid = buf.st_gid = 0;
+ if (!link_times)
+ buf.st_mtime = (time_t)0;
+ if (!link_owner)
+ buf.st_uid = buf.st_gid = 0;
strlcpy(linkbuf, " -> ", sizeof linkbuf);
/* const-cast required for silly UNICOS headers */
len = readlink((char *) fname, linkbuf+4, sizeof(linkbuf) - 4);
@@ -184,6 +188,8 @@ static void list_file(const char *fname)
static struct poptOption long_options[] = {
/* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
+ {"link-times", 'l', POPT_ARG_NONE, &link_times, 0, 0, 0 },
+ {"link-owner", 'L', POPT_ARG_NONE, &link_owner, 0, 0, 0 },
#ifdef SUPPORT_XATTRS
{"fake-super", 'f', POPT_ARG_VAL, &am_root, -1, 0, 0 },
#endif
@@ -197,6 +203,8 @@ static void tls_usage(int ret)
fprintf(F,"usage: " PROGRAM " [OPTIONS] FILE ...\n");
fprintf(F,"Trivial file listing program for portably checking rsync\n");
fprintf(F,"\nOptions:\n");
+ fprintf(F," -l, --link-times display the time on a symlink\n");
+ fprintf(F," -L, --link-owner display the owner+group on a symlink\n");
#ifdef SUPPORT_XATTRS
fprintf(F," -f, --fake-super display attributes including fake-super xattrs\n");
#endif