The Samba-Bugzilla – Attachment 1756 Details for
Bug 3549
rsync applies umask to some directories even when a default ACL takes effect
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Uses a new function do_mkdir_defmode to create some directories
do_mkdir_defmode.diff (text/plain), 4.78 KB, created by
Matt McCutchen
on 2006-02-23 18:59:34 UTC
(
hide
)
Description:
Uses a new function do_mkdir_defmode to create some directories
Filename:
MIME Type:
Creator:
Matt McCutchen
Created:
2006-02-23 18:59:34 UTC
Size:
4.78 KB
patch
obsolete
>Index: backup.c >=================================================================== >RCS file: /cvsroot/rsync/backup.c,v >retrieving revision 1.52 >diff -u -r1.52 backup.c >--- backup.c 30 Jan 2006 07:18:03 -0000 1.52 >+++ backup.c 23 Feb 2006 23:42:33 -0000 >@@ -112,7 +112,7 @@ > } > if (*p == '/') { > *p = '\0'; >- if (do_mkdir(fullpath, 0777 & ~orig_umask) == 0) >+ if (do_mkdir_defmode(fullpath) == 0) > break; > if (errno != ENOENT) { > rsyserr(FERROR, errno, >@@ -141,7 +141,7 @@ > p += strlen(p); > if (p == end) > break; >- if (do_mkdir(fullpath, 0777 & ~orig_umask) < 0) { >+ if (do_mkdir_defmode(fullpath) < 0) { > rsyserr(FERROR, errno, "make_bak_dir mkdir %s failed", > full_fname(fullpath)); > goto failure; >Index: generator.c >=================================================================== >RCS file: /cvsroot/rsync/generator.c,v >retrieving revision 1.261 >diff -u -r1.261 generator.c >--- generator.c 23 Feb 2006 20:29:55 -0000 1.261 >+++ generator.c 23 Feb 2006 23:42:34 -0000 >@@ -834,7 +834,7 @@ > char *dn = file->dirname ? file->dirname : "."; > if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) { > if (relative_paths && !implied_dirs && stat(dn, &st) < 0 >- && create_directory_path(fname, orig_umask) < 0) { >+ && create_directory_path(fname) < 0) { > rsyserr(FERROR, errno, > "recv_generator: mkdir %s failed", > full_fname(dn)); >@@ -896,7 +896,7 @@ > } > if (statret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) { > if (!relative_paths || errno != ENOENT >- || create_directory_path(fname, orig_umask) < 0 >+ || create_directory_path(fname) < 0 > || (do_mkdir(fname, file->mode) < 0 && errno != EEXIST)) { > rsyserr(FERROR, errno, > "recv_generator: mkdir %s failed", >Index: main.c >=================================================================== >RCS file: /cvsroot/rsync/main.c,v >retrieving revision 1.296 >diff -u -r1.296 main.c >--- main.c 23 Feb 2006 00:38:34 -0000 1.296 >+++ main.c 23 Feb 2006 23:42:35 -0000 >@@ -491,13 +491,11 @@ > if (cp && !cp[1]) > *cp = '\0'; > >- umask(orig_umask); >- if (do_mkdir(dest_path, 0777) != 0) { >+ if (do_mkdir_defmode(dest_path) != 0) { > rsyserr(FERROR, errno, "mkdir %s failed", > full_fname(dest_path)); > exit_cleanup(RERR_FILEIO); > } >- umask(0); > > if (verbose) > rprintf(FINFO, "created directory %s\n", dest_path); >Index: proto.h >=================================================================== >RCS file: /cvsroot/rsync/proto.h,v >retrieving revision 1.297 >diff -u -r1.297 proto.h >--- proto.h 20 Feb 2006 17:15:06 -0000 1.297 >+++ proto.h 23 Feb 2006 23:42:35 -0000 >@@ -280,7 +280,8 @@ > void out_of_memory(char *str); > void overflow_exit(char *str); > int set_modtime(char *fname, time_t modtime, mode_t mode); >-int create_directory_path(char *fname, int base_umask); >+int do_mkdir_defmode(char *fname); >+int create_directory_path(char *fname); > int full_write(int desc, char *ptr, size_t len); > int copy_file(const char *source, const char *dest, mode_t mode); > int robust_unlink(const char *fname); >Index: receiver.c >=================================================================== >RCS file: /cvsroot/rsync/receiver.c,v >retrieving revision 1.171 >diff -u -r1.171 receiver.c >--- receiver.c 7 Feb 2006 18:15:51 -0000 1.171 >+++ receiver.c 23 Feb 2006 23:42:35 -0000 >@@ -580,7 +580,7 @@ > * because their information should have been previously > * transferred, but that may not be the case with -R */ > if (fd2 == -1 && relative_paths && errno == ENOENT >- && create_directory_path(fnametmp, orig_umask) == 0) { >+ && create_directory_path(fnametmp) == 0) { > /* Get back to name with XXXXXX in it. */ > get_tmpname(fnametmp, fname); > fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS); >Index: util.c >=================================================================== >RCS file: /cvsroot/rsync/util.c,v >retrieving revision 1.196 >diff -u -r1.196 util.c >--- util.c 8 Feb 2006 16:52:51 -0000 1.196 >+++ util.c 23 Feb 2006 23:42:36 -0000 >@@ -33,6 +33,7 @@ > extern int modify_window; > extern int relative_paths; > extern int human_readable; >+extern int orig_umask; > extern char *partial_dir; > extern struct filter_list_struct server_filter_list; > >@@ -169,12 +170,21 @@ > } > } > >+int do_mkdir_defmode(char *fname) >+{ >+ int result; >+ umask(orig_umask); >+ result = do_mkdir(fname, 0777); >+ umask(0); >+ return result; >+} >+ > /** > Create any necessary directories in fname. Unfortunately we don't know > what perms to give the directory when this is called so we need to rely > on the umask > **/ >-int create_directory_path(char *fname, int base_umask) >+int create_directory_path(char *fname) > { > char *p; > >@@ -186,7 +196,7 @@ > p = fname; > while ((p = strchr(p,'/')) != NULL) { > *p = 0; >- do_mkdir(fname, 0777 & ~base_umask); >+ do_mkdir_defmode(fname); > *p = '/'; > p++; > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 3549
: 1756