Ticket #2924: attributes of existing directories are never preserved.
authorSlack <slackml@a1.net>
Sun, 25 Nov 2012 09:39:44 +0000 (25 13:39 +0400)
committerAndrew Borodin <aborodin@vmail.ru>
Thu, 29 Nov 2012 10:45:18 +0000 (29 14:45 +0400)
If superuser copies a directory tree (e.g. from a safe backup location
(with sane permission, owner, group, timestamp) over an existing tree,
any attributes are not preserved. All destination dirs retain all their
existing attributes instead of change attributes from source.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
src/filemanager/file.c

index 2586a40..7d0cdfb 100644 (file)
@@ -2066,6 +2066,7 @@ copy_dir_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const char *s, con
         {
             dest_dir = d;
             d = NULL;
+            dest_dir_vpath = vfs_path_from_str (dest_dir);
             goto dont_mkdir;
         }
     }
@@ -2091,6 +2092,7 @@ copy_dir_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const char *s, con
     lp->dev = buf.st_dev;
     dest_dirs = g_slist_prepend (dest_dirs, lp);
 
+  dont_mkdir:
     if (ctx->preserve_uidgid)
     {
         while (mc_chown (dest_dir_vpath, cbuf.st_uid, cbuf.st_gid) != 0)
@@ -2109,7 +2111,6 @@ copy_dir_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const char *s, con
         }
     }
 
-  dont_mkdir:
     /* open the source dir for reading */
     reading = mc_opendir (src_vpath);
     if (reading == NULL)