Blame doc/text/archive_entry_acl.3.txt

Packit Service 1d0348
ARCHIVE_ENTRY_ACL(3)	 BSD Library Functions Manual	  ARCHIVE_ENTRY_ACL(3)
Packit Service 1d0348
Packit Service 1d0348
NAME
Packit Service 1d0348
     archive_entry_acl_add_entry, archive_entry_acl_add_entry_w,
Packit Service 1d0348
     archive_entry_acl_clear, archive_entry_acl_count,
Packit Service 1d0348
     archive_entry_acl_from_text, archive_entry_acl_from_text_w,
Packit Service 1d0348
     archive_entry_acl_next, archive_entry_acl_next_w,
Packit Service 1d0348
     archive_entry_acl_reset, archive_entry_acl_to_text,
Packit Service 1d0348
     archive_entry_acl_to_text_w, archive_entry_acl_types — functions for
Packit Service 1d0348
     manipulating Access Control Lists in archive entry descriptions
Packit Service 1d0348
Packit Service 1d0348
LIBRARY
Packit Service 1d0348
     Streaming Archive Library (libarchive, -larchive)
Packit Service 1d0348
Packit Service 1d0348
SYNOPSIS
Packit Service 1d0348
     #include <archive_entry.h>
Packit Service 1d0348
Packit Service 1d0348
     void
Packit Service 1d0348
     archive_entry_acl_add_entry(struct archive_entry *a, int type,
Packit Service 1d0348
	 int permset, int tag, int qualifier, const char *name);
Packit Service 1d0348
Packit Service 1d0348
     void
Packit Service 1d0348
     archive_entry_acl_add_entry_w(struct archive_entry *a, int type,
Packit Service 1d0348
	 int permset, int tag, int qualifier, const wchar_t *name);
Packit Service 1d0348
Packit Service 1d0348
     void
Packit Service 1d0348
     archive_entry_acl_clear(struct archive_entry *a);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_count(struct archive_entry *a, int type);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_from_text(struct archive_entry *a, const char *text,
Packit Service 1d0348
	 int type);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_from_text_w(struct archive_entry *a,
Packit Service 1d0348
	 const wchar_t *text, int type);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_next(struct archive_entry *a, int type, int *ret_type,
Packit Service 1d0348
	 int *ret_permset, int *ret_tag, int *ret_qual,
Packit Service 1d0348
	 const char **ret_name);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_next_w(struct archive_entry *a, int type,
Packit Service 1d0348
	 int *ret_type, int *ret_permset, int *ret_tag, int *ret_qual,
Packit Service 1d0348
	 const wchar_t **ret_name);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_reset(struct archive_entry *a, int type);
Packit Service 1d0348
Packit Service 1d0348
     char *
Packit Service 1d0348
     archive_entry_acl_to_text(struct archive_entry *a, ssize_t *len_p,
Packit Service 1d0348
	 int flags);
Packit Service 1d0348
Packit Service 1d0348
     wchar_t *
Packit Service 1d0348
     archive_entry_acl_to_text_w(struct archive_entry *a, ssize_t *len_p,
Packit Service 1d0348
	 int flags);
Packit Service 1d0348
Packit Service 1d0348
     int
Packit Service 1d0348
     archive_entry_acl_types(struct archive_entry *a);
Packit Service 1d0348
Packit Service 1d0348
DESCRIPTION
Packit Service 1d0348
     The “Access Control Lists (ACLs)” extend the standard Unix perssion
Packit Service 1d0348
     model.  The ACL interface of libarchive supports both POSIX.1e and NFSv4
Packit Service 1d0348
     style ACLs. Use of ACLs is restricted by various levels of ACL support in
Packit Service 1d0348
     operating systems, file systems and archive formats.
Packit Service 1d0348
Packit Service 1d0348
   POSIX.1e Access Control Lists
Packit Service 1d0348
     A POSIX.1e ACL consists of a number of independent entries.  Each entry
Packit Service 1d0348
     specifies the permission set as bitmask of basic permissions.  Valid per‐
