Thanks.
I've just fixed that bug.
Here's the patch relative to the latest test release
(ftp://alpha.gnu.org/gnu/fetish/fileutils-4.0q.tar.gz):
* makepath.c (S_IRWXUGO): Define.
(make_path): Always perform explicit chmod if MODE specifies any
of the `special' permission bits.
Index: makepath.c
===================================================================
RCS file: /fetish/fileutils/lib/makepath.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- makepath.c 1999/12/13 07:30:57 1.41
+++ makepath.c 2000/04/26 12:36:43 1.42
@@ -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 @@
# 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 <stdlib.h>
#endif
@@ -379,14 +383,18 @@
{
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;