diff options
author | Jim Meyering <jim@meyering.net> | 1999-04-26 13:13:00 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1999-04-26 13:13:00 +0000 |
commit | 9afd1dd6927975bf3cfdcfebf21c3d768a0a4825 (patch) | |
tree | 9ea664f28e11ddff2f50ae8288befb86f4f9f510 /lib | |
parent | c1e374291491a893a9cd3f00b6d6aa0ece932ec6 (diff) | |
download | coreutils-9afd1dd6927975bf3cfdcfebf21c3d768a0a4825.tar.xz |
(make_path): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
(S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IRWXU): Define if not defined.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/makepath.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/lib/makepath.c b/lib/makepath.c index 00d42461d..bf6ba3187 100644 --- a/lib/makepath.c +++ b/lib/makepath.c @@ -71,14 +71,29 @@ extern int errno; # endif #endif +#ifndef S_ISUID +# define S_ISUID 04000 +#endif +#ifndef S_ISGID +# define S_ISGID 02000 +#endif +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif +#ifndef S_IRUSR +# define S_IRUSR 0200 +#endif #ifndef S_IWUSR # define S_IWUSR 0200 #endif - #ifndef S_IXUSR # define S_IXUSR 0100 #endif +#ifndef S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif + #define WX_USR (S_IWUSR | S_IXUSR) #if HAVE_LOCALE_H @@ -223,7 +238,7 @@ make_path (const char *argpath, char *dirpath; /* Temporarily relax umask in case it's overly restrictive. */ - int oldmask = umask (0); + mode_t oldmask = umask (0); /* Make a copy of ARGPATH that we can scribble NULs on. */ dirpath = (char *) alloca (strlen (argpath) + 1); @@ -235,9 +250,9 @@ make_path (const char *argpath, their owners, we need to fix their permissions after making them. */ if (((parent_mode & WX_USR) != WX_USR) || ((owner != (uid_t) -1 || group != (gid_t) -1) - && (parent_mode & 07000) != 0)) + && (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0)) { - tmp_mode = 0700; + tmp_mode = S_IRWXU; re_protect = 1; } else @@ -363,7 +378,8 @@ make_path (const char *argpath, retval = 1; } /* chown may have turned off some permission bits we wanted. */ - if ((mode & 07000) != 0 && chmod (basename_dir, mode)) + if ((mode & (S_ISUID | S_ISGID | S_ISVTX)) + && chmod (basename_dir, mode)) { error (0, errno, _("cannot chmod %s"), dirpath); retval = 1; |