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

名称

cap_rights_getケーパビリティの権利を取得する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/capability.h>

int
cap_rights_get( int fd, cap_rights_t *rights);

解説

cap_rights_get 関数によって、与えられた記述子のために現在のケーパビリティの権利を取得することができます。関数は、それらが制限されていないか、またはケーパビリティの権利が与えられた記述子で cap_rights_limit(2) の最後の成功した呼び出しの間に設定されるなら、すべてのケーパビリティの権利で rights (権利) 引数を満たします。

rights 引数は、 cap_rights_init(3) 関数ファミリを使用して検査することができます。

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

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

使用例

次の例は、ファイル記述子のケーパビリティの権利を制限する方法とそれらを取得する方法の実例の説明です。

cap_rights_t setrights, getrights; 
int fd; 
 
memset(&setrights, 0, sizeof(setrights)); 
memset(&getrights, 0, sizeof(getrights)); 
 
fd = open("/tmp/foo", O_RDONLY); 
if (fd < 0) 
 err(1, "open() failed"); 
 
cap_rights_init(&setrights, CAP_FSTAT, CAP_READ); 
if (cap_rights_limit(fd, &setrights) < 0 && errno != ENOSYS) 
 err(1, "cap_rights_limit() failed"); 
 
if (cap_rights_get(fd, &getrights) < 0 && errno != ENOSYS) 
 err(1, "cap_rights_get() failed"); 
 
assert(memcmp(&setrights, &getrights, sizeof(setrights)) == 0);

エラー

cap_rights_get() は、次の場合以外成功します:
[ EBADF]
fd 引数が、有効でアクティブな記述子ではありません。
[ EFAULT]
rights 引数が無効のアドレスを指しています。

歴史

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

作者

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