Trusted Solaris 開発ガイド

2 つのレベル間の関係の確認

レベルとは、機密ラベルの格付けとコンパートメントセットにより設定される認可上限のことで、データ型 blevel_t で定義します。2 つのレベルは、同等、一方が他方より優位、一方が他方より完全に優位のいずれかの関係になります。

次の例は、プロセスの機密ラベルとファイルの機密ラベルの関係をテストします。プロセスとファイルの CMW ラベルの取得、および機密ラベル部の抽出を行うコードは示されていないので、コード例については、「プロセス CMW ラベルの取得」「ファイル CMW ラベルの取得」を参照してください。

この例では、プロセスとファイルの機密ラベルは Confidential です。2 つのラベルの格付けは同等で、プロセスラベルがファイルラベルより優位ですが完全に優位ではありません。

#include <tsol/label.h>

 main()
 {
 	int 					equal, dominate, strictdom, retval;
 	bslabel_t 					plabel, filelabel;
 	bclabel_t 					fileCMWlabel, pCMWlabel;

/* ファイルとプロセスの CMW ラベルを得る */
 	retval = getcmwlabel("/export/home/zelda/afile", &fileCMWlabel);
 	retval = getcmwplabel(&pCMWlabel);

/* 機密ラベルを得る */
 	getcsl(&filelabel, &fileCMWlabel);
 	getcsl(&plabel, &pCMWlabel);

/* 得られた 2 つのラベルが同等か調べる */
 	equal = blequal(&plabel, &filelabel);
 	printf("Process label equals file label? %d¥n", equal);

/* 優位か調べる */
 	dominate = bldominates(&plabel, &filelabel);
 	printf("Process label dominates file label? %d¥n", dominate);

/* 完全に優位か調べる */
 	strictdom = blstrictdom(&plabel, &filelabel);
 	printf("Process label strictly dominates file label? %d¥n", strictdom);
 }

printf 文によって、次のように出力されます。0 を超える値は true で、0 は false です。

Process label equals file label? 1

Process label dominates file label? 1

Process label strictly dominates file label? 0