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:
@@ -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
@@ -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))
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user