chown, fchown, lchown - change ownership of a file


SYNOPSIS

       #include <sys/types.h>
       #include <unistd.h>

       int chown(const char *path, uid_t owner, gid_t group);
       int fchown(int fd, uid_t owner, gid_t group);
       int lchown(const char *path, uid_t owner, gid_t group);


DESCRIPTION

       The  owner  of  the  file  specified  by  path or by fd is
       changed.  Only the super-user may change the  owner  of  a
       file.   The  owner  of  a file may change the group of the
       file to any group of which that owner is  a  member.   The
       super-user may change the group arbitrarily.

       If  the owner or group is specified as -1, then that ID is
       not changed.

       When the owner or group of an executable file are  changed
       by a non-super-user, the S_ISUID and S_ISGID mode bits are
       cleared. POSIX does not specify whether this  also  should
       happen  when  root  does  the  chown;  the Linux behaviour
       depends on the kernel version.  In case  of  a  non-group-
       executable  file  (with clear S_IXGRP bit) the S_ISGID bit
       indicates mandatory locking,  and  is  not  cleared  by  a
       chown.



RETURN VALUE

       On  success,  zero is returned.  On error, -1 is returned,
       and errno is set appropriately.


ERRORS

       Depending  on  the  file  system,  other  errors  can   be
       returned.   The  more  general errors for chown are listed
       below:


       EPERM  The effective UID does not match the owner  of  the
              file,  and  is not zero; or the owner or group were
              specified incorrectly.

       EROFS  The named file resides on a read-only file  system.

       EFAULT path  points outside your accessible address space.

       ENAMETOOLONG
              path is too long.

       ENOENT The file does not exist.

       ENOTDIR
              A component of the path prefix is not a  directory.

       EACCES Search  permission  is denied on a component of the
              path prefix.

       ELOOP  Too many symbolic links were encountered in resolv­
              ing path.

       The general errors for fchown are listed below:

       EBADF  The descriptor is not valid.

       ENOENT See above.

       EPERM  See above.

       EROFS  See above.

       EIO    A  low-level I/O error occurred while modifying the
              inode.


NOTES

       In versions of Linux prior to 2.1.81  (and  distinct  from
       2.1.46), chown did not follow symbolic links.  Since Linux
       2.1.81, chown does follow symbolic links, and there  is  a
       new  system  call  lchown  that  does  not follow symbolic
       links.  Since Linux 2.1.86, this new call  (that  has  the
       same  semantics as the old chown) has got the same syscall
       number, and chown got the newly introduced number.

       The prototype for fchown is only available if  _BSD_SOURCE
       is defined.


CONFORMING TO

       The chown call conforms to SVr4, SVID, POSIX, X/OPEN.  The
       4.4BSD version can only be used by the superuser (that is,
       ordinary  users  cannot  give away files).  SVr4 documents
       EINVAL, EINTR,  ENOLINK  and  EMULTIHOP  returns,  but  no
       ENOMEM.   POSIX.1  does not document ENOMEM or ELOOP error
       conditions.

       The fchown call conforms to 4.4BSD and SVr4.   SVr4  docu­
       ments  additional  EINVAL,  EIO,  EINTR, and ENOLINK error
       conditions.


RESTRICTIONS

       The chown() semantics are  deliberately  violated  on  NFS
       file  systems  which  have UID mapping enabled.  Addition­
       ally, the semantics of all system calls which  access  the
       file  contents  are  violated,  because  chown() may cause
       ownership have been changed to allow access for a user and
       the  time  where  the file can actually be accessed by the
       user on other clients.


SEE ALSO

       chmod(2), flock(2)