Fix user permissions of copied directories.
authorMatt Kraai <kraai@debian.org>
Mon, 30 Apr 2001 17:32:43 +0000 (17:32 -0000)
committerMatt Kraai <kraai@debian.org>
Mon, 30 Apr 2001 17:32:43 +0000 (17:32 -0000)
libbb/copy_file.c

index b2750ccf868fbc45bdb8eaaa6df0952bc90f80a2..2d18b6087afd1ddb3f8194dd442523f62252c9fe 100644 (file)
@@ -64,6 +64,7 @@ int copy_file(const char *source, const char *dest, int flags)
        if (S_ISDIR(source_stat.st_mode)) {
                DIR *dp;
                struct dirent *d;
+               mode_t saved_umask = 0;
 
                if (!(flags & FILEUTILS_RECUR)) {
                        error_msg("%s: omitting directory", source);
@@ -77,7 +78,7 @@ int copy_file(const char *source, const char *dest, int flags)
                                return -1;
                        }
                } else {
-                       mode_t mode, saved_umask;
+                       mode_t mode;
                        saved_umask = umask(0);
 
                        mode = source_stat.st_mode;
@@ -122,6 +123,12 @@ int copy_file(const char *source, const char *dest, int flags)
                        perror_msg("unable to close directory `%s'", source);
                        status = -1;
                }
+
+               if (!dest_exists &&
+                               chmod(dest, source_stat.st_mode & ~saved_umask) < 0) {
+                       perror_msg("unable to change permissions of `%s'", dest);
+                       status = -1;
+               }
        } else if (S_ISREG(source_stat.st_mode)) {
                FILE *sfp, *dfp;