X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fchown.c;h=2b6b29d461d807eb29e738ee42cfd5c05ea346e2;hb=1caf9135115db922238f1a9e9e52759e251454a3;hp=d761c73399ec2a9c7f9787c7a17915d07e4ea870;hpb=a62be9f4039b4499cfbb76e394cad2259d03fa84;p=gnulib.git diff --git a/lib/chown.c b/lib/chown.c index d761c7339..2b6b29d46 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)) {