int ret;
extern int recurse;
- if (robust_unlink(fname) == 0 || errno == ENOENT) return 0;
-
#if SUPPORT_LINKS
ret = do_lstat(fname, &st);
#else
}
if (!S_ISDIR(st.st_mode)) {
+ if (robust_unlink(fname) == 0 || errno == ENOENT) return 0;
rprintf(FERROR,"unlink(%s) : %s\n", fname, strerror(errno));
return -1;
}
int updated = 0;
STRUCT_STAT st2;
int change_uid, change_gid;
- extern int am_daemon;
if (dry_run) return 0;
rprintf(FERROR,"chown %s : %s\n", fname,strerror(errno));
return 0;
}
+ /* a lchown had been done - we have to re-stat if the
+ destination had the setuid or setgid bits set due
+ to the side effect of the chown call */
+ if (st->st_mode & (S_ISUID | S_ISGID)) {
+ link_stat(fname, st);
+ }
updated = 1;
}
set_perms(fname,file,NULL,0);
}
}
-
-
-