Blame libarchive/archive_entry_acl.3

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