Packit Service 1d0348
     missions in the permset are:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_READ (r)
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_WRITE (w)
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_EXECUTE (x)
Packit Service 1d0348
     The permissions correspond to the normal Unix permissions.
Packit Service 1d0348
Packit Service 1d0348
     The tag specifies the principal to which the permission applies.  Valid
Packit Service 1d0348
     values are:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_USER	The user specified by the name field.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_USER_OBJ	The owner of the file.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_GROUP	The group specied by the name field.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_GROUP_OBJ	The group who owns the file.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_MASK	The maximum permissions to be obtained
Packit Service 1d0348
					via group permissions.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_OTHER	Any principal who is not file owner or
Packit Service 1d0348
					a member of the owning group.
Packit Service 1d0348
Packit Service 1d0348
     The principals ARCHIVE_ENTRY_ACL_USER_OBJ, ARCHIVE_ENTRY_ACL_GROUP_OBJ
Packit Service 1d0348
     and ARCHIVE_ENTRY_ACL_OTHER are equivalent to user, group and other in
Packit Service 1d0348
     the classic Unix permission model and specify non-extended ACL entries.
Packit Service 1d0348
Packit Service 1d0348
     All files with have an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS).  This
Packit Service 1d0348
     specifies the permissions required for access to the file itself.	Direc‐
Packit Service 1d0348
     tories have an additional ACL (ARCHIVE_ENTRY_ACL_TYPE_DEFAULT), which
Packit Service 1d0348
     controls the initial access ACL for newly created directory entries.
Packit Service 1d0348
Packit Service 1d0348
   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
Packit Service 1d0348
     There are four possible types of a NFSv4 ACE:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ALLOW Allow principal to perform actions
Packit Service 1d0348
					requiring given permissions.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_DENY	Prevent principal from performing
Packit Service 1d0348
					actions requiring given permissions.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_AUDIT Log access attempts by principal which
Packit Service 1d0348
					require given permissions.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ALARM Trigger a system alarm on access
Packit Service 1d0348
					attempts by principal which require
Packit Service 1d0348
					given permissions.
Packit Service 1d0348
Packit Service 1d0348
     The tag specifies the principal to which the permission applies.  Valid
Packit Service 1d0348
     values are:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_USER	The user specified by the name field.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_USER_OBJ	The owner of the file.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_GROUP	The group specied by the name field.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_GROUP_OBJ	The group who owns the file.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_EVERYONE	Any principal who is not file owner or
Packit Service 1d0348
					a member of the owning group.
Packit Service 1d0348
Packit Service 1d0348
     Entries with the ARCHIVE_ENTRY_ACL_USER or ARCHIVE_ENTRY_ACL_GROUP tag
Packit Service 1d0348
     store the user and group name in the name string and optionally the user
Packit Service 1d0348
     or group ID in the qualifier integer.
Packit Service 1d0348
Packit Service 1d0348
     NFSv4 ACE permissions and flags are stored in the same permset bitfield.
Packit Service 1d0348
     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
	   ARCHIVE_ENTRY_ACL_READ_DATA (r)
Packit Service 1d0348
		   Read data (file).
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_LIST_DIRECTORY (r)
Packit Service 1d0348
		   List entries (directory).
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_WRITE_DATA (w)
Packit Service 1d0348
		   Write data (file).
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ADD_FILE (w)
Packit Service 1d0348
		   Create files (directory).
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_EXECUTE (x)
Packit Service 1d0348
		   Execute file or change into a directory.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_APPEND_DATA (p)
Packit Service 1d0348
		   Append data (file).
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY (p)
Packit Service 1d0348
		   Create subdirectories (directory).
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_DELETE_CHILD (D)
Packit Service 1d0348
		   Remove files and subdirectories inside a directory.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_DELETE (d)
Packit Service 1d0348
		   Remove file or directory.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES (a)
Packit Service 1d0348
		   Read file or directory attributes.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES (A)
Packit Service 1d0348
		   Write file or directory attributes.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS (R)
Packit Service 1d0348
		   Read named file or directory attributes.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS (W)
Packit Service 1d0348
		   Write named file or directory attributes.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_READ_ACL (c)
