Trusted Solaris 開発ガイド

プロセス CMW ラベルの機密ラベル部の設定

次の例は、呼び出し元プロセスの 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 ラベルの両方のラベル部を設定します。