summaryrefslogtreecommitdiff
path: root/generator.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1999-10-31 04:28:03 +0000
committerAndrew Tridgell <tridge@samba.org>1999-10-31 04:28:03 +0000
commit4df9f36841dbdf5fa088a402d0dcdc8a4e0c86a6 (patch)
treea995e012f8753bdc696065bc6a8e82126c7b1b7e /generator.c
parent5c9730a46c44e5913a4d4767bd99ec23f2f81073 (diff)
downloadrsync-4df9f36841dbdf5fa088a402d0dcdc8a4e0c86a6.tar.gz
solved the problem of not using the right permissions when
preserve_perms is off.
Diffstat (limited to 'generator.c')
-rw-r--r--generator.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/generator.c b/generator.c
index 8afc8f72..5321d8a2 100644
--- a/generator.c
+++ b/generator.c
@@ -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)) {