#ifdef SUPPORT_XATTRS
if (preserve_xattrs && do_xfers
&& iflags & (ITEM_REPORT_XATTR|ITEM_TRANSFER)) {
- send_xattr_request(NULL, file,
- iflags & ITEM_REPORT_XATTR ? sock_f_out : -1);
+ int fd = iflags & ITEM_REPORT_XATTR
+ && (protocol_version < 31 || !BITS_SET(iflags, ITEM_XNAME_FOLLOWS|ITEM_LOCAL_CHANGE))
+ ? sock_f_out : -1;
+ send_xattr_request(NULL, file, fd);
}
#endif
} else if (ndx >= 0) {
goto cleanup;
}
}
-#ifdef SUPPORT_XATTRS
- if (preserve_xattrs && statret == 1)
- copy_xattrs(fnamecmpbuf, fname);
-#endif
- if (set_file_attrs(fname, file, real_ret ? NULL : &real_sx, NULL, 0)
- && INFO_GTE(NAME, 1) && code != FNONE && f_out != -1)
- rprintf(code, "%s/\n", fname);
/* We need to ensure that the dirs in the transfer have writable
* permissions during the time we are putting files within them.
}
#endif
+#ifdef SUPPORT_XATTRS
+ if (preserve_xattrs && statret == 1)
+ copy_xattrs(fnamecmpbuf, fname);
+#endif
+ if (set_file_attrs(fname, file, real_ret ? NULL : &real_sx, NULL, 0)
+ && INFO_GTE(NAME, 1) && code != FNONE && f_out != -1)
+ rprintf(code, "%s/\n", fname);
+
if (real_ret != 0 && one_file_system)
real_sx.st.st_dev = filesystem_dev;
if (inc_recurse) {