From 53d01ff8f4497ce0b9f1da5becdcffa22c13ea7a Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 26 Apr 2000 12:36:43 +0000 Subject: [PATCH] (S_IRWXUGO): Define. (make_path): Always perform explicit chmod if MODE specifies any of the `special' permission bits. --- lib/makepath.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/makepath.c b/lib/makepath.c index bf3528eb4f..ea1b407317 100644 --- a/lib/makepath.c +++ b/lib/makepath.c @@ -1,5 +1,5 @@ /* makepath.c -- Ensure that a directory path exists. - Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1990, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,6 +50,10 @@ char *alloca (); # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + #if STDC_HEADERS # include #endif @@ -380,13 +384,17 @@ make_path (const char *argpath, error (0, errno, _("cannot chown %s"), dirpath); retval = 1; } - /* chown may have turned off some permission bits we wanted. */ - if ((mode & (S_ISUID | S_ISGID | S_ISVTX)) - && chmod (basename_dir, mode)) - { - error (0, errno, _("cannot chmod %s"), dirpath); - retval = 1; - } + } + + /* The above chown may have turned off some permission bits in MODE. + Another reason we may have to use chmod here is that mkdir(2) is + required to honor only the file permission bits. In particular, + it may not have honored the `special' bits. */ + if ((mode & ~S_IRWXUGO) + && chmod (basename_dir, mode)) + { + error (0, errno, _("cannot chmod %s"), dirpath); + retval = 1; } CLEANUP_CWD; -- 2.30.2