Blame libarchive/archive_entry_acl.3

Packit 08bd4c
.\" Copyright (c) 2010 Joerg Sonnenberger
Packit 08bd4c
.\" Copyright (c) 2016 Martin Matuska
Packit 08bd4c
.\" All rights reserved.
Packit 08bd4c
.\"
Packit 08bd4c
.\" Redistribution and use in source and binary forms, with or without
Packit 08bd4c
.\" modification, are permitted provided that the following conditions
Packit 08bd4c
.\" are met:
Packit 08bd4c
.\" 1. Redistributions of source code must retain the above copyright
Packit 08bd4c
.\"    notice, this list of conditions and the following disclaimer.
Packit 08bd4c
.\" 2. Redistributions in binary form must reproduce the above copyright
Packit 08bd4c
.\"    notice, this list of conditions and the following disclaimer in the
Packit 08bd4c
.\"    documentation and/or other materials provided with the distribution.
Packit 08bd4c
.\"
Packit 08bd4c
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
Packit 08bd4c
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 08bd4c
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit 08bd4c
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
Packit 08bd4c
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 08bd4c
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit 08bd4c
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit 08bd4c
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit 08bd4c
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit 08bd4c
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit 08bd4c
.\" SUCH DAMAGE.
Packit 08bd4c
.\"
Packit 08bd4c
.Dd February 15, 2017
Packit 08bd4c
.Dt ARCHIVE_ENTRY_ACL 3
Packit 08bd4c
.Os
Packit 08bd4c
.Sh NAME
Packit 08bd4c
.Nm archive_entry_acl_add_entry ,
Packit 08bd4c
.Nm archive_entry_acl_add_entry_w ,
Packit 08bd4c
.Nm archive_entry_acl_clear ,
Packit 08bd4c
.Nm archive_entry_acl_count ,
Packit 08bd4c
.Nm archive_entry_acl_from_text ,
Packit 08bd4c
.Nm archive_entry_acl_from_text_w ,
Packit 08bd4c
.Nm archive_entry_acl_next ,
Packit 08bd4c
.Nm archive_entry_acl_next_w ,
Packit 08bd4c
.Nm archive_entry_acl_reset ,
Packit 08bd4c
.Nm archive_entry_acl_to_text ,
Packit 08bd4c
.Nm archive_entry_acl_to_text_w ,
Packit 08bd4c
.Nm archive_entry_acl_types
Packit 08bd4c
.Nd functions for manipulating Access Control Lists in archive entry descriptions
Packit 08bd4c
.Sh LIBRARY
Packit 08bd4c
Streaming Archive Library (libarchive, -larchive)
Packit 08bd4c
.Sh SYNOPSIS
Packit 08bd4c
.In archive_entry.h
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fo archive_entry_acl_add_entry
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "int type"
Packit 08bd4c
.Fa "int permset"
Packit 08bd4c
.Fa "int tag"
Packit 08bd4c
.Fa "int qualifier"
Packit 08bd4c
.Fa "const char *name"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fo archive_entry_acl_add_entry_w
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "int type"
Packit 08bd4c
.Fa "int permset"
Packit 08bd4c
.Fa "int tag"
Packit 08bd4c
.Fa "int qualifier"
Packit 08bd4c
.Fa "const wchar_t *name"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_acl_clear "struct archive_entry *a"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_entry_acl_count "struct archive_entry *a" "int type"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_entry_acl_from_text
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "const char *text"
Packit 08bd4c
.Fa "int type"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_entry_acl_from_text_w
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "const wchar_t *text"
Packit 08bd4c
.Fa "int type"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_entry_acl_next
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "int type"
Packit 08bd4c
.Fa "int *ret_type"
Packit 08bd4c
.Fa "int *ret_permset"
Packit 08bd4c
.Fa "int *ret_tag"
Packit 08bd4c
.Fa "int *ret_qual"
Packit 08bd4c
.Fa "const char **ret_name"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_entry_acl_next_w
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "int type"
Packit 08bd4c
.Fa "int *ret_type"
Packit 08bd4c
.Fa "int *ret_permset"
Packit 08bd4c
.Fa "int *ret_tag"
Packit 08bd4c
.Fa "int *ret_qual"
Packit 08bd4c
.Fa "const wchar_t **ret_name"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_entry_acl_reset "struct archive_entry *a" "int type"
Packit 08bd4c
.Ft char *
Packit 08bd4c
.Fo archive_entry_acl_to_text
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "ssize_t *len_p"
Packit 08bd4c
.Fa "int flags"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft wchar_t *
Packit 08bd4c
.Fo archive_entry_acl_to_text_w
Packit 08bd4c
.Fa "struct archive_entry *a"
Packit 08bd4c
.Fa "ssize_t *len_p"
Packit 08bd4c
.Fa "int flags"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_entry_acl_types "struct archive_entry *a"
Packit 08bd4c
.\" enum?
Packit 08bd4c
.Sh DESCRIPTION
Packit 08bd4c
The
Packit 08bd4c
.Dq Access Control Lists (ACLs)
Packit 08bd4c
extend the standard Unix perssion model.
Packit 08bd4c
The ACL interface of
Packit 08bd4c
.Nm libarchive
Packit 08bd4c
supports both POSIX.1e and NFSv4 style ACLs. Use of ACLs is restricted by
Packit 08bd4c
various levels of ACL support in operating systems, file systems and archive
Packit 08bd4c
formats.
Packit 08bd4c
.Ss POSIX.1e Access Control Lists
Packit 08bd4c
A POSIX.1e ACL consists of a number of independent entries.
Packit 08bd4c
Each entry specifies the permission set as bitmask of basic permissions.
Packit 08bd4c
Valid permissions in the
Packit 08bd4c
.Fa permset
Packit 08bd4c
are:
Packit 08bd4c
.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_EXECUTE"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_READ ( Sy r )
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_WRITE ( Sy w )
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_EXECUTE ( Sy x )
Packit 08bd4c
.El
Packit 08bd4c
The permissions correspond to the normal Unix permissions.
Packit 08bd4c
.Pp
Packit 08bd4c
The
Packit 08bd4c
.Fa tag
Packit 08bd4c
specifies the principal to which the permission applies.
Packit 08bd4c
Valid values are:
Packit 08bd4c
.Bl -hang -offset indent -compact -width "ARCHIVE_ENTRY_ACL_GROUP_OBJ"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_USER
Packit 08bd4c
The user specified by the name field.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_USER_OBJ
Packit 08bd4c
The owner of the file.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_GROUP
Packit 08bd4c
The group specied by the name field.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
Packit 08bd4c
The group who owns the file.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_MASK
Packit 08bd4c
The maximum permissions to be obtained via group permissions.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_OTHER
Packit 08bd4c
Any principal who is not file owner or a member of the owning group.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
The principals
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_USER_OBJ ,
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
Packit 08bd4c
and
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_OTHER
Packit 08bd4c
are equivalent to user, group and other in the classic Unix permission
Packit 08bd4c
model and specify non-extended ACL entries.
Packit 08bd4c
.Pp
Packit 08bd4c
All files with have an access ACL
Packit 08bd4c
.Pq Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS .
Packit 08bd4c
This specifies the permissions required for access to the file itself.
Packit 08bd4c
Directories have an additional ACL
Packit 08bd4c
.Pq Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT ,
Packit 08bd4c
which controls the initial access ACL for newly created directory entries.
Packit 08bd4c
.Ss NFSv4 Access Control Lists
Packit 08bd4c
A NFSv4 ACL consists of multiple individual entries called Access Control
Packit 08bd4c
Entries (ACEs).
Packit 08bd4c
.Pp
Packit 08bd4c
There are four possible types of a NFSv4 ACE:
Packit 08bd4c
.Bl -hang -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYE_ALLOW"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALLOW
Packit 08bd4c
Allow principal to perform actions requiring given permissions.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_DENY
Packit 08bd4c
Prevent principal from performing actions requiring given permissions.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_AUDIT
Packit 08bd4c
Log access attempts by principal which require given permissions.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALARM
Packit 08bd4c
Trigger a system alarm on access attempts by principal which require given
Packit 08bd4c
permissions.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
The
Packit 08bd4c
.Fa tag
Packit 08bd4c
specifies the principal to which the permission applies.
Packit 08bd4c
Valid values are:
Packit 08bd4c
.Bl -hang -offset indent -compact -width "ARCHIVE_ENTRY_ACL_GROUP_OBJ"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_USER
Packit 08bd4c
The user specified by the name field.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_USER_OBJ
Packit 08bd4c
The owner of the file.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_GROUP
Packit 08bd4c
The group specied by the name field.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
Packit 08bd4c
The group who owns the file.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_EVERYONE
Packit 08bd4c
Any principal who is not file owner or a member of the owning group.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
Entries with the
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_USER
Packit 08bd4c
or
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_GROUP
Packit 08bd4c
tag store the user and group name in the
Packit 08bd4c
.Fa name
Packit 08bd4c
string and optionally the user or group ID in the
Packit 08bd4c
.Fa qualifier
Packit 08bd4c
integer.
Packit 08bd4c
.Pp
Packit 08bd4c
NFSv4 ACE permissions and flags are stored in the same
Packit 08bd4c
.Fa permset
Packit 08bd4c
bitfield. Some permissions share the same constant and permission character but
Packit 08bd4c
have different effect on directories than on files. The following ACE
Packit 08bd4c
permissions are supported:
Packit 08bd4c
.Bl -tag -offset indent -compact -width ARCHIV
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_READ_DATA ( Sy r )
Packit 08bd4c
Read data (file).
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_LIST_DIRECTORY ( Sy r )
Packit 08bd4c
List entries (directory).
Packit 08bd4c
.It ARCHIVE_ENTRY_ACL_WRITE_DATA ( Sy w )
Packit 08bd4c
Write data (file).
Packit 08bd4c
.It ARCHIVE_ENTRY_ACL_ADD_FILE ( Sy w )
Packit 08bd4c
Create files (directory).
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_EXECUTE ( Sy x )
Packit 08bd4c
Execute file or change into a directory.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_APPEND_DATA ( Sy p )
Packit 08bd4c
Append data (file).
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY ( Sy p )
Packit 08bd4c
Create subdirectories (directory).
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_DELETE_CHILD ( Sy D )
Packit 08bd4c
Remove files and subdirectories inside a directory.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_DELETE ( Sy d )
Packit 08bd4c
Remove file or directory.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES ( Sy a )
Packit 08bd4c
Read file or directory attributes.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES ( Sy A )
Packit 08bd4c
Write file or directory attributes.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS ( Sy R )
Packit 08bd4c
Read named file or directory attributes.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS ( Sy W )
Packit 08bd4c
Write named file or directory attributes.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_READ_ACL ( Sy c )
Packit 08bd4c
Read file or directory ACL.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_WRITE_ACL ( Sy C )
Packit 08bd4c
Write file or directory ACL.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_WRITE_OWNER ( Sy o )
Packit 08bd4c
Change owner of a file or directory.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_SYNCHRONIZE ( Sy s )
Packit 08bd4c
Use synchronous I/O.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
The following NFSv4 ACL inheritance flags are supported:
Packit 08bd4c
.Bl -tag -offset indent -compact -width ARCHIV
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT ( Sy f )
Packit 08bd4c
Inherit parent directory ACE to files.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT ( Sy d )
Packit 08bd4c
Inherit parent directory ACE to subdirectories.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY ( Sy i )
Packit 08bd4c
Only inherit, do not apply the permission on the directory itself.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT ( Sy n )
Packit 08bd4c
Do not propagate inherit flags. Only first-level entries inherit ACLs.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS ( Sy S )
Packit 08bd4c
Trigger alarm or audit on successful access.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS ( Sy F )
Packit 08bd4c
Trigger alarm or audit on failed access.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_ENTRY_INHERITED ( Sy I )
Packit 08bd4c
Mark that ACE was inherited.
Packit 08bd4c
.El
Packit 08bd4c
.Ss Functions
Packit 08bd4c
.Fn archive_entry_acl_add_entry
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_add_entry_w
Packit 08bd4c
add a single ACL entry.
Packit 08bd4c
For the access ACL and non-extended principals, the classic Unix permissions
Packit 08bd4c
are updated. An archive entry cannot contain both POSIX.1e and NFSv4 ACL
Packit 08bd4c
entries.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_clear
Packit 08bd4c
removes all ACL entries and resets the enumeration pointer.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_count
Packit 08bd4c
counts the ACL entries that have the given type mask.
Packit 08bd4c
.Fa type
Packit 08bd4c
can be the bitwise-or of
Packit 08bd4c
.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_DEFAULT"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit 08bd4c
.El
Packit 08bd4c
for POSIX.1e ACLs and
Packit 08bd4c
.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_ALLOW"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALLOW
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_DENY
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_AUDIT
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALARM
Packit 08bd4c
.El
Packit 08bd4c
for NFSv4 ACLs. For POSIX.1e ACLs if
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit 08bd4c
is included and at least one extended ACL entry is found,
Packit 08bd4c
the three non-extended ACLs are added.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_from_text
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_from_text_w
Packit 08bd4c
add new
Packit 08bd4c
.Pq or merge with existing
Packit 08bd4c
ACL entries from
Packit 08bd4c
.Pq wide
Packit 08bd4c
text. The argument
Packit 08bd4c
.Fa type
Packit 08bd4c
may take one of the following values:
Packit 08bd4c
.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_DEFAULT"
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_NFS4
Packit 08bd4c
.El
Packit 08bd4c
Supports all formats that can be created with
Packit 08bd4c
.Fn archive_entry_acl_to_text
Packit 08bd4c
or respective
Packit 08bd4c
.Fn archive_entry_acl_to_text_w .
Packit 08bd4c
Existing ACL entries are preserved. To get a clean new ACL from text
Packit 08bd4c
.Fn archive_entry_acl_clear
Packit 08bd4c
must be called first. Entries prefixed with
Packit 08bd4c
.Dq default:
Packit 08bd4c
are treated as
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit 08bd4c
unless
Packit 08bd4c
.Fa type
Packit 08bd4c
is
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_TYPE_NFS4 .
Packit 08bd4c
Invalid entries, non-parseable ACL entries and entries beginning with
Packit 08bd4c
the
Packit 08bd4c
.Sq #
Packit 08bd4c
character
Packit 08bd4c
.Pq comments
Packit 08bd4c
are skipped.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_next
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_next_w
Packit 08bd4c
return the next entry of the ACL list.
Packit 08bd4c
This functions may only be called after
Packit 08bd4c
.Fn archive_entry_acl_reset
Packit 08bd4c
has indicated the presence of extended ACL entries.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_reset
Packit 08bd4c
prepare reading the list of ACL entries with
Packit 08bd4c
.Fn archive_entry_acl_next
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_entry_acl_next_w .
Packit 08bd4c
The function returns either 0, if no non-extended ACLs are found.
Packit 08bd4c
In this case, the access permissions should be obtained by
Packit 08bd4c
.Xr archive_entry_mode 3
Packit 08bd4c
or set using
Packit 08bd4c
.Xr chmod 2 .
Packit 08bd4c
Otherwise, the function returns the same value as
Packit 08bd4c
.Fn archive_entry_acl_count .
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_to_text
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_to_text_w
Packit 08bd4c
convert the ACL entries for the given type into a
Packit 08bd4c
.Pq wide
Packit 08bd4c
string of ACL entries separated by newline. If the pointer
Packit 08bd4c
.Fa len_p
Packit 08bd4c
is not NULL, then the function shall return the length of the string
Packit 08bd4c
.Pq not including the NULL terminator
Packit 08bd4c
in the location pointed to by
Packit 08bd4c
.Fa len_p .
Packit 08bd4c
The
Packit 08bd4c
.Fa flag
Packit 08bd4c
argument is a bitwise-or.
Packit 08bd4c
.Pp
Packit 08bd4c
The following flags are effective only on POSIX.1e ACL:
Packit 08bd4c
.Bl -tag -offset indent -compact -width ARCHIV
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit 08bd4c
Output access ACLs.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit 08bd4c
Output POSIX.1e default ACLs.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT
Packit 08bd4c
Prefix each default ACL entry with the word
Packit 08bd4c
.Dq default: .
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_STYLE_SOLARIS
Packit 08bd4c
The mask and other ACLs don not contain a double colon.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
The following flags are effecive only on NFSv4 ACL:
Packit 08bd4c
.Bl -tag -offset indent -compact -width ARCHIV
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_STYLE_COMPACT
Packit 08bd4c
Do not output minus characters for unset permissions and flags in NFSv4 ACL
Packit 08bd4c
permission and flag fields.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
The following flags are effective on both POSIX.1e and NFSv4 ACL:
Packit 08bd4c
.Bl -tag -offset indent -compact -width ARCHIV
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
Packit 08bd4c
Add an additional colon-separated field containing the user or group id.
Packit 08bd4c
.It Dv ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA
Packit 08bd4c
Separate ACL entries with comma instead of newline.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
If the archive entry contains NFSv4 ACLs, all types of NFSv4 ACLs are returned.
Packit 08bd4c
It the entry contains POSIX.1e ACLs and none of the flags
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit 08bd4c
or
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit 08bd4c
are specified, both access and default entries are returned and default entries
Packit 08bd4c
are prefixed with
Packit 08bd4c
.Dq default: .
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_types
Packit 08bd4c
get ACL entry types contained in an archive entry's ACL. As POSIX.1e and NFSv4
Packit 08bd4c
ACL entries cannot be mixed, this function is a very efficient way to detect if
Packit 08bd4c
an ACL already contains POSIX.1e or NFSv4 ACL entries.
Packit 08bd4c
.Sh RETURN VALUES
Packit 08bd4c
.Fn archive_entry_acl_count
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_reset
Packit 08bd4c
returns the number of ACL entries that match the given type mask.
Packit 08bd4c
For POSIX.1e ACLS if the type mask includes
Packit 08bd4c
.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit 08bd4c
and at least one extended ACL entry exists, the three classic Unix
Packit 08bd4c
permissions are counted.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_from_text
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_from_text_w
Packit 08bd4c
return
Packit 08bd4c
.Dv ARCHIVE_OK
Packit 08bd4c
if all entries were successfully parsed and
Packit 08bd4c
.Dv ARCHIVE_WARN
Packit 08bd4c
if one or more entries were invalid or non-parseable.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_next
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_acl_next_w
Packit 08bd4c
return
Packit 08bd4c
.Dv ARCHIVE_OK
Packit 08bd4c
on success,
Packit 08bd4c
.Dv ARCHIVE_EOF
Packit 08bd4c
if no more ACL entries exist
Packit 08bd4c
and
Packit 08bd4c
.Dv ARCHIVE_WARN
Packit 08bd4c
if
Packit 08bd4c
.Fn archive_entry_acl_reset
Packit 08bd4c
has not been called first.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_to_text
Packit 08bd4c
returns a string representing the ACL entries matching the given type and
Packit 08bd4c
flags on success or NULL on error.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_to_text_w
Packit 08bd4c
returns a wide string representing the ACL entries matching the given type
Packit 08bd4c
and flags on success or NULL on error.
Packit 08bd4c
.Pp
Packit 08bd4c
.Fn archive_entry_acl_types
Packit 08bd4c
returns a bitmask of ACL entry types or 0 if archive entry has no ACL entries.
Packit 08bd4c
.Sh SEE ALSO
Packit 08bd4c
.Xr archive_entry 3 ,
Packit 08bd4c
.Xr libarchive 3