1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-12 06:57:33 +02:00

When chown or chgrp is modifying the referent of a symlink,

use the chown(2) function, if possible.

(change_file_owner): Don't hard-code the
open/fchown/close kludge here.  Use `chown' instead.
The chown function works just fine on conforming systems.
Other systems now go through the new chown wrapper that
resorts to the old kludge.
This commit is contained in:
Jim Meyering
2004-05-01 14:33:41 +00:00
parent afef52af2f
commit 83db4e147a

View File

@@ -224,22 +224,9 @@ change_file_owner (FTS *fts, FTSENT *ent,
if (chopt->affect_symlink_referent)
{
/* Applying chown to a symlink and expecting it to affect
the referent is not portable. So instead, open the
file and use fchown on the resulting descriptor. */
/* FIXME: but on some systems (e.g. Linux-2.1.81 and newer),
using chown is much better, since it *does* follow
symlinks, and the open/fchown approach fails when
the file is not readable. This looks like a fine case
for another chown wrapper. In any case, this code can
clobber errno, so fix it or remove it.
Related: with a proper autoconf test -- is this possible,
without root permissions or a guarantee of more than
one group? -- the lchown wrapper may just end up
calling chown on some systems. */
int fd = open (file, O_RDONLY | O_NONBLOCK | O_NOCTTY);
fail = (fd == -1 ? 1 : fchown (fd, new_uid, new_gid));
if (fd != -1)
close (fd);
the referent is not portable, but here we may be using a
wrapper that tries to correct for unconforming chown. */
fail = chown (file, new_uid, new_gid);
}
else
{