名称
setaclentry(), fsetaclentry() ― ファイルのアクセス制御リスト (ACL) 中のエントリーの追加、変更、削除
(HFS ファイルシステムのみ)
構文
#include <unistd.h>
#include <acllib.h>
int setaclentry(const char *path, uid_t uid, gid_t gid, int mode);
int fsetaclentry(int fd, uid_t uid, gid_t gid, int mode);
説明
どちらの呼び出し形式も、ファイルのアクセス制御リスト (ACL)
の 1 つのエントリーを追加、変更、削除します。 setaclentry() および fsetaclentry() は、パス名 path) またはオープンするファイル記述子 fd) と、エントリー識別子 uid, gid) を使用します。指定されたエントリーのアクセスモードビットを、与えられた値 mode) に変更します。それら値の意味は、 <unistd.h>
中で定義されています。 modes は、 R_OK、 W_OK、
および X_OK の形で表されています。 mode 中の無関係なビットは 0 でなければなりません。
ファイルの ACL が与えられた uid と gid へのエントリーを持たない場合には、エントリーが作成され
ACL に追加されます。 mode が MODE_DEL (<acllib.h>
中で定義されている) である場合には、エントリーがオプションのエントリーであるときには、一致するエントリーはファイルの
ACL から削除され、ベースエントリーであるときにはそのモードビットが 0
(非アクセス) にセットされます。
uid または gid は、それぞれ ACL_NSUSER または ACL_NSGROUP (<sys/acl.h>
中で定義されている) であることが可能であり、それぞれ未指定のエントリー u.%, %.g, または %.% を表します。ファイルの u.% または %.g は、ファイルの所有者またはグループ ID に対して、それぞれ ACL_FILEOWNER と ACL_FILEGROUP (<acllib.h>
中で定義されている) を用いて、ベースエントリーを参照することができます。
setaclentry() および fsetaclentry() は、ファイルの
ACL を getacl() または fgetacl() を用いて読み出し、それぞれ setacl() または fsetacl() を用いて変更します。
戻り値
正常終了したときには、 setaclentry() および fsetaclentry() は、0 を返します。
エラー
エラーが起きたときには、 setaclentry() および fsetaclentry() 以下の負の値を返し、 errno をセットします。
| -1 | | ファイルにおいて getacl() もしくは fgetacl() を実行できませんでした。 errno はその理由を示します。 |
| -2 | | ファイルにおいて stat() もしくは fstat() を実行できませんでした。 errno はその理由を示します。 |
| -3 | | ACL がすでに NACLENTRIES エントリー
(<sys/acl.h> 中で定義されている) を持っているために、新しいエントリーを追加できませんでした。 |
| -4 | | 存在していないエントリーであるために、削除できませんでした。 |
| -5 | | ファイルにおいて setacl() もしくは fsetacl() を実行できませんでした。 errno はその理由を示します。 |
例
以下のコードフラグメントは、ユーザー ID 115、グループ ID 32
のファイル "work/list" にエントリーを追加し、またはすでに存在する同じユーザー、グループのエントリーがあれば変更し、リードオンリーの新しいアクセスモードを与えます。また、グループ
109 のすべてのユーザーに対し、もしユーザーが存在すれば所有者のベースエントリーをすべてのアクセス権を持つように変更し、エントリーを削除します。
#include <unistd.h>
#include <acllib.h>
char *filename = "work/list";
setaclentry (filename, 115, 32, R_OK);
setaclentry (filename, ACL_FILEOWNER, ACL_NSGROUP, R_OK | W_OK | X_OK);
setaclentry (filename, ACL_NSUSER, 109, MODE_DEL);
制約
| HFS | | setaclentry() と fsetaclentry() は
標準 HP-UX オペレーティングシステムの HFS ファイルシステムでのみサポートされます。 |
| NFS | | setaclentry() と fsetaclentry() は、リモートファイル上ではサポートされません。 |
著者
setaclentry() と fsetaclentry() は、HP
で開発されました。