1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-05-30 22:36:31 +02:00

* src/copy.c (copy_internal): Don't pass mkdir a mode greater than

7777.  This matches historical 'cp' behavior and avoids some
(though not all) implementation-defined behavior of mkdir.
* src/cp.c (make_dir_parents_private): Likewise.
* src/copy.c (copy_internal): Don't pass 'open' a mode greater
than 777.  This is required by POSIX.  It doesn't make any difference
in actual behavior on any host that I know of.
This commit is contained in:
Paul Eggert
2006-10-18 20:56:38 +00:00
parent f594f1fb38
commit 11cf1d39f2
3 changed files with 25 additions and 5 deletions
+10
View File
@@ -1,3 +1,13 @@
2006-10-18 Paul Eggert <eggert@cs.ucla.edu>
* src/copy.c (copy_internal): Don't pass mkdir a mode greater than
7777. This matches historical 'cp' behavior and avoids some
(though not all) implementation-defined behavior of mkdir.
* src/cp.c (make_dir_parents_private): Likewise.
* src/copy.c (copy_internal): Don't pass 'open' a mode greater
than 777. This is required by POSIX. It doesn't make any difference
in actual behavior on any host that I know of.
2006-10-17 Jim Meyering <jim@meyering.net>
* src/dd.c (usage): Use two spaces (not one) to separate the
+10 -4
View File
@@ -1505,7 +1505,11 @@ copy_internal (char const *src_name, char const *dst_name,
if (new_dst || !S_ISDIR (dst_sb.st_mode))
{
if (mkdir (dst_name, src_mode) != 0)
/* POSIX says mkdir's behavior is implementation-defined when
(src_mode & ~S_IRWXUGO) != 0. However, common practice is
to ask mkdir to copy all the CHMOD_MODE_BITS, letting mkdir
decide what to do with S_ISUID | S_ISGID | S_ISVTX. */
if (mkdir (dst_name, src_mode & CHMOD_MODE_BITS) != 0)
{
error (0, errno, _("cannot create directory %s"),
quote (dst_name));
@@ -1628,9 +1632,11 @@ copy_internal (char const *src_name, char const *dst_name,
{
copied_as_regular = true;
/* POSIX says the permission bits of the source file must be
used as the 3rd argument in the open call, but that's not consistent
with historical practice. */
if (! copy_reg (src_name, dst_name, x, src_mode, &new_dst, &src_sb))
used as the 3rd argument in the open call. Historical
practice passed all the source mode bits to 'open', but the extra
bits were ignored, so it should be the same either way. */
if (! copy_reg (src_name, dst_name, x, src_mode & S_IRWXUGO,
&new_dst, &src_sb))
goto un_backup;
}
else if (S_ISFIFO (src_type))
+5 -1
View File
@@ -428,7 +428,11 @@ make_dir_parents_private (char const *const_dir, size_t src_offset,
}
src_mode = stats.st_mode;
if (mkdir (dir, src_mode))
/* POSIX says mkdir's behavior is implementation-defined when
(src_mode & ~S_IRWXUGO) != 0. However, common practice is
to ask mkdir to copy all the CHMOD_MODE_BITS, letting mkdir
decide what to do with S_ISUID | S_ISGID | S_ISVTX. */
if (mkdir (dir, src_mode & CHMOD_MODE_BITS) != 0)
{
error (0, errno, _("cannot make directory %s"),
quote (dir));