[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Sat Dec 5 19:20:08 UTC 2015


The branch, master has been updated
       via  32de6b7 Fix return of stat info from try_dests_reg().
      from  bb853b3 Add -wo option for write-only rrsync mode.

https://git.samba.org/?p=rsync.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 32de6b7cb47630c5d5ba3afe631faa42966d8490
Author: Wayne Davison <wayned at samba.org>
Date:   Sat Dec 5 11:10:24 2015 -0800

    Fix return of stat info from try_dests_reg().
    
    The try_dests_reg() function could sometimes tweak the stat struct's
    info when it should have been left unchanged.  This fixes bug 11545
    (where an ACL check of a file that was mistakenly thought to be a
    directory failed).

-----------------------------------------------------------------------

Summary of changes:
 generator.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)


Changeset truncated at 500 lines:

diff --git a/generator.c b/generator.c
index 3a4504f..ddf44a0 100644
--- a/generator.c
+++ b/generator.c
@@ -895,23 +895,21 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
 	} while (basis_dir[++j] != NULL);
 
 	if (!match_level)
-		return -1;
+		goto got_nothing_for_ya;
 
 	if (j != best_match) {
 		j = best_match;
 		pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
 		if (link_stat(cmpbuf, &sxp->st, 0) < 0)
-			return -1;
+			goto got_nothing_for_ya;
 	}
 
 	if (match_level == 3 && !copy_dest) {
 		if (find_exact_for_existing) {
 			if (link_dest && real_st.st_dev == sxp->st.st_dev && real_st.st_ino == sxp->st.st_ino)
 				return -1;
-			if (do_unlink(fname) < 0 && errno != ENOENT) {
-				sxp->st = real_st;
-				return -1;
-			}
+			if (do_unlink(fname) < 0 && errno != ENOENT)
+				goto got_nothing_for_ya;
 		}
 #ifdef SUPPORT_HARD_LINKS
 		if (link_dest) {
@@ -935,10 +933,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
 		return -2;
 	}
 
-	if (find_exact_for_existing) {
-		sxp->st = real_st;
-		return -1;
-	}
+	if (find_exact_for_existing)
+		goto got_nothing_for_ya;
 
 	if (match_level >= 2) {
 #ifdef SUPPORT_HARD_LINKS
@@ -946,7 +942,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
 #endif
 		if (!dry_run && copy_altdest_file(cmpbuf, fname, file) < 0) {
 			if (find_exact_for_existing) /* Can get here via hard-link failure */
-				sxp->st = real_st;
+				goto got_nothing_for_ya;
 			return -1;
 		}
 		if (itemizing)
@@ -966,6 +962,10 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
 	}
 
 	return FNAMECMP_BASIS_DIR_LOW + j;
+
+got_nothing_for_ya:
+	sxp->st = real_st;
+	return -1;
 }
 
 /* This is only called for non-regular files.  We return -2 if we've finished


-- 
The rsync repository.



More information about the rsync-cvs mailing list