changeset 1192:fcb9d43860d6

(make_path): Try to change ownership only if we've just created the directory. Fix latent bug (s/&&/||/ in two places -- also, note that it could not be exercised via install or mkdir) whereby chown would not be invoked when only one of owner/group is not -1.
author Jim Meyering <jim@meyering.net>
date Fri, 02 Jan 1998 23:15:39 +0000
parents 709767510fb4
children d6ec9c17b5b9
files lib/makepath.c
diffstat 1 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lib/makepath.c	Wed Dec 31 11:01:35 1997 +0000
+++ b/lib/makepath.c	Fri Jan 02 23:15:39 1998 +0000
@@ -71,6 +71,16 @@
 # endif
 #endif
 
+#ifndef S_IWUSR
+# define S_IWUSR 0200
+#endif
+
+#ifndef S_IXUSR
+# define S_IXUSR 0100
+#endif
+
+#define WX_USR (S_IWUSR | S_IXUSR)
+
 #ifdef __MSDOS__
 typedef int uid_t;
 typedef int gid_t;
@@ -162,8 +172,8 @@
       /* If leading directories shouldn't be 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 & 0300) != 0300)
-	  || (owner != (uid_t) -1 && group != (gid_t) -1
+      if (((parent_mode & WX_USR) != WX_USR)
+	  || ((owner != (uid_t) -1 || group != (gid_t) -1)
 	      && (parent_mode & 07000) != 0))
 	{
 	  tmp_mode = 0700;
@@ -232,7 +242,8 @@
 	  if (newly_created_dir && verbose_fmt_string != NULL)
 	    fprintf (stderr, verbose_fmt_string, dirpath);
 
-	  if (owner != (uid_t) -1 && group != (gid_t) -1
+	  if (newly_created_dir
+	      && (owner != (uid_t) -1 || group != (gid_t) -1)
 	      && chown (basename_dir, owner, group)
 #if defined(AFS) && defined (EPERM)
 	      && errno != EPERM
@@ -348,7 +359,7 @@
 	     On System V, users can give away files with chown and then not
 	     be able to chmod them.  So don't give files away.  */
 
-	  if (owner != (uid_t) -1 && group != (gid_t) -1
+	  if ((owner != (uid_t) -1 || group != (gid_t) -1)
 	      && chown (dirpath, owner, group)
 #ifdef AFS
 	      && errno != EPERM