From 8365126b8db2f32522c1d73ddaaa86d8dc4ca1e0 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Mon, 18 Feb 2008 10:02:35 -0800 Subject: [PATCH] Some permssion fixes: - Changed itemized output to only report 'p' with -p or -E. - Fixed a duplicate output of a link-dest file with -vv but no -i. - Improved unchanged_attrs() to handle -E. --- generator.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/generator.c b/generator.c index b22d9d64..eb130150 100644 --- a/generator.c +++ b/generator.c @@ -41,6 +41,7 @@ extern int preserve_links; extern int preserve_devices; extern int preserve_specials; extern int preserve_hard_links; +extern int preserve_executability; extern int preserve_perms; extern int preserve_times; extern int uid_ndx; @@ -563,6 +564,9 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) if (preserve_perms && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) return 0; + if (preserve_executability && ((sxp->st.st_mode & 0111) != 0) ^ ((file->mode & 0111) != 0)) + return 0; + if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file)) return 0; @@ -610,7 +614,8 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre ; } else #endif - if (!BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) + if ((preserve_perms || preserve_executability) + && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) iflags |= ITEM_REPORT_PERMS; if (uid_ndx && am_root && (uid_t)F_OWNER(file) != sxp->st.st_uid) iflags |= ITEM_REPORT_OWNER; @@ -960,7 +965,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, goto try_a_copy; if (preserve_hard_links && F_IS_HLINKED(file)) finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, j); - if (itemizing && (verbose > 1 || stdout_format_has_i > 1)) { + if (!maybe_ATTRS_REPORT && (verbose > 1 || stdout_format_has_i > 1)) { itemize(cmpbuf, file, ndx, 1, sxp, ITEM_LOCAL_CHANGE | ITEM_XNAME_FOLLOWS, 0, ""); -- 2.34.1