From 83db4e147a59e082edfc4f8a511b6b1304a90821 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sat, 1 May 2004 14:33:41 +0000 Subject: 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. --- src/chown-core.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) (limited to 'src/chown-core.c') diff --git a/src/chown-core.c b/src/chown-core.c index 821adfe76..82fb4de0f 100644 --- a/src/chown-core.c +++ b/src/chown-core.c @@ -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 { -- cgit v1.2.3-54-g00ecf