Packit Service 1d0348
		   Read file or directory ACL.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_WRITE_ACL (C)
Packit Service 1d0348
		   Write file or directory ACL.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_WRITE_OWNER (o)
Packit Service 1d0348
		   Change owner of a file or directory.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_SYNCHRONIZE (s)
Packit Service 1d0348
		   Use synchronous I/O.
Packit Service 1d0348
Packit Service 1d0348
     The following NFSv4 ACL inheritance flags are supported:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT (f)
Packit Service 1d0348
		   Inherit parent directory ACE to files.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT (d)
Packit Service 1d0348
		   Inherit parent directory ACE to subdirectories.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY (i)
Packit Service 1d0348
		   Only inherit, do not apply the permission on the directory
Packit Service 1d0348
		   itself.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT (n)
Packit Service 1d0348
		   Do not propagate inherit flags. Only first-level entries
Packit Service 1d0348
		   inherit ACLs.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS (S)
Packit Service 1d0348
		   Trigger alarm or audit on successful access.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS (F)
Packit Service 1d0348
		   Trigger alarm or audit on failed access.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_ENTRY_INHERITED (I)
Packit Service 1d0348
		   Mark that ACE was inherited.
Packit Service 1d0348
Packit Service 1d0348
   Functions
Packit Service 1d0348
     archive_entry_acl_add_entry() and archive_entry_acl_add_entry_w() add a
Packit Service 1d0348
     single ACL entry.	For the access ACL and non-extended principals, the
Packit Service 1d0348
     classic Unix permissions are updated. An archive entry cannot contain
Packit Service 1d0348
     both POSIX.1e and NFSv4 ACL entries.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_clear() removes all ACL entries and resets the enumera‐
Packit Service 1d0348
     tion pointer.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_count() counts the ACL entries that have the given type
Packit Service 1d0348
     mask.  type can be the bitwise-or of
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit Service 1d0348
     for POSIX.1e ACLs and
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ALLOW
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_DENY
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_AUDIT
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ALARM
Packit Service 1d0348
     for NFSv4 ACLs. For POSIX.1e ACLs if ARCHIVE_ENTRY_ACL_TYPE_ACCESS is
Packit Service 1d0348
     included and at least one extended ACL entry is found, the three non-
Packit Service 1d0348
     extended ACLs are added.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_from_text() and archive_entry_acl_from_text_w() add new
Packit Service 1d0348
     (or merge with existing) ACL entries from (wide) text. The argument type
Packit Service 1d0348
     may take one of the following values:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_NFS4
Packit Service 1d0348
     Supports all formats that can be created with archive_entry_acl_to_text()
Packit Service 1d0348
     or respective archive_entry_acl_to_text_w().  Existing ACL entries are
Packit Service 1d0348
     preserved. To get a clean new ACL from text archive_entry_acl_clear()
Packit Service 1d0348
     must be called first. Entries prefixed with “default:” are treated as
Packit Service 1d0348
     ARCHIVE_ENTRY_ACL_TYPE_DEFAULT unless type is
Packit Service 1d0348
     ARCHIVE_ENTRY_ACL_TYPE_NFS4.  Invalid entries, non-parseable ACL entries
Packit Service 1d0348
     and entries beginning with the ‘#’ character (comments) are skipped.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_next() and archive_entry_acl_next_w() return the next
Packit Service 1d0348
     entry of the ACL list.  This functions may only be called after
Packit Service 1d0348
     archive_entry_acl_reset() has indicated the presence of extended ACL
Packit Service 1d0348
     entries.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_reset() prepare reading the list of ACL entries with
Packit Service 1d0348
     archive_entry_acl_next() or archive_entry_acl_next_w().  The function
Packit Service 1d0348
     returns either 0, if no non-extended ACLs are found.  In this case, the
Packit Service 1d0348
     access permissions should be obtained by archive_entry_mode(3) or set
Packit Service 1d0348
     using chmod(2).  Otherwise, the function returns the same value as
Packit Service 1d0348
     archive_entry_acl_count().
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_to_text() and archive_entry_acl_to_text_w() convert the
Packit Service 1d0348
     ACL entries for the given type into a (wide) string of ACL entries sepa‐
