次の例は、呼び出し元プロセスの CMW ラベルを取得し、機密ラベル部を昇格して TOP SECRET に設定します。変更された CMW ラベルは、特権プロセスで設定されます。呼び出しプロセスは、機密ラベルを変更するのに有効セット内に proc_setsl 特権が必要です。第 3 章「特権」で説明している特権のブラケット化が必要な位置は、コード内のコメントで示してあります。
#include <tsol/label.h> main() { int retval, error, length = 0; bclabel_t pCMWlabel; bslabel_t psenslabel; char *string = "TOP SECRET", *string1 = (char *)0; /* 機密ラベル部の新しい値を CMW ラベルに設定する */ retval = stobsl(string, &psenslabel, NEW_LABEL, &error); setcsl(&pCMWlabel, &psenslabel); /* プロセスの CMW ラベルを新しい CMW ラベルに設定する */ /* 有効セット内で proc_setsl をオン (有効)にする */ retval = setcmwplabel(&pCMWlabel, SETCL_SL); /* proc_setsl をオフ (無効) にする */ /* プロセスの CMW ラベルを文字列に変換し、出力する */ /* 有効セット内で sys_trans_label 特権をオン (有効)にする */ retval = bcltos(&pCMWlabel, &string1, length, LONG_CLASSIFICATION); /* sys_trans_label をオフ (無効) にする */ printf("Process CMW label = %s¥n", string1); }
printf 文によって、次のように出力されます。TOP SECRET は情報ラベルを表し、[TS] は機密ラベルを表します。
Process CMW label = TOP SECRET [TS]
ASCII 出力は、bcltos(3) のフラグパラメータと、label_encodings(4) 内の記述によって異なります。フラグパラメータ値の詳細は、「バイナリから ASCII への変換」を参照してください。
setcmwplabel(2) に渡される SETCL_SL 値は、CMW ラベルの両方のラベル部を設定します。