extern int am_root;
extern int am_server;
extern int am_sender;
+extern int am_receiver;
extern int am_generator;
extern int am_starting_up;
extern int allow_8bit_chars;
iflags = protocol_version >= 29 ? read_shortint(f_in)
: ITEM_TRANSFER | ITEM_MISSING_DATA;
- /* Honor the old-style keep-alive indicator. */
- if (protocol_version < 30
- && ndx == cur_flist->used && iflags == ITEM_IS_NEW) {
+ /* Support the protocol-29 keep-alive style. */
+ if (protocol_version < 30 && ndx == cur_flist->used && iflags == ITEM_IS_NEW) {
if (am_sender)
- maybe_send_keepalive();
+ maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH);
goto read_loop;
}
set_xattr(fname, file, fnamecmp, sxp);
#endif
- if (!preserve_times || (S_ISDIR(sxp->st.st_mode) && preserve_times == 1))
+ if (!preserve_times
+ || (!(preserve_times & PRESERVE_DIR_TIMES) && S_ISDIR(sxp->st.st_mode))
+ || (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(sxp->st.st_mode)))
flags |= ATTRS_SKIP_MTIME;
if (!(flags & ATTRS_SKIP_MTIME)
&& cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
- int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
+ int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), file->mode);
if (ret < 0) {
rsyserr(FERROR_XFER, errno, "failed to set times on %s",
full_fname(fname));
/* move tmp file over real file */
if (DEBUG_GTE(RECV, 1))
rprintf(FINFO, "renaming %s to %s\n", fnametmp, fname);
- ret = robust_rename(fnametmp, fname, temp_copy_name,
- file->mode & INITACCESSPERMS);
+ ret = robust_rename(fnametmp, fname, temp_copy_name, file->mode);
if (ret < 0) {
rsyserr(FERROR_XFER, errno, "%s %s -> \"%s\"",
ret == -2 ? "copy" : "rename",
full_fname(fnametmp), fname);
if (!partialptr || (ret == -2 && temp_copy_name)
- || robust_rename(fnametmp, partialptr, NULL,
- file->mode & INITACCESSPERMS) < 0)
+ || robust_rename(fnametmp, partialptr, NULL, file->mode) < 0)
do_unlink(fnametmp);
return 0;
}
{
if (am_starting_up)
return am_server ? "server" : "client";
- return am_sender ? "sender" : am_generator ? "generator" : "receiver";
+ return am_sender ? "sender"
+ : am_generator ? "generator"
+ : am_receiver ? "receiver"
+ : "Receiver"; /* pre-forked receiver */
}