Make get_xattr_names() even safer at fetching the list of attr names.
[rsync/rsync.git] / generator.c
index bf11275..e4e5635 100644 (file)
@@ -278,10 +278,10 @@ static enum delret delete_dir_contents(char *fname, int flags)
                }
 
                strlcpy(p, fp->basename, remainder);
-               if (F_OWNER(fp) == our_uid)
+               if (!uid_ndx || (uid_t)F_OWNER(fp) == our_uid)
                        flags |= DEL_OWNED_BY_US;
                else
-                       flags &= DEL_OWNED_BY_US;
+                       flags &= ~DEL_OWNED_BY_US;
                /* Save stack by recursing to ourself directly. */
                if (S_ISDIR(fp->mode)) {
                        if (!am_root && !(fp->mode & S_IWUSR) && flags & DEL_OWNED_BY_US)
@@ -503,7 +503,7 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
                }
                if (flist_find(cur_flist, fp) < 0) {
                        int flags = DEL_RECURSE
-                                 | (F_OWNER(fp) == our_uid ? DEL_OWNED_BY_US : 0);
+                                 | (!uid_ndx || (uid_t)F_OWNER(fp) == our_uid ? DEL_OWNED_BY_US : 0);
                        f_name(fp, delbuf);
                        if (delete_during == 2) {
                                if (!remember_delete(fp, delbuf, flags))
@@ -1316,7 +1316,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                return;
        }
 
-       if (statret == 0 && F_OWNER(file) == our_uid)
+       if (statret == 0 && sx.st.st_uid == our_uid)
                del_opts |= DEL_OWNED_BY_US;
 
        if (S_ISDIR(file->mode)) {