Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use preserve_[ug]id values for send/recv checking, which will
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
eb13015
..
f4f15bb
100644
(file)
--- a/
generator.c
+++ b/
generator.c
@@
-27,6
+27,7
@@
extern int dry_run;
extern int do_xfers;
extern int stdout_format_has_i;
extern int logfile_format_has_i;
extern int do_xfers;
extern int stdout_format_has_i;
extern int logfile_format_has_i;
+extern int receiver_symlink_times;
extern int am_root;
extern int am_server;
extern int am_daemon;
extern int am_root;
extern int am_server;
extern int am_daemon;
@@
-553,7
+554,7
@@
static void do_delete_pass(void)
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
-#if
ndef HAVE_L
UTIMES
+#if
!defined HAVE_LUTIMES || !defined HAVE_
UTIMES
if (S_ISLNK(file->mode)) {
;
} else
if (S_ISLNK(file->mode)) {
;
} else
@@
-564,7
+565,7
@@
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_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
))
+ if (preserve_executability && ((sxp->st.st_mode & 0111
? 1 : 0) ^ (file->mode & 0111 ? 1 : 0)
))
return 0;
if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file))
return 0;
if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file))
@@
-599,8
+600,11
@@
void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
{
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
int keep_time = !preserve_times ? 0
{
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
int keep_time = !preserve_times ? 0
- : S_ISDIR(file->mode) ? preserve_times > 1
- : !S_ISLNK(file->mode);
+ : S_ISDIR(file->mode) ? preserve_times > 1 :
+#if defined HAVE_LUTIMES && defined HAVE_UTIMES
+ (receiver_symlink_times && !(file->flags & FLAG_TIME_FAILED)) ||
+#endif
+ !S_ISLNK(file->mode);
if (S_ISREG(file->mode) && F_LENGTH(file) != sxp->st.st_size)
iflags |= ITEM_REPORT_SIZE;
if (S_ISREG(file->mode) && F_LENGTH(file) != sxp->st.st_size)
iflags |= ITEM_REPORT_SIZE;