Provided by: libarchive-dev_3.2.2-3.1ubuntu0.7_amd64 bug

NAME

     archive_entry_acl_add_entry, archive_entry_acl_add_entry_w, archive_entry_acl_clear,
     archive_entry_acl_count, archive_entry_acl_next, archive_entry_acl_next_w,
     archive_entry_acl_reset, archive_entry_acl_text_w — functions for manipulating Access
     Control Lists in archive entry descriptions

LIBRARY

     Streaming Archive Library (libarchive, -larchive)

SYNOPSIS

     #include <archive_entry.h>

     void
     archive_entry_acl_add_entry(struct archive_entry *a, int type, int permset, int tag,
         int qualifier, const char *name);

     void
     archive_entry_acl_add_entry_w(struct archive_entry *a, int type, int permset, int tag,
         int qualifier, const wchar_t *name);

     void
     archive_entry_acl_clear(struct archive_entry *a);

     int
     archive_entry_acl_count(struct archive_entry *a, int type);

     int
     archive_entry_acl_next(struct archive_entry *a, int type, int *ret_type, int *ret_permset,
         int *ret_tag, int *ret_qual, const char **ret_name);

     int
     archive_entry_acl_next_w(struct archive_entry *a, int type, int *ret_type, int *ret_permset,
         int *ret_tag, int *ret_qual, const wchar_t **ret_name);

     int
     archive_entry_acl_reset(struct archive_entry *a, int type);

     const wchar_t *
     archive_entry_acl_text_w(struct archive_entry *a, int flags);

DESCRIPTION

     An “Access Control List” is a generalisation of the classic Unix permission system.  The ACL
     interface of libarchive is derived from the POSIX.1e draft, but restricted to simplify
     dealing with practical implementations in various Operating Systems and archive formats.

     An ACL consists of a number of independent entries.  Each entry specifies the permission set
     as bitmask of basic permissions.  Valid permissions are:
           ARCHIVE_ENTRY_ACL_EXECUTE
           ARCHIVE_ENTRY_ACL_WRITE
           ARCHIVE_ENTRY_ACL_READ
     The permissions correspond to the normal Unix permissions.

     The tag specifies the principal to which the permission applies.  Valid values are:
           ARCHIVE_ENTRY_ACL_USER       The user specified by the name field.
           ARCHIVE_ENTRY_ACL_USER_OBJ   The owner of the file.
           ARCHIVE_ENTRY_ACL_GROUP      The group specied by the name field.
           ARCHIVE_ENTRY_ACL_GROUP_OBJ  The group who owns the file.
           ARCHIVE_ENTRY_ACL_MASK       The maximum permissions to be obtained via group
                                        permissions.
           ARCHIVE_ENTRY_ACL_OTHER      Any principal who doesn't have a user or group entry.
     The principals ARCHIVE_ENTRY_ACL_USER_OBJ, ARCHIVE_ENTRY_ACL_GROUP_OBJ and
     ARCHIVE_ENTRY_ACL_OTHER are equivalent to user, group and other in the classic Unix
     permission model and specify non-extended ACL entries.

     All files have an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS).  This specifies the
     permissions required for access to the file itself.  Directories have an additional ACL
     (ARCHIVE_ENTRY_ACL_TYPE_DEFAULT), which controls the initial access ACL for newly created
     directory entries.

     archive_entry_acl_add_entry() and archive_entry_acl_add_entry_w() add a single ACL entry.
     For the access ACL and non-extended principals, the classic Unix permissions are updated.

     archive_entry_acl_clear() removes all ACL entries and resets the enumeration pointer.

     archive_entry_acl_count() counts the ACL entries that have the given type mask.  type can be
     the bitwise-or of ARCHIVE_ENTRY_ACL_TYPE_ACCESS and ARCHIVE_ENTRY_ACL_TYPE_DEFAULT.  If
     ARCHIVE_ENTRY_ACL_TYPE_ACCESS is included and at least one extended ACL entry is found, the
     three non-extened ACLs are added.

     archive_entry_acl_next() and archive_entry_acl_next_w() return the next entry of the ACL
     list.  This functions may only be called after archive_entry_acl_reset() has indicated the
     presence of extended ACL entries.

     archive_entry_acl_reset() prepare reading the list of ACL entries with
     archive_entry_acl_next() or archive_entry_acl_next_w().  The function returns either 0, if
     no non-extended ACLs are found.  In this case, the access permissions should be obtained by
     archive_entry_mode(3) or set using chmod(2).  Otherwise, the function returns the same value
     as archive_entry_acl_count().

     archive_entry_acl_text_w() converts the ACL entries for the given type mask into a wide
     string.  In addition to the normal type flags, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID and
     ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT can be specified to further customize the result.  The
     returned long string is valid until the next call to archive_entry_acl_clear(),
     archive_entry_acl_add_entry(), archive_entry_acl_add_entry_w() or
     archive_entry_acl_text_w().

RETURN VALUES

     archive_entry_acl_count() and archive_entry_acl_reset() returns the number of ACL entries
     that match the given type mask.  If the type mask includes ARCHIVE_ENTRY_ACL_TYPE_ACCESS and
     at least one extended ACL entry exists, the three classic Unix permissions are counted.

     archive_entry_acl_next() and archive_entry_acl_next_w() return ARCHIVE_OK on success,
     ARCHIVE_EOF if no more ACL entries exist and ARCHIVE_WARN if archive_entry_acl_reset() has
     not been called first.

     archive_entry_text_w() returns a wide string representation of the ACL entrise matching the
     given type mask.  The returned long string is valid until the next call to
     archive_entry_acl_clear(), archive_entry_acl_add_entry(), archive_entry_acl_add_entry_w() or
     archive_entry_acl_text_w().

SEE ALSO

     archive_entry(3) libarchive(3),

BUGS

     ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID and ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT are not
     documented.