プロセスがより高い機密ラベルのファイルに書き込みを行う場合や、オブジェクトの CMW ラベルを変更する場合、システムはファイルの機密ラベルがプロセスの機密ラベルよりも優位であり、プロセス認可上限がファイルの機密ラベルよりも優位であることをチェックします。アプリケーションが複数の異なる機密ラベルのファイルに書き込みを行う場合、必要に応じ、コード内でこれらのチェックを実行してエラーを見つけることも、必要に応じて有効セットに特権を追加することもできます。
バイナリファイル CMW ラベル、プロセス CMW ラベル、プロセス認可上限を取得する
ファイル CMW ラベルとプロセス CMW ラベルの機密ラベル部を取得する
プロセスの機密ラベルとファイルの機密ラベル、プロセス認可上限とファイルの機密ラベルを比較し、優位をチェックする
比較の結果 0 が返されると (プロセスの機密ラベルと認可上限はファイルの機密ラベルより優位でない)、ファイル CMW ラベルの変更やファイルへの上位書き込み操作は特権を必要とします。特権の詳細は、「特権と承認」を参照してください。
第 5 章「ラベル」と第 7 章「プロセス認可上限」では、バイナリ形式のラベルまたは認可上限を ASCII 形式に変換するプログラミングインタフェースについて説明します。ASCII 形式に変換すると、文字列のように処理できます。
#include <tsol/label.h>
main()
{
int retval, retvalclearance, retvalsens;
bclabel_t filecmwlabel, processcmwlabel;
bslabel_t filesenslabel, processsenslabel;
bclear_t processclearance;
char *file = "/export/home/labelfile";
/* ファイルの CMW ラベルを得る */
retval = getcmwlabel(file, &filecmwlabel);
/* プロセスの CMW ラベルを得る */
retval = getcmwplabel(&processcmwlabel);
/* CMW ラベルの機密ラベル部を得る */
getcsl(&filesenslabel, &filecmwlabel);
getcsl(&processsenslabel, &processcmwlabel);
/* プロセスの認可上限を得る */
retval = getclearance(&processclearance);
/* プロセスのラベルがファイルのラベルより優位か調べる (retvalclearance > 0) */
retvalclearance = bldominates(&processsenslabel, &filesenslabel);
/* プロセスの認可上限がファイルのラベルより優位か調べる (retvalsens > 0) */
retvalsens = bldominates(&processclearance, &filesenslabel);
/* 検査の結果 */
if(retvalclearance && retvalsens > 0)
{ /* ファイル CMW ラベルの変更あるいはファイルへの書き込み */}
else if (retvalclearance == 0)
{ /* エラーメッセージの表示あるいは該当する有効な特権の作成 */}
else if (retvalsens == 0)
{ /* エラーメッセージの表示あるいは該当する有効な特権の作成 */}
}