From: Paul Eggert Date: Mon, 9 Aug 2004 23:33:53 +0000 (+0000) Subject: (rpl_chown): Work even if the file is writeable but not readable. X-Git-Tag: v5.3.0~821 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ff6d6ea07aeaf30ba24cded76d426d233185d78;p=thirdparty%2Fcoreutils.git (rpl_chown): Work even if the file is writeable but not readable. --- diff --git a/lib/chown.c b/lib/chown.c index d761c73399..2b6b29d461 100644 --- a/lib/chown.c +++ b/lib/chown.c @@ -68,10 +68,11 @@ rpl_chown (const char *file, uid_t uid, gid_t gid) /* Handle the case in which the system-supplied chown function does *not* follow symlinks. Instead, it changes permissions on the symlink itself. To work around that, we open the - file (but this can fail due to lack of read permission) and + file (but this can fail due to lack of read or write permission) and use fchown on the resulting descriptor. */ int fd = open (file, O_RDONLY | O_NONBLOCK | O_NOCTTY); - if (fd == -1) + if (fd < 0 + && (fd = open (file, O_WRONLY | O_NONBLOCK | O_NOCTTY)) < 0) return -1; if (fchown (fd, uid, gid)) {