Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > C

cpacl(3C)

HP-UX 11i Version 3: February 2007
» 

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index

NAME

cpacl(), fcpacl() — copy the access control list (ACL) and mode bits from one file to another (HFS and JFS File Systems only)

SYNOPSIS

#include <acllib.h>

int cpacl( const char *fromfile, const char *tofile, mode_t frommode, uid_t fromuid, gid_t fromgid, uid_t touid, gid_t togid );

int fcpacl( int fromfd, int tofd, mode_t frommode, uid_t fromuid, gid_t fromgid, uid_t touid, gid_t togid );

Remarks

To ensure continued conformance with emerging industry standards, features described in this manual entry are likely to change in a future release.

DESCRIPTION

Both cpacl() (HFS and JFS file systems) and fcpacl() (HFS file systems only) copy the access control list and mode bits (that is, file access permission bits and miscellaneous mode bits; see chmod(2)) from one file to another, and transfer ownership much like chown(2).

cpacl() can only copy HFS ACLs to other HFS files and JFS ACLS to other JFS files; it does not covert HFS ACLs to JFS ACLs or vice versa. cpacl() and fcpacl() take the following parameters:

  • Path names (fromfile and tofile) or open file descriptors (fromfd and tofd).

  • A mode value (frommode, typically the st_mode value returned by stat() - see stat(2)) containing file miscellaneous mode bits which are always copied, and file access permission bits which are copied instead of the access control list if either file is remote.

  • User ID and group ID of the file (fromuid, touid and fromgid, togid) for transferring ownership. (Typically fromuid and fromgid are the st_uid and st_gid values returned by stat(), and touid and togid are the return values from geteuid() and getegid() - see geteuid(2) and getegid(2) in getuid(2)).

When both files are local, the cpacl() routines copy the access control list and call chownacl() (HFS only; see chownacl(3C)) to transfer ownership from the fromfile to the tofile, if necessary.

cpacl() (fcpacl()) handles remote copying (via NFS) and copying from HFS to JFS or vice versa after recognizing failures of acl(), getacl() (fgetacl()) or setacl() (fsetacl()) (see acl(2) and setacl(2)). When copying the mode from fromfile (fromfd) to tofile (tofd), cpacl() copies the entire frommode (that is, the file miscellaneous mode bits and the file access permission bits) to tofile (tofd) using chmod() (fchmod()). Some of the miscellaneous mode bits can be turned off; see chmod(2).

cpacl() (fcpacl()) can copy an access control list from fromfile (fromfd) to tofile (tofd) without transferring ownership, but ensuring error checking and handling of remote files. This is done by passing fromuid equal to touid and fromgid equal to togid (that is, four zeros). For remote files, fromuid, touid, fromgid, and togid are ignored.

RETURN VALUE

If successful, cpacl() and fcpacl() return zero. If an error occurs, they set errno to indicate the cause of failure and return a negative value, as follows:

-1

Unable to perform acl() or getacl() (fgetacl()) on a local fromfile (fromfd).

-2

Unable to perform chmod() (fchmod()) on tofile (tofd) to set its file miscellaneous mode bits. cpacl() (fcpacl()) attempts this regardless of whether a file is local or remote, as long as fromfile (fromfd) is local.

-3

Unable to perform acl() or setacl() (fsetacl()) on a local tofile (tofd). As a consequence, the file's optional ACL entries are deleted (HFS only), its file access permission bits are zeroed, and its miscellaneous mode bits might be altered.

-4

Unable to perform chmod() (fchmod()) on tofile (tofd) to set its mode. As a consequence, if fromfile (fromfd) is local, tofile's (tofd's) optional ACL entries are deleted (HFS only), its access permission bits are zeroed, and its file miscellaneous mode bits might be altered, regardless of whether the file is local or remote.

EXAMPLES

The following code fragment gets stat information on oldfile and copies its file miscellaneous bits and access control list to newfile owned by the caller. If either file is remote, only the st_mode on oldfile is copied.

#include <sys/types.h> #include <sys/stat.h> struct stat statbuf; if (stat ("oldfile", & statbuf) < 0) error (...); if (cpacl ("oldfile", newfile , statbuf.st_mode, statbuf.st_uid, statbuf.st_gid, geteuid(), getegid()) < 0) { error (...); }

DEPENDENCIES

cpacl() and fcpacl() are only supported on HFS and JFS file systems on standard HP-UX operating systems.

AUTHOR

cpacl() and fcpacl() were developed by HP.

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.