X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/69be312b5e335430e3e896e200def6a7c6f89c8d..bd685982389b78a158921b7839bdeca501338d19:/flist.c diff --git a/flist.c b/flist.c index 60e00637..7a6ab342 100644 --- a/flist.c +++ b/flist.c @@ -69,6 +69,7 @@ extern int sender_symlink_iconv; extern int output_needs_newline; extern int sender_keeps_checksum; extern int unsort_ndx; +extern uid_t our_uid; extern struct stats stats; extern char *filesfrom_host; extern char *usermap, *groupmap; @@ -85,14 +86,6 @@ extern int filesfrom_convert; extern iconv_t ic_send, ic_recv; #endif -#ifdef HAVE_UTIMENSAT -#ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC -#define ST_MTIME_NSEC st_mtim.tv_nsec -#elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC) -#define ST_MTIME_NSEC st_mtimensec -#endif -#endif - #define PTR_SIZE (sizeof (struct file_struct *)) int io_error; @@ -1371,10 +1364,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, } #endif file->mode = st.st_mode; - if (uid_ndx) /* Check uid_ndx instead of preserve_uid for del support */ + if (preserve_uid) F_OWNER(file) = st.st_uid; - if (gid_ndx) /* Check gid_ndx instead of preserve_gid for del support */ + if (preserve_gid) F_GROUP(file) = st.st_gid; + if (am_generator && st.st_uid == our_uid) + file->flags |= FLAG_OWNED_BY_US; if (basename != thisname) file->dirname = lastdir; @@ -1731,11 +1726,12 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len, remainder = 0; for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) { + unsigned name_len; char *dname = d_name(di); if (dname[0] == '.' && (dname[1] == '\0' || (dname[1] == '.' && dname[2] == '\0'))) continue; - unsigned name_len = strlcpy(p, dname, remainder); + name_len = strlcpy(p, dname, remainder); if (name_len >= remainder) { char save = fbuf[len]; fbuf[len] = '\0';