]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(RW_USR): Remove definition.
authorJim Meyering <jim@meyering.net>
Tue, 20 Dec 2005 14:23:20 +0000 (14:23 +0000)
committerJim Meyering <jim@meyering.net>
Tue, 20 Dec 2005 14:23:20 +0000 (14:23 +0000)
(make_dir_parents): Use S_IRWXU, now that read access is also required.

Avoid a race condition, on systems where open honors O_NOFOLLOW.

(make_dir_parents): Include chdir-safer.h.
Use chdir_no_follow in place of chdir.

lib/mkdir-p.c

index 3923fbee10d5acf41ad5783b568f15c197f4c98b..1fd577994615b9447ffa30f49ee8de7bde2db93a 100644 (file)
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
-#include "save-cwd.h"
+#include "chdir-safer.h"
 #include "dirname.h"
 #include "error.h"
 #include "quote.h"
+#include "save-cwd.h"
 #include "stat-macros.h"
 
-#define WX_USR (S_IWUSR | S_IXUSR)
-
 /* Ensure that the directory ARG exists.
 
    Create any leading directories that don't already exist, with
@@ -128,10 +127,10 @@ make_dir_parents (char const *arg,
       strip_trailing_slashes (dir);
       full_dir = dir;
 
-      /* If leading directories shouldn't be writable or executable,
+      /* If leading directories shouldn't be readable, writable or executable,
         or should have set[ug]id or sticky bits set and we are setting
         their owners, we need to fix their permissions after making them.  */
-      if (((parent_mode & WX_USR) != WX_USR)
+      if (((parent_mode & S_IRWXU) != S_IRWXU)
          || ((owner != (uid_t) -1 || group != (gid_t) -1)
              && (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0))
        {
@@ -223,7 +222,7 @@ make_dir_parents (char const *arg,
             mkdir process O(n^2) file name components.  */
          if (do_chdir)
            {
-             if (chdir (basename_dir) == 0)
+             if (chdir_no_follow (basename_dir) == 0)
                dir_known_to_exist = true;
              else if (dir_known_to_exist)
                {