レベルとは、機密ラベルの格付けとコンパートメントセットにより設定される認可上限のことで、データ型 blevel_t で定義します。2 つのレベルは、同等、一方が他方より優位、一方が他方より完全に優位のいずれかの関係になります。
同等 - 2 つのレベルの格付けの階層の位置が数学的に等しいとき、この 2 つのレベルは「同等」です。このとき、一方のコンパートメントは他方のコンパートメントをすべて含みその以外のコンパートメントを含んではいけません。
優位 - 格付けの階層において一方のレベルの格付けが他方のレベルの各付けより数学的に大きいか等しく、また、一方のコンパートメントが他方のコンパートメントをすべて含むとき、このレベルは他方のレベルより「優位」です。
完全な優位 - レベル 1 がレベル 2 より優位であるが、レベル 2 と等しくない場合、レベル 1 はレベル 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