Packit Service 1d0348
     rated by newline. If the pointer len_p is not NULL, then the function
Packit Service 1d0348
     shall return the length of the string (not including the NULL terminator)
Packit Service 1d0348
     in the location pointed to by len_p.  The flag argument is a bitwise-or.
Packit Service 1d0348
Packit Service 1d0348
     The following flags are effective only on POSIX.1e ACL:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Packit Service 1d0348
		   Output access ACLs.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Packit Service 1d0348
		   Output POSIX.1e default ACLs.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT
Packit Service 1d0348
		   Prefix each default ACL entry with the word “default:”.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_STYLE_SOLARIS
Packit Service 1d0348
		   The mask and other ACLs don not contain a double colon.
Packit Service 1d0348
Packit Service 1d0348
     The following flags are effecive only on NFSv4 ACL:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_STYLE_COMPACT
Packit Service 1d0348
		   Do not output minus characters for unset permissions and
Packit Service 1d0348
		   flags in NFSv4 ACL permission and flag fields.
Packit Service 1d0348
Packit Service 1d0348
     The following flags are effective on both POSIX.1e and NFSv4 ACL:
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
Packit Service 1d0348
		   Add an additional colon-separated field containing the user
Packit Service 1d0348
		   or group id.
Packit Service 1d0348
	   ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA
Packit Service 1d0348
		   Separate ACL entries with comma instead of newline.
Packit Service 1d0348
Packit Service 1d0348
     If the archive entry contains NFSv4 ACLs, all types of NFSv4 ACLs are
Packit Service 1d0348
     returned.	It the entry contains POSIX.1e ACLs and none of the flags
Packit Service 1d0348
     ARCHIVE_ENTRY_ACL_TYPE_ACCESS or ARCHIVE_ENTRY_ACL_TYPE_DEFAULT are spec‐
Packit Service 1d0348
     ified, both access and default entries are returned and default entries
Packit Service 1d0348
     are prefixed with “default:”.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_types() get ACL entry types contained in an archive
Packit Service 1d0348
     entry's ACL. As POSIX.1e and NFSv4 ACL entries cannot be mixed, this
Packit Service 1d0348
     function is a very efficient way to detect if an ACL already contains
Packit Service 1d0348
     POSIX.1e or NFSv4 ACL entries.
Packit Service 1d0348
Packit Service 1d0348
RETURN VALUES
Packit Service 1d0348
     archive_entry_acl_count() and archive_entry_acl_reset() returns the num‐
Packit Service 1d0348
     ber of ACL entries that match the given type mask.  For POSIX.1e ACLS if
Packit Service 1d0348
     the type mask includes ARCHIVE_ENTRY_ACL_TYPE_ACCESS and at least one
Packit Service 1d0348
     extended ACL entry exists, the three classic Unix permissions are
Packit Service 1d0348
     counted.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_from_text() and archive_entry_acl_from_text_w() return
Packit Service 1d0348
     ARCHIVE_OK if all entries were successfully parsed and ARCHIVE_WARN if
Packit Service 1d0348
     one or more entries were invalid or non-parseable.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_next() and archive_entry_acl_next_w() return ARCHIVE_OK
Packit Service 1d0348
     on success, ARCHIVE_EOF if no more ACL entries exist and ARCHIVE_WARN if
Packit Service 1d0348
     archive_entry_acl_reset() has not been called first.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_to_text() returns a string representing the ACL entries
Packit Service 1d0348
     matching the given type and flags on success or NULL on error.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_to_text_w() returns a wide string representing the ACL
Packit Service 1d0348
     entries matching the given type and flags on success or NULL on error.
Packit Service 1d0348
Packit Service 1d0348
     archive_entry_acl_types() returns a bitmask of ACL entry types or 0 if
Packit Service 1d0348
     archive entry has no ACL entries.
Packit Service 1d0348
Packit Service 1d0348
SEE ALSO
Packit Service 1d0348
     archive_entry(3), libarchive(3)
Packit Service 1d0348
Packit Service 1d0348
BSD			       February 15, 2017			   BSD