solved the problem of not using the right permissions when
authorAndrew Tridgell <tridge@samba.org>
Sun, 31 Oct 1999 04:28:03 +0000 (04:28 +0000)
committerAndrew Tridgell <tridge@samba.org>
Sun, 31 Oct 1999 04:28:03 +0000 (04:28 +0000)
preserve_perms is off.

generator.c
receiver.c

index 8afc8f7..5321d8a 100644 (file)
@@ -177,6 +177,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
        char fnamecmpbuf[MAXPATHLEN];
        extern char *compare_dest;
        extern int list_only;
+       extern int preserve_perms;
 
        if (list_only) return;
 
@@ -185,6 +186,15 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
 
        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 (dry_run) return;
                if (statret == 0 && !S_ISDIR(st.st_mode)) {
index 49d1bf2..9621578 100644 (file)
@@ -303,6 +303,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
        int phase=0;
        int recv_ok;
        extern struct stats stats;              
+       extern int preserve_perms;
        struct stats initial_stats;
 
        if (verbose > 2) {
@@ -383,6 +384,13 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
                        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) {
                        buf = map_file(fd1,st.st_size);
                        if (verbose > 2)