EN JA
ARCHIVE_ENTRY_ACL(3)
ARCHIVE_ENTRY_ACL(3) FreeBSD Library Functions Manual ARCHIVE_ENTRY_ACL(3)

名称

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アーカイブエントリ記述でアクセス制御リストを操作するための関数

ライブラリ

ストリーミングアーカイブライブラリ (libarchive, -larchive)

書式

#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);

解説

“Access Control List” (アクセス制御リスト) は、古典的な Unix のパーミッションシステムを一般化したものです。 libarchive の ACL インタフェースは、POSIX.1e ドラフトに由来しますが、様々なオペレーティングシステムとアーカイブ形式の実用的な実装の処理を単純化するために限定されています。

ACL は、多くの独立したエントリから成ります。各エントリは、基本的なパーミッションのビットマスクとしてパーミッションの設定を指定します。有効なパーミッションは、次の通りです:

ARCHIVE_ENTRY_ACL_EXECUTE
ARCHIVE_ENTRY_ACL_WRITE
ARCHIVE_ENTRY_ACL_READ

パーミッションは、通常の Unix パーミッションに対応します。

タグは、パーミッションが適用されるプリンシパルを指定します。有効な値は、次の通りです:

ARCHIVE_ENTRY_ACL_USER
名前フィールドによって指定されたユーザ。
ARCHIVE_ENTRY_ACL_USER_OBJ
ファイルの所有者。
ARCHIVE_ENTRY_ACL_GROUP
名前フィールドによって指定されたグループ。
ARCHIVE_ENTRY_ACL_GROUP_OBJ
ファイルを所有するグループ。
ARCHIVE_ENTRY_ACL_MASK
グループのパーミッションによって取得される最大のパーミッション。
ARCHIVE_ENTRY_ACL_OTHER
ユーザまたはグループのエントリがないあらゆるプリンシパル。

プリンシパル ARCHIVE_ENTRY_ACL_USER_OBJ, ARCHIVE_ENTRY_ACL_GROUP_OBJARCHIVE_ENTRY_ACL_OTHER は、古典的 Unix パーミッションのモデルのユーザ、グループと他のものと等価で、非拡張 ACL エントリを指定します。

すべてのファイルには、ACL ( ARCHIVE_ENTRY_ACL_TYPE_ACCESS) があります。これは、ファイル自体へのアクセスに必要なパーミッションを指定します。ディレクトリは、新しく作成されれたディレクトリエントリのための初期アクセス ACL を制御する、追加の ACL ( ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) があります。

archive_entry_acl_add_entry() と archive_entry_acl_add_entry_w() は、単一の ACL エントリを追加します。アクセス ACL と非拡張プリンシパルに関して、古典的 Unix のパーミッションは、更新されます。

archive_entry_acl_clear() は、すべての ACL エントリを削除し、列挙型ポインタをリセットします。

archive_entry_acl_count() は、与えられたタイプマスクがある ACL エントリをカウントします。 type は、 ARCHIVE_ENTRY_ACL_TYPE_ACCESSARCHIVE_ENTRY_ACL_TYPE_DEFAULT のビット単位の論理和 (OR) で指定できます。 ARCHIVE_ENTRY_ACL_TYPE_ACCESS が含まれていて、少なくとも 1 つの拡張 ACL エントリが見つかるなら、 3 つの非拡張 ACL が追加されます。

archive_entry_acl_next() と archive_entry_acl_next_w() は、ACL リストの次のエントリを返します。この関数は、 archive_entry_acl_reset() が拡張 ACL エントリの存在を示した後に、単に呼び出されます。

archive_entry_acl_reset() は、 archive_entry_acl_next() または archive_entry_acl_next_w() で ACL エントリのリストを読み込む準備をします。関数は、非拡張 ACL が見つからないなら、0 を返します。この場合、アクセスパーミッションは、 archive_entry_mode(3) によって取得されるか、または chmod(2) を使用して設定するべきです。そうでなければ、関数は、 archive_entry_acl_count() と同じ値を返します。

archive_entry_acl_text_w() は、与えられたタイプマスクのための ACL エントリをワイド文字列に変換します。通常のタイプフラグに加えて、 ARCHIVE_ENTRY_ACL_STYLE_EXTRA_IDARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT を、結果をさらにカスタマイズするように指定することができます。返されたロング文字列は、次の archive_entry_acl_clear(), archive_entry_acl_add_entry(), archive_entry_acl_add_entry_w() または archive_entry_acl_text_w() への呼び出しまで有効です。

戻り値

archive_entry_acl_count() と archive_entry_acl_reset() は、与えられたタイプマスクと一致する ACL エントリの数を返します。タイプマスクが ARCHIVE_ENTRY_ACL_TYPE_ACCESS を含んでいて、少なくとも 1 つの拡張 ACL エントリが存在するなら、 3 つの古典的な Unix パーミッションがカウントされます。

archive_entry_acl_next() と archive_entry_acl_next_w() は、成功すれば ARCHIVE_OK を返し、これ以上の ACL エントリが存在しないなら、 ARCHIVE_EOF を返し、 archive_entry_acl_reset() が最初に呼び出されていないなら、 ARCHIVE_WARN を返します。

archive_entry_text_w() は、与えられたタイプマスクと一致する ACL エントリのワイド文字列表現を返します。返されたロング文字列は、次の archive_entry_acl_clear(), archive_entry_acl_add_entry(), archive_entry_acl_add_entry_w() または archive_entry_acl_text_w() 呼び出しまで有効です。

バグ

ARCHIVE_ENTRY_ACL_STYLE_EXTRA_IDARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT は、文書化されていません。
February 2, 2012 FreeBSD