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

名称

cap_rights_init, cap_rights_set, cap_rights_clear, cap_rights_is_set, cap_rights_is_valid, cap_rights_merge, cap_rights_remove, cap_rights_containscap_rights_t 構造体を管理する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/capability.h>

cap_rights_t *
cap_rights_init( cap_rights_t *rights, ...);

cap_rights_t *
cap_rights_set( cap_rights_t *rights, ...);

cap_rights_t *
cap_rights_clear( cap_rights_t *rights, ...);

bool
cap_rights_is_set( const cap_rights_t *rights, ...);

bool
cap_rights_is_valid( const cap_rights_t *rights);

cap_rights_t *
cap_rights_merge( cap_rights_t *dst, const cap_rights_t *src);

cap_rights_t *
cap_rights_remove( cap_rights_t *dst, const cap_rights_t *src);

bool
cap_rights_contains( const cap_rights_t *big, const cap_rights_t *little);

解説

ここで文書化された関数は、 cap_rights_t 構造体を管理することを可能にします。

ケーパビリティの権利は、 cap_rights_init(), cap_rights_set(), cap_rights_clear() と cap_rights_is_set() 関数に渡されるとき、コンマで区切られるべきです。例えば:

cap_rights_set(&rights, CAP_READ, CAP_WRITE, CAP_FSTAT, CAP_SEEK);

ケーパビリティの権利の完全なリストは、 rights(4) マニュアルページで見つけることができます。

cap_rights_init() 関数は、提供される cap_rights_t 構造体を初期化します。適切に初期化された構造体のみ、残りの関数に渡すことができます。便宜上、構造体は、後で cap_rights_set() 関数を呼び出す代わりにケーパビリティの権利で満たすことができます。返される与えられた構造体へのさらに便利なポインタのために、それで、それは、 cap_rights_limit(2) に直接渡すことができます:

cap_rights_t rights; 
 
if (cap_rights_limit(fd, cap_rights_init(&rights, CAP_READ, CAP_WRITE)) < 0) 
 err(1, "Unable to limit capability rights");

cap_rights_set() 関数は、与えられた cap_rights_t 構造体への与えられたケーパビリティの権利を追加します。

cap_rights_clear() 関数は、与えられた cap_rights_t 構造体から与えられたケーパビリティの権利を削除します。

cap_rights_is_set() 関数は、すべての与えられたケーパビリティの権利が与えられた cap_rights_t 構造体のために設定されているかどうか、チェックします。

cap_rights_is_valid() 関数は、与えられた cap_rights_t 構造体が有効かどうか確認します。

cap_rights_merge() 関数は、 dst 構造体に src 構造体に存在するすべてのケーパビリティの権利をマージします。

cap_rights_remove() 関数は、 dst 構造体から src 構造に存在するすべてのケーパビリティの権利を削除します。

cap_rights_contains() 関数は、 big 構造体が little 構造体に存在するすべてのケーパビリティの権利を含んでいるかどうかチェックします。

戻り値

関数は、決して失敗しません。無効のケーパビリティの権利または無効の cap_rights_t 構造体が引数として与えられるなら、プログラムは、異常終了します。

cap_rights_init(), cap_rights_set() と cap_rights_clear() 関数は、 rights 引数で与えられた cap_rights_t 構造体へのポインタを返します。

cap_rights_merge() と cap_rights_remove() 関数は、 dst 引数で与えられた cap_rights_t 構造体へのポインタを返します。

cap_rights_is_set() は、すべての与えられたケーパビリティの権利が rights 引数に設定されているなら、 true (真) を返します。

cap_rights_is_valid() 関数は、与えられた cap_rights_t 構造体が有効で、それがそうであるなら、 true が返されるかどうか確かめるために様々なチェックを実行します。

cap_rights_contains() 関数は、 little 構造体に設定されたすべてのケーパビリティの権利が big 構造体にも存在すなら、 true を返します。

使用例

次の例は、 cap_rights_limit(2) システムコールに渡される、 cap_rights_t 構造体を準備する方法の実例の説明です。

cap_rights_t rights; 
int fd; 
 
fd = open("/tmp/foo", O_RDWR); 
if (fd < 0) 
 err(1, "open() failed"); 
 
cap_rights_init(&rights, CAP_FSTAT, CAP_READ); 
 
if (allow_write_and_seek) 
 cap_rights_set(&rights, CAP_WRITE, CAP_SEEK); 
 
if (dont_allow_seek) 
 cap_rights_clear(&rights, CAP_SEEK); 
 
if (cap_rights_limit(fd, &rights) < 0 && errno != ENOSYS) 
 err(1, "cap_rights_limit() failed");

歴史

ケーパビリティとケーパビリティモードのサポートは、 TrustedBSD プロジェクトの一環として開発されました。

作者

この関数ファミリは、FreeBSD 財団の資金提供の下で Pawel Jakub Dawidek <pawel@dawidek.net>によって作成されました。
September 23, 2013 FreeBSD