本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (A~M) > c

chownacl(3C)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

chownacl() ― ファイルのアクセス制御リスト (ACL) 内に示されている所有者およびグループ、あるいはどちらか一方の変更

構文

#include <acllib.h> 
 
void chownacl( 
     int nentries, 
     const struct acl_entry *acl, 
     uid_t olduid, 
     gid_t oldgid, 
     uid_t newuid, 
     gid_t newgid 
); 

変化し続けている業界標準に確実に準拠していくために、このマニュアルエントリーに記載されている特徴も随時改訂していく予定です。

説明

このルーチンは、旧ファイルが新ファイルにコピーされる際に ACL も同時にコピーされた場合、ファイルの所有者およびグループの ID の変更を反映してアクセス制御リスト (ACL) を変更します。 chownacl()chown() chown(2) 参照) と同様の方法で所有権を転送します (ベース ACL エントリーを修正します)。アルゴリズムは以下および acl(5) に記載しました。

nentries パラメータは、 acl[] 配列 (ゼロ以上;負の値はゼロとして取り扱われます) 内の ACL エントリーのカレント個数です。 olduidoldgid の値は、オリジナルファイルの所有者のユーザーおよびグループ ID で、通常は stat() stat(2) 参照) から返される st_uidst_gid の値です。 newuidnewgid の値は新規ファイルの所有者のユーザーおよびグループ ID で、通常は geteuid() および getegid() getuid(2)geteuid(2) および getegid(2) を参照) から返される値です。

ACL の acl[] 内のエントリーが olduiduid および ACL_NSGROUPgid を持つ場合 (所有者ベースの ACL エントリー)、 chownacl()uidnewuid に変更します (例外については以下を参照)。エントリーが ACL_NSUSERuid および oldgidgid を持つ場合 (グループベースの ACL エントリー)、 chownacl()gidnewgid に変更します。どちらの場合も、最後に一致した ACL エントリーだけが変更されます。有効な ACL は各タイプのいずれかひとつだけを持つことができます。

chown(2) に関して、新規のユーザーまたはグループがすでに ACL エントリーを持っている場合 uidnewuid および gidACL_NSGROUP、 または uidACL_NSUSER および gidnewgid)、 chownacl() は旧ユーザーまたはグループベース ACL エントリーを変更しません。新旧エントリーの両方の ACL が維持されます。

特殊な場合として、 olduid oldgid) が newuid newgid) に等しい場合、 chownacl() は、変更する旧ユーザー (グループ) ベースの ACL エントリーを求めて acl[] を検索しません。 olduidnewuid に等しい場合、 および oldgidnewgid に等しい場合、 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>
#include <sys/stat.h>
#include <sys/acl.h>
 
int nentries;
struct acl_entry acl [NACLENTRIES];
struct stat statbuf;
 
if (stat ("oldfile", & statbuf) < 0)
     error (...);
 
if ((nentries = getacl ("oldfile", NACLENTRIES, acl)) < 0)
     error (...);
 
chownacl (nentries, acl, statbuf.st_uid, statbuf.st_gid,
     geteuid(), getegid());
 
if (setacl ("newfile", nentries, acl))
     error (...);

著者

chownacl() は HP で開発されました。

参照

chown(2), getacl(2), getegid(2), geteuid(2), getuid(2), setacl(2), stat(2), acltostr(3C), cpacl(3C), setaclentry(3C), strtoacl(3C), acl(5), thread_safety(5)

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.