HPUX cpacl[3c]






 cpacl(3C)                                                         cpacl(3C)





 NAME
      cpacl(), fcpacl() - copy the access control list (ACL) and mode bits
      from one file to another

 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() and fcpacl() 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() and fcpacl() take the following parameters:

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

           o  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.

           o  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



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






 cpacl(3C)                                                         cpacl(3C)





              getegid() - see geteuid(2) and getegid(2).)

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

      cpacl() (fcpacl()) handles remote copying (via NFS) after recognizing
      failures of getacl() (fgetacl()) or setacl() (fsetacl()) (see
      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 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 setacl() (fsetacl()) on a local tofile (tofd).
           As a consequence, the file's optional ACL entries are deleted,
           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, 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.




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






 cpacl(3C)                                                         cpacl(3C)





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

           struct stat statbuf;

           if (stat ("oldfile", & statbuf) <
                error (...);

           if (cpacl ("oldfile", newfile , statbuf.st_mode,
                statbuf.st_uid, statbuf.st_gid, geteuid(), getegid()) < 0)
           {
                error (...);
           }

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

 SEE ALSO
      chown(2), getacl(2), getegid(2), geteuid(2), setacl(2), stat(2).
      acltostr(3C), chownacl(3C), setentry(3C), strtoacl(3C), acl(5).


































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