Commit 4df9f368 authored by Andrew Tridgell's avatar Andrew Tridgell

solved the problem of not using the right permissions when

preserve_perms is off.
parent 5c9730a4
...@@ -177,6 +177,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) ...@@ -177,6 +177,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
char fnamecmpbuf[MAXPATHLEN]; char fnamecmpbuf[MAXPATHLEN];
extern char *compare_dest; extern char *compare_dest;
extern int list_only; extern int list_only;
extern int preserve_perms;
if (list_only) return; if (list_only) return;
...@@ -185,6 +186,15 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) ...@@ -185,6 +186,15 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
statret = link_stat(fname,&st); statret = link_stat(fname,&st);
if (statret == 0 &&
!preserve_perms &&
(S_ISDIR(st.st_mode) == S_ISDIR(file->mode))) {
/* if the file exists already and we aren't perserving
presmissions then act as though the remote end sent
us the file permissions we already have */
file->mode = st.st_mode;
}
if (S_ISDIR(file->mode)) { if (S_ISDIR(file->mode)) {
if (dry_run) return; if (dry_run) return;
if (statret == 0 && !S_ISDIR(st.st_mode)) { if (statret == 0 && !S_ISDIR(st.st_mode)) {
......
...@@ -303,6 +303,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) ...@@ -303,6 +303,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
int phase=0; int phase=0;
int recv_ok; int recv_ok;
extern struct stats stats; extern struct stats stats;
extern int preserve_perms;
struct stats initial_stats; struct stats initial_stats;
if (verbose > 2) { if (verbose > 2) {
...@@ -383,6 +384,13 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) ...@@ -383,6 +384,13 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
continue; continue;
} }
if (fd1 != -1 && !preserve_perms) {
/* if the file exists already and we aren't perserving
presmissions then act as though the remote end sent
us the file permissions we already have */
file->mode = st.st_mode;
}
if (fd1 != -1 && st.st_size > 0) { if (fd1 != -1 && st.st_size > 0) {
buf = map_file(fd1,st.st_size); buf = map_file(fd1,st.st_size);
if (verbose > 2) if (verbose > 2)
......
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