Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

chown(1)

setprivgrp(1M)

chmod(2)

setacl(2)

acl(5)

limits(5)

limits(5)

chown(2)

NAME

chown, fchown − change owner and group of a file

SYNOPSIS

#include <unistd.h>

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

int fchown(int fildes, uid_t owner, gid_t group);

DESCRIPTION

chown() changes the user and group ownership of a file.  path points to a path name naming a file.  fildes is a file descriptor.  chown() and fchown() set the owner ID and group ID of the file to the numeric values contained in owner and group respectively.  A value of UID_NO_CHANGE or GID_NO_CHANGE can be specified in owner or group to leave unchanged the file’s owner ID or group ID respectively.  Note that owner and group should be less than UID_MAX (see limits(5)).

Only processes with effective user ID equal to the file owner or a user having appropriate privileges can change the ownership of a file.  If privilege groups are supported, the owner of a file can change the ownership only if he is a member of a privilege group allowing CHOWN, as set up by the setprivgrp command (see setprivgrp(1M)). All users get CHOWN privileges by default. 

The group ownership of a file can be changed to any group in the current process’s access list or to the real or effective group ID of the current process.  If privilege groups are supported and the user is permitted the CHOWN privilege, the file can be given to any group. 

If chown() is invoked on a regular file by other than the super-user the set-user- ID and set-group- ID bits of the file mode are cleared.  Whether chown() preserves or clears these bits on files of other types is implementation dependent. 

Access Control Lists (ACLs)

A user can allow or deny specific individuals and groups access to a file by using the file’s access control list (see acl(5)). When using chown() in conjunction with ACLs, if the new owner and/or group does not have an optional ACL entry corresponding to u.% and/or %.g in the file’s access control list, the file’s access permission bits remain unchanged.  However, if the new owner and/or group is already designated by an optional ACL entry of u.% and/or %.g, chown() sets the file’s permission bits (and the three basic ACL entries) to the permissions contained in that entry. 

ERRORS

chown() fails and the owner and group of the file remain unchanged if one or more of the following is true:

[EBADF] fildes is not a valid file descriptor. 

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

[ENOENT] The file named by path does not exist. 

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

[EPERM] The effective user ID is not a user having appropriate privileges and one or more of the following conditions exist:

The effective user ID does not match the owner of the file. 

When changing the owner of the file, the owner of the file is not a member of a privilege group allowing the CHOWN privilege. 

When changing the group of the file, the owner of the file is not a member of a privilege group allowing the CHOWN privilege and the group number is not in the current process’s access list. 

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

[EFAULT] path points outside the allocated address space of the process.  The reliable detection of this error will be implementation dependent. 

[ENAMETOOLONG]
A component of path exceeds NAME_MAX bytes while _POSIX_NO_TRUNC is in effect, or path exceeds PATH_MAX bytes. 

[ELOOP] Too many symbolic links were encountered in translating path.

[EINVAL] Either owner or group is greater than or equal to UID_MAX. 

DEPENDENCIES

Series 300, 400, and 700:

If the path given to chown() contains a symbolic link as the last element, this link is traversed and pathname resolution continues.  chown() changes the owner and group of the symbolic link’s target, rather than the owner and group of the link. 

HP Clustered Environment:

chown() does not clear the set-user- ID bit of a directory because that bit indicates that the directory is hidden (see cdf(4)).

When chown() is called from a cluster client node, the privilege groups checked are the ones set up on the cluster server. 

RETURN VALUE

Upon successful completion, a value of 0 is returned.  Otherwise, a value of −1 is returned and errno is set to indicate the error. 

WARNINGS

Access Control Lists

Access control list descriptions in this entry apply only to standard HP-UX operating systems.  If HP-UX BLS software has been installed, access control lists are handled differently.  Refer to HP-UX BLS documentation for information about access control lists in the HP-UX BLS environment. 

AUTHOR

chown() was developed by AT&T. 
fchown() was developed by the University of California, Berkeley. 

SEE ALSO

chown(1), setprivgrp(1M), chmod(2), setacl(2), acl(5), limits(5), limits(5). 

STANDARDS CONFORMANCE

chown(): AES [Series 300/400/700 only], SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

fchown(): AES

Hewlett-Packard Company  —  HP-UX Release 9.0: August 1992

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026