名前 | 形式 | 機能説明 | 戻り値 | エラー | 関連項目
#include <tsol/secflgs.h>int getfattrflag(const char *path, secflgs_t *flags);
setfattrflag()、fsetfattrflag()、mldsetfattrflag() は、名前が path で指定されているか、オープンファイル記述子 fildes で参照されているファイルのセキュリティフラグを設定します。どのフラグを設定するかは、which に指定されているビットパターンで決まります。flags 内の対応するビットが 1 か 0 に設定され、それぞれ設定または設定解除されます。
getfattrflag()、fgetfattrflag()、mldgetfattrflag() は、名前が path で指定されているか、オープンファイル記述子 fildes で参照されているファイルのセキュリティフラグを取得し、それを flags で指す場所に格納します。
属性ビットの意味は次のとおりです。
ディレクトリは MLD セマンティクスを持ちます。
ファイルシステムオブジェクトは公開オブジェクトです。
ディレクトリは SLD です。
属性ビットは、属性フラグビットを or することによって作成されます。
FAF_MLD は、ディレクトリが空で、プロセスの実効ユーザー ID がディレクトリ所有者と合致し、プロセスが必須および任意の書き込み権をもっているときに、特権なしで変更できる唯一のフラグです。いったん設定された FAF_MLD フラグは設定解除できません。さらに、FAF_MLD フラグは、mldsetfattrflag インタフェースを使って設定する必要があります。FAF_PUBLIC フラグの読み取りや変更ができるのは、PRIV_FILE_AUDIT
特権を処理するプロセスだけです。PRIV_FILE_AUDIT
特権なしで FAF_PUBLIC フラグを読み取ろうとすると、プロセスは異常終了しませんが、FAF_PUBLIC の値は未設定 unset として返されます。FAF_SLD フラグを設定することはできません。フラグを読み取れるかどうかは、プロセスがファイルに対する必須および任意の読み取り権を持っているかどうかに依存します。フラグを設定できるかどうかは、プロセスがファイルに対する必須および任意の書き込み権を持っているかどうかに依存します。
path がシンボリックリンクの場合、操作は、リンクの属性フラグではなく、ターゲットの属性フラグに作用します。path がマルチレベルディレクトリの場合には、getfattrflag() と setfattrflag() は、path が装飾されていなければ、マルチレベルディレクトリの下のシングルレベルディレクトリに作用します。mldgetfattrflag() と mldsetfattrflag() は、マルチレベルディレクトリをその下のシングルレベルディレクトリに変換しません。fgetfattrflag() と fsetfattrflag() は、fildes で参照されるファイルだけに作用します。
次の条件のどれかが該当する場合、getfattrflag() と mldgetfattrflag() は異常終了します。
path のパス接頭辞に検索権が拒否されている構成要素があります。この制約を除くには、呼び出し元プロセスで PRIV_FILE_DAC_SEARCH
か PRIV_FILE_MAC_SEARCH
特権の一方または両方を表明します。
path の最終構成要素に対する読み取り権が拒否されています。この制約を除くには、呼び出し元プロセスで PRIV_FILE_MAC_READ
特権を表明します。
path が不当なアドレスを指しています。
関数の実行でシグナルが検出されました。
ファイルシステムの読み取りで入出力エラーが発生しました。
path を変換するときに検出されたシンボリックリンクの数が多すぎます。
path の構成要素では複数のリモートマシンにホップする必要がありますが、このファイルシステムタイプではそれはできません。
path 引数の長さが PATH_MAX を超えているか、_POSIX_NO_TRUNC が有効なときに path の構成要素の長さが NAME_MAX を超えています。
パス接頭辞の構成要素か、path で参照されているファイルが存在しないか、NULL パス名です。
fildes がリモートマシンを指していますが、そのマシンへのリンクは、もはやアクティブではありません。
path の接頭辞にディレクトリでない構成要素があります。
次の条件のどれかが該当する場合、fgetfattrflag() は異常終了します。ファイルモードは変更されません。
fildes の読み取り権が拒否されています。この制約を除くには、呼び出し元プロセスで PRIV_FILE_MAC_READ
特権を表明します。
fildes はオープンファイル記述子ではありません。
ファイルシステムの読み取りで入出力エラーがありました。
fgetfattrflag() 関数の実行でシグナルが検出されました。
次の条件のどれかが該当する場合、setfattrflag()、mldsetfattrflag() は異常終了します。ファイルモードは変更されません。
path のパス接頭辞に検索権が拒否されている構成要素があります。この制約を除くには、呼び出し元プロセスで PRIV_FILE_DAC_SEARCH
か PRIV_FILE_MAC_SEARCH
特権の一方または両方を表明します。
path に対する書き込み権が拒否されています。この制約を除くには、呼び出し元プロセスで PRIV_FILE_MAC_WRITE
特権を表明します。
呼び出し元プロセスは fildes を所有していません。この制約を除くには、呼び出し元プロセスで PRIV_FILE_OWNER
特権を表明します。
path が不当なアドレスを指しています。
関数の実行でシグナルが検出されました。
path は有効なパス名ではありません。FAF_MLD の設定では、path は空のディレクトリを参照していなければなりません。
ファイルシステムへの書き込みで入出力エラーが発生しました。
path を変換するときに検出されたシンボリックリンクの数が多すぎます。
path の構成要素では複数のリモートマシンにホップする必要がありますが、このファイルシステムタイプではできません。
path 引数の長さが PATH_MAX を超えているか、_POSIX_NO_TRUNC が有効なときに path の構成要素の長さが NAME_MAX を超えています。
パス接頭辞の構成要素、または path で参照されているファイルが存在しないか、NULL パス名です。
path がリモートマシンを指していますが、そのマシンへのリンクは、もはやアクティブではありません。
path の接頭辞にディレクトリでない構成要素があります。
実効ユーザー ID がファイルの所有者と一致せず、またプロセスが特権 PRIV_FILE_OWNER
を所有していません。
プロセスが特権 PRIV_FILE_AUDIT
を所有していないのに、FAF_PUBLIC フラグを設定しようとしています。
path で参照されているファイルが読み取り専用ファイルシステムにあります。
次の条件のどれかが該当する場合、fsetfattrflag() は異常終了します。ファイルモードは変更されません。
呼び出し元プロセスは fildes を所有していません。この制約を除くには、呼び出し元プロセスで PRIV_FILE_OWNER
特権を表明します。
fildes に対する書き込み権が拒否されています。この制約を除くには、呼び出し元プロセスで PRIV_FILE_MAC_WRITE
特権を表明します。
fildes は有効なパス名ではありません。FAF_MLD の設定では、fildes は空のディレクトリを参照していなければなりません。
fildes はオープンファイル記述子ではありません。
ファイルシステムへの書き込みで入出力エラーが発生しました。
fsetfattrflag() 関数の実行でシグナルが検出されました。
プロセスが特権 PRIV_FILE_AUDIT
を所有していないのに、FAF_PUBLIC フラグを設定しようとしています。
fildes で参照されているファイルが読み取り専用ファイルシステムにあります。