https://bugzilla.samba.org/show_bug.cgi?id=12806

--- Comment #4 from Heinz-Willi Wyes <h...@delember-wyes.de> ---
I got a personal message from Lars Ellenberg that went also to
samba-b...@samba.org and rsync...@samba.org. He wrote:

------------------
Calling chmod only on (optimization: non-empty) directories would fix this.
I don't need to chmod a *file* before unlinking it, I just need write
permission on the directory it is located in.

(Now you have to convince the "appliance" to use a patched rsync ...)

Cheers,

    Lars Ellenberg


diff --git a/delete.c b/delete.c
index 88e4230..223b6d2 100644
--- a/delete.c
+++ b/delete.c
@@ -97,10 +97,10 @@ static enum delret delete_dir_contents(char *fname, uint16
flags)
         }

         strlcpy(p, fp->basename, remainder);
-        if (!(fp->mode & S_IWUSR) && !am_root && fp->flags & FLAG_OWNED_BY_US)
-            do_chmod(fname, fp->mode | S_IWUSR);
         /* Save stack by recursing to ourself directly. */
         if (S_ISDIR(fp->mode)) {
+            if (!(fp->mode & S_IWUSR) && !am_root && fp->flags &
FLAG_OWNED_BY_US)
+                do_chmod(fname, fp->mode | S_IWUSR);
             if (delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS)
                 ret = DR_NOT_EMPTY;
         }
@@ -138,14 +138,13 @@ enum delret delete_item(char *fbuf, uint16 mode, uint16
flags)
             fbuf, (int)mode, (int)flags);
     }

-    if (flags & DEL_NO_UID_WRITE)
-        do_chmod(fbuf, mode | S_IWUSR);
-
     if (S_ISDIR(mode) && !(flags & DEL_DIR_IS_EMPTY)) {
         /* This only happens on the first call to delete_item() since
          * delete_dir_contents() always calls us w/DEL_DIR_IS_EMPTY. */
         ignore_perishable = 1;
         /* If DEL_RECURSE is not set, this just reports emptiness. */
+        if (!(mode & S_IWUSR) && !am_root && flags & DEL_NO_UID_WRITE && flags
& DEL_RECURSE)
+            do_chmod(fbuf, mode | S_IWUSR);
         ret = delete_dir_contents(fbuf, flags);
         ignore_perishable = 0;
         if (ret == DR_NOT_EMPTY || ret == DR_AT_LIMIT)
-----------------------------

As far as I understand, there actually *is* a design flaw in the rsync
implementation that causes the behavior I described in my original post.

I suggested the patch to my provider. They replied that they rather wait for a
new release of rsync with that patch officially applied.

Now I wonder what the status is. Will there be a patched version of rsync?

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

-- 
Please use reply-all for most replies to avoid omitting the mailing list.
To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync
Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html

Reply via email to