chown

NAME

chown, fchown, lchown - change ownership of a file

SYNOPSIS

#include <sys/types.h>
#include <unistd.h> I int chown(const char * path , uid_t owner , gid_t group );
I int fchown(int fd , uid_t owner , gid_t group );
I int lchown(const char * path , uid_t owner , gid_t group );

DESCRIPTION

These system calls change the owner and group of the file specified by path or by R fd . Only a privileged process (Linux: one with the CAP_CHOWN capability) 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. A privileged process (Linux: with R CAP_CHOWN ) 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-superuser, the S_ISUID and S_ISGID mode bits are cleared. POSIX does not specify whether this also should happen when root does the R chown (); the Linux behavior 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 R 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 R chown () are listed below.
EACCES
Search permission is denied on a component of the path prefix. (See also path_resolution(7).)
EFAULT
path points outside your accessible address space.
ELOOP
Too many symbolic links were encountered in resolving R path .
ENAMETOOLONG
path is too long.
ENOENT
The file does not exist.
ENOMEM
Insufficient kernel memory was available.
ENOTDIR
A component of the path prefix is not a directory.
EPERM
The calling process did not have the required permissions (see above) to change owner and/or group.
EROFS
The named file resides on a read-only file system.
The general errors for R fchown () are listed below:
EBADF
The descriptor is not valid.
EIO
A low-level I/O error occurred while modifying the inode.
ENOENT
See above.
EPERM
See above.
EROFS
See above.

CONFORMING TO

4.4BSD, SVr4, POSIX.1-2001. The 4.4BSD version can only be used by the superuser (that is, ordinary users cannot give away files).

NOTES

The R chown () semantics are deliberately violated on NFS file systems which have UID mapping enabled. Additionally, the semantics of all system calls which access the file contents are violated, because R chown () may cause immediate access revocation on already open files. Client side caching may lead to a delay between the time where 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. In versions of Linux prior to 2.1.81 (and distinct from 2.1.46), R chown () did not follow symbolic links. Since Linux 2.1.81, R chown () does follow symbolic links, and there is a new system call R lchown () that does not follow symbolic links. Since Linux 2.1.86, this new call (that has the same semantics as the old R chown ()) has got the same syscall number, and R chown () got the newly introduced number.
The prototype for R fchown () is only available if _BSD_SOURCE is defined.

SEE ALSO