| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 3 : ライブラリ (A~M) > cchownacl(3C)HP-UX 11i Version 2: September 2004 |
|
名称chownacl() ― ファイルのアクセス制御リスト (ACL) 内に示されている所有者およびグループ、あるいはどちらか一方の変更 構文#include <acllib.h> 説明このルーチンは、旧ファイルが新ファイルにコピーされる際に ACL も同時にコピーされた場合、ファイルの所有者およびグループの ID の変更を反映してアクセス制御リスト (ACL) を変更します。 chownacl() は chown() chown(2) 参照) と同様の方法で所有権を転送します (ベース ACL エントリーを修正します)。アルゴリズムは以下および acl(5) に記載しました。 nentries パラメータは、 acl[] 配列 (ゼロ以上;負の値はゼロとして取り扱われます) 内の ACL エントリーのカレント個数です。 olduid と oldgid の値は、オリジナルファイルの所有者のユーザーおよびグループ ID で、通常は stat() stat(2) 参照) から返される st_uid と st_gid の値です。 newuid と newgid の値は新規ファイルの所有者のユーザーおよびグループ ID で、通常は geteuid() および getegid() getuid(2) の geteuid(2) および getegid(2) を参照) から返される値です。 ACL の acl[] 内のエントリーが olduid の uid および ACL_NSGROUP の gid を持つ場合 (所有者ベースの ACL エントリー)、 chownacl() は uid を newuid に変更します (例外については以下を参照)。エントリーが ACL_NSUSER の uid および oldgid の gid を持つ場合 (グループベースの ACL エントリー)、 chownacl() は gid を newgid に変更します。どちらの場合も、最後に一致した ACL エントリーだけが変更されます。有効な ACL は各タイプのいずれかひとつだけを持つことができます。 chown(2) に関して、新規のユーザーまたはグループがすでに ACL エントリーを持っている場合 uid が newuid および gid が ACL_NSGROUP、 または uid が ACL_NSUSER および gid が newgid)、 chownacl() は旧ユーザーまたはグループベース ACL エントリーを変更しません。新旧エントリーの両方の ACL が維持されます。 特殊な場合として、 olduid oldgid) が newuid newgid) に等しい場合、 chownacl() は、変更する旧ユーザー (グループ) ベースの ACL エントリーを求めて acl[] を検索しません。 olduid が newuid に等しい場合、 および oldgid が newgid に等しい場合、 chownacl() は呼び出されても何も行いません。 ヒントこのルーチンは、別のユーザーまたはグループが所有していた (または所有していた可能性がある) オリジナルファイルの新規コピー、または置換コピーを作成するプログラム内、および旧ファイルの ACL を新ファイルにコピーするプログラムに使用すると便利です。ユーザーまたはグループ、あるいはそれらの両方が異なるファイルをコピーすることは、オリジナルファイルの所有者 またはグループ、あるいはそれらの両方にファイルをコピーさせ、そのファイルを chown() 使って、新規の所有者および/またはグループに転送するのと同じことです。このルーチンでは、ファイルの所有権の変更はほとんど不要です。 chown() によって ACL が適宜変更されます。 プログラムが、ファイルの混合モードビットも旧ファイルから新ファイルへコピーする場合、 そのプログラムは chmod() chmod(2) 参照) を使わなければなりません。しかし、 chmod() はオプションの ACL エントリーを削除するため、 setacl() setacl(2) 参照) の前に呼び出さなければなりません。さらに、新ファイルが一時的に保護されない状態で放置されるのを防ぐために、 chmod() 呼び出しはすべてのアクセスパーミッション モードビットがゼロにセットされた状態で (07000 でモードをマスクする)、ファイルの混合モードビットだけをセットする必要があります。 cpacl() ライブラリ呼び出しはこの動作をカプセル化して、リモートファイルも適宜取り扱います。 例次のコーディング例は、 oldfile から stat() 情報と ACL を取得して newfile の所有権を呼び出し側に転送し、 newfile に修正後の ACL をセットします。 #include <sys/types.h> |
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||