プロセスとファイルシステムオブジェクトのラベルについて、一般的な操作を行なったりアクセスしたりするときに、次に示すプログラミングインタフェースを使用できます。
次のシステムコールは、ファイルまたはプロセスの CMW ラベルの取得と設定を行なったり、ファイルシステムのラベル範囲を取得したりします。
別のプロセスまたはファイルシステムのオブジェクトにラベルを設定するプロセスはすべて、label_encodings ファイルの定義どおりに有効なラベルを設定しなければなりません。また、この種のプロセスは、正しいバイナリ型のラベルを渡す必要があります。ASCII からバイナリへの変換機能は、変換により正しいバイナリラベルが得られるように、できるかぎりラベルを修正します。しかし、ラベルが有効であるか、bslvalid(3) ルーチンを使用してさらに調べる場合もあります。正しく構築されたバイナリラベルでも、一定のシステムまたはユーザーには無効な場合もあるため、ラベルがシステム認可またはユーザー認可の範囲内であるか、blinset(3) ルーチンを使用して検査してください。
次のシステムコールは、パス名またはファイル記述子を使用して、ファイルの CMW ラベルの取得と設定を行います。詳細は、setcmwlabel(2) と getcmwlabel(2) のマニュアルページを参照してください。
int setcmwlabel( const char *path, const bclabel_t *label, const setting_flag_t flag); int getcmwlabel( const char *path, const bclabel_t *label); int fsetcmwlabel( const int fd, const bclabel_t *label, const setting_flag_t flag); int fgetcmwlabel( const int fd, bclabel_t *label); int lsetcmwlabel( const int fd, const bclabel_t *label, const setting_flag_t flag); int lgetcmwlabel( const int fd, bclabel_t *label);
次のシステムコールは、プロセスの CMW ラベルの取得と設定を行います。詳細は、setcmwplabel(2) と getcmwplabel(2) のマニュアルページを参照してください。
int setcmwplabel( const bclabel_t *label, const setting_flag_t flag); int getcmwplabel( const bclabel_t *label);
次のシステムコールは、ファイルシステムのラベル範囲を取得します。詳細は、getcmwfsrange(2) のマニュアルページを参照してください。
int getcmwfsrange( char *path, brange_t *range); int fgetcmwfsrange( int fd, brange_t *range);
次のライブラリルーチンは、ラベルのアクセス、初期化、比較、変換、および検証を行います。また、label_encodings(4) 情報の取得も行います。
次のルーチンは、CMW ラベルを ADMIN_HIGH、ADMIN_LOW、または NULL に似た定義されていない状態に初期化します。詳細は、blmanifest(3) のマニュアルページを参照してください。
void bclhigh( bclabel_t *label); void bcllow( bclabel_t *label); void bclundef( bclabel_t *label);
次のルーチンは、CMW ラベルの機密ラベル部にアクセスします。詳細は、blportion(3) のマニュアルページを参照してください。
void getcsl( bslabel_t *destination_label, const bclabel_t *source_label); void setcsl( bclabel_t *destination_label, const bslabel_t *source_label); bslabel_t *bcltosl( bclabel_t *label);
次のルーチンは、機密ラベルを ADMIN_HIGH、ADMIN_LOW、定義されていない状態のいずれかに初期化します。詳細は、blmanifest(3) のマニュアルページを参照してください。
void bslhigh( bslabel_t *label); void bsllow( bslabel_t *label); void bslundef( bslabel_t *label);
次のルーチンは、 level1 と level2 の 2 つのレベルを比較し、両者が同等か、level1 が level2 よりも優位であるか、あるいは level1 が level2 よりも完全に優位であるかを調べます。レベルとは、機密ラベルまたは認可上限内の、格付けおよびコンパートメントのことです。
返される値のうち、0 以外の値は true で、0 は false です。詳細は、 blcompare(3) のマニュアルページを参照してください。
int blequal( const blevel_t *level1, const blevel_t *level2); int bldominates( const blevel_t *level1, const blevel_t *level2); int blstrictdom( const blevel_t *level1, const blevel_t *level2); int blinrange( const blevel_t *level, const brange_t *range);
次のルーチンは、ラベルのタイプを検査し、設定します。ラベルには、定義済みか末定義の CMW ラベル、機密ラベル、情報ラベルがあります。詳細は、bltype(3) のマニュアルページを参照してください
int bltype( const void *label const unsigned char type); void setbltype( void *label const unsigned char type);
次のルーチンは、 2 つのレベルを比較し、それら 2 つのレベルの範囲内の、高い方の下限 (blminimum(3)) または低い方の上限 (blmaximum(3)) を示す機密レベルを見つけます。レベルとは、機密ラベルまたは認可上限内の、格付けとコンパートメントのことです(詳細は、blcompare(3) のマニュアルページを参照)。
void blmaximum( blevel_t *maximum_label const blevel_t *bounding_label); void blminimum( blevel_t *minimum_label const blevel_t *bounding_label);
label_encodings ファイルは、システム管理者によって管理される ASCII ファイルで、サイト固有のラベルの定義と制約が記載されています。このファイルは、/etc/security/tsol/label_encodings に保存されます。label_encodings ファイルの詳細は、『Trusted Solaris のラベル管理』と『コンパートメントモードワークステーションのラベル作成: エンコード形式』を参照してください。
次のルーチンは、先頭から順に、最大文字列長の情報、使用中の label_encodings ファイルのバージョン、指定されたバイナリレベルに対する ASCII カラー名などの label_encodings ファイルで指定されている情報を戻します。
最大文字列長。labelinfo(3) のマニュアルページを参照してください。
int labelinfo( struct label_info *info);
使用中のバージョン。詳細は、labelvers(3) のマニュアルページを参照してください。
int labelvers( char **version, const int length);
バイナリレベルに対する ASCII カラー名。詳細は、bltocolor(3) のマニュアルページを参照してください
char bltocolor( const blevel_t *label); char bltocolor_t( const blevel_t *label, const int size, char * color_name);
次のルーチンは、指定された機密ラベルがシステムで有効であるか、つまり、システムの label_encodings ファイルで定義されているかを検査します。詳細は、blvalid(3) のマニュアルページを参照してください。
int bslvalid( const bslabel_t *senslabel);
次のルーチンは、機密ラベルが、システムの label_encodings ファイルで設定されているとおりのシステム認可範囲にあるかを検査します。詳細は、blinset(3) のマニュアルページを参照してください。
int blinset( const blevel_t *senslabel, const set_id *id);
次のルーチンは、バイナリの CMW ラベルまたは機密ラベルを ASCII に変換し、再び元に戻します。文字列からバイナリに変換する場合、flag (フラグ) が NEW_LABEL か NO_CORRECTION に設定されていれば、文字列は ASCII でも 16 進でも構いません。詳細は、bltos(3) と stobl(3) のマニュアルページを参照してください。
バイナリラベルを ASCII へ変換する、指定された幅に応じて最終的なラベルの長さを変える、Motif ベースのグラフィカルユーザーインタフェース (GUI) で表示用のフォントリストを使用する、などの処理を行う各インタフェースの詳細は、第 15 章「トラステッド X ウィンドウシステム」を参照してください。
int bcltos( const bclabel_t *label, char **string, const int length, const int flags); int stobcl( const char *string, bclabel_t *label, const int flags, int *error); /* 文字列を変換し、長さを変える */ char *sbcltos( const bclabel_t *label, const int length); /* プリンタバナーとヘッダーページに含めるために変換する */ char *bcltobanner( const bclabel_t *label, struct banner_fields *fields, const int flags);
int bsltos( const bslabel_t *label, char **string, const int length, const int flags); int stobsl( const char *string, bslabel_t *label, const int flags, int *error); /* 文字列を変換し、長さを変える */ char *sbsltos( const bslabel_t *label, const int length);
次のルーチンは、バイナリの CMW ラベル、機密ラベルを 16 進に変換し、再び元に戻します。btohex(3) と hextob(3) のマニュアルページを参照してください。
char h_alloc( const unsigned char id); void h_free( char *hex);
char *bcltoh( const bclabel_t *label); char *bcltoh_r( const bclabel_t *label, char *hex); int htobcl( const char *hex, bclabel_t *label);
char *bsltoh( const bslabel_t *label); char *bsltoh_r( const bslabel_t *label, char *hex); int htobsl( const char *hex, bslabel_t *label);