Trusted Solaris 開発ガイド

バイナリラベルの初期化と型のチェック

次のインタフェースは、ラベルを ADMIN_HIGHADMIN_LOW、および未定義に初期化します。ADMIN_HIGH はもっとも高い格付け番号であり、すべてのコンパートメントとマーキングを含んでいます。ADMIN_HIGH は、システム内のほかのすべてのラベルより完全に優位です。通常のユーザーは、ADMIN_HIGH のファイルの読み書きはできません。

ADMIN_LOW は、コンパートメントもマーキングも含まない 0 の格付けを示します。すべてのユーザーは、機密ラベル ADMIN_LOW のファイルの読み取りまたは実行ができます。しかし、通常のユーザーは ADMIN_LOW のファイルへの書き込みはできません。システム内のほかのすべてのラベルは、ADMIN_LOW より完全に優位です。ADMIN_LOW は、アクセスが公開されているシステムファイルやコマンドに割り当てられます。

未定義は NULL と同様に、無効なラベルを示します。機密ラベルは、ID フィールドが SUN_SL_UN に初期化された場合、未定義になります。未定義のラベルは無効です。CMW ラベルには未定義状態はなく、機密ラベル部と情報ラベル部だけが未定義状態になることがあります。

CMW ラベル、機密ラベルは、ラベル構造の ID フィールドが SUN_CMW_ID または SUN_SL_ID のいずれかに初期化され定義された状態になります。定義済みの CMW ラベルに含まれる機密ラベル部や情報ラベル部は、定義済みの場合と未定義の場合があります。

次の例は、ラベルを未定義、ADMIN_HIGHADMIN_LOW に初期化し、続いてラベルの型をチェックして出力します。

#include <tsol/label.h>

 main()
 {
 	int					retval;
 	
 	bslabel_t					psenslabel;
 	bclabel_t					pCMWlabel;

/* ラベルを初期化する*/
 	bclundef(&pCMWlabel);
 	bslhigh(&psenslabel);
 	
/* ラベルの型を調べる */
 	retval = bltype(&psenslabel, SUN_SL_ID);
 	printf("Is sensitivity label defined? %d¥n", retval);
 	
/* CMW ラベル型を定義済みにする */
 	setbltype(&pCMWlabel, SUN_CMW_ID);
 	retval = bltype(&pCMWlabel, SUN_CMW_ID);
 	printf("Is CMW label defined? %d¥n", retval);
 }

printf 文によって、次のように出力されます。0 以外は true で、0 は false を示します。

Is sensitivity label defined? 1

Is CMW label defined? 0