Trusted Solaris 開発ガイド

プロセス CMW ラベルの取得

プロセスの CMW ラベルを取得した際に、CMW ラベルを一単位として処理することも、また、1 つあるいは両方のラベル部を抽出し、ラベル部だけを処理することもできます。次の例では、プロセスの CMW ラベルを取得し、機密ラベル部と情報ラベル部を抽出し、プロセス CMW ラベルを ASCII 文字列に変換し、出力します。

#include <tsol/label.h>

 main()
 {
 	int					retval, length = 0;
 	bclabel_t					pCMWlabel;
 	bslabel_t					psenslabel;
 	bilabel_t					pinflabel;
 	char 					*string;

/* プロセスの CMW ラベルを得る */
 	retval = getcmwplabel(&pCMWlabel);

/* 機密ラベル部と情報ラベル部を得る */
 	getcsl(&psenslabel, &pCMWlabel);
 	getcil(&pinflabel, &pCMWlabel);

/* プロセスの CMW ラベルを ASCII 文字列に変換し、出力する */
 	retval = bcltos(								&pCMWlabel, &string, length, LONG_CLASSIFICATION);
 	printf("Process CMW label = %s¥n", string);
 }

printf 文によって、次のように出力されます。UNCLASSIFIED は情報ラベルを表し、[C] は機密ラベルを表します。この CMW ラベルは、プロセスが、情報ラベル UNCLASSIFIED を使用して、機密レベル Confidential ([C]) で動作していることを示します。この CMW ラベルは、プログラムが動作しているワークスペースから継承されます。プログラムがデータを読み取ると、プロセスの情報ラベルは読み取られるデータの情報ラベルに応じて浮上します。

Process CMW label = UNCLASSIFIED [C]

ASCII 出力は、bcltos(3) に対するフラグパラメータと、label_encodings(4) 内の記述によって異なります。フラグパラメータ値の詳細は、「バイナリから ASCII への変換」を参照してください。