アプリケーションが、異なる機密ラベルでデータにアクセスする場合、アクセス操作を許可する前に、コードを検査してプロセスラベルとデータラベルの関係が正しいことを確認します。アクセスされるオブジェクトの機密ラベルを検査して、システムによってアクセスが許可されるかどうかを判別します。
次のコーディング例は、2 つの機密ラベルの等位、優位、および厳密優位を検査する方法を示します。プログラムは、ファイルのラベルに対してプロセスのラベルが優位であるか、または等位であるかを検査します。
#include <stdio.h>
#include <stdlib.h>
#include <tsol/label.h>
main(int argc, char *argv[])
{
m_label_t *plabel;
m_label_t *flabel;
plabel = m_label_alloc(MAC_LABEL);
flabel = m_label_alloc(MAC_LABEL);
if (getplabel(plabel) == -1) {
perror("getplabel");
exit(1);
}
if (getlabel(argv[1], flabel) == -1) {
perror("getlabel");
exit(1);
}
if (blequal(plabel, flabel)) {
printf("Labels are equal\n");
}
if (bldominates(plabel, flabel)) {
printf("Process label dominates file label\n");
}
if (blstrictdom(plabel, flabel)) {
printf("Process label strictly dominates file label\n");
}
m_label_free(plabel);
m_label_free(flabel);
return (0);
}
このプログラムによって出力されるテキストは、次のように、プロセスに渡されたファイルのラベルを基準にしたプロセスのラベルに依存します。
"dominates" は "equal" を含むので、ラベルが等位である場合の出力は、次のようになります。
Labels are equal Process label dominates file label |
プロセスのラベルがファイルのラベルより厳密に優位である場合の出力は、次のようになります。
Process label strictly dominates file label |