Commit 24079e98 authored by Wayne Davison's avatar Wayne Davison

Don't (wrongly) retouch dir permissions with --fake-super.

(Patch from Matt.)
parent 8a68cad1
...@@ -1892,6 +1892,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx) ...@@ -1892,6 +1892,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
static int counter = 0; static int counter = 0;
struct file_struct *file; struct file_struct *file;
char *fname; char *fname;
BOOL fix_dir_perms;
int i, start, end; int i, start, end;
if (ndx < 0) { if (ndx < 0) {
...@@ -1912,11 +1913,13 @@ static void touch_up_dirs(struct file_list *flist, int ndx) ...@@ -1912,11 +1913,13 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
rprintf(FINFO, "touch_up_dirs: %s (%d)\n", rprintf(FINFO, "touch_up_dirs: %s (%d)\n",
NS(fname), i); NS(fname), i);
} }
/* Be sure not to retouch permissions with --fake-super. */
fix_dir_perms = !am_root && !(file->mode & S_IWUSR);
if (!F_IS_ACTIVE(file) || file->flags & FLAG_MISSING_DIR if (!F_IS_ACTIVE(file) || file->flags & FLAG_MISSING_DIR
|| (!need_retouch_dir_times && file->mode & S_IWUSR)) || !(need_retouch_dir_times || fix_dir_perms))
continue; continue;
fname = f_name(file, NULL); fname = f_name(file, NULL);
if (!(file->mode & S_IWUSR)) if (fix_dir_perms)
do_chmod(fname, file->mode); do_chmod(fname, file->mode);
if (need_retouch_dir_times) { if (need_retouch_dir_times) {
STRUCT_STAT st; STRUCT_STAT st;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment