Trusted Solaris 開発ガイド

バイナリから ASCII への変換

この節の例は、バイナリラベルを ASCII に変換します。この変換では、label_encodings(4) 内のキーワード設定とフラグパラメータ値を使用します。ラベルの種類によって使えるフラグが制限されることはありませんが、すべてのフラグ値が、それぞれのラベルに有効なわけではありません。次の説明は、フラグが使用されるラベルの種類を示します。機密ラベルと情報ラベルに適用される設定は、CMW ラベルにも適用されます。


注 -

「プロセスのセキュリティ属性フラグの取得と設定」 で説明しているラベル表示プロセス属性には、ラベル表示の状態が含まれます。


CMW ラベル

CMW ラベルの ASCII 出力形式を、次に示します。

情報ラベル [機密ラベル]

次の例は、CMW ラベルを ADMIN_HIGH [ADMIN_HIGH] に初期化し、内部表示と外部表示を出力します。このプロセスは ADMIN_HIGH で動作するため、ADMIN_HIGH [ADMIN_HIGH] ラベルを変換するのに特権を必要としません。

#include <tsol/label.h>

 main()
 {
 	int 			retval, length = 0;
 	char 			*string1 = (char *)0, *string2 = (char *)0;
 	bclabel_t			cmwlabel;

 	bclhigh(&cmwlabel);
 	retval = bcltos(&cmwlabel, &string1, length, VIEW_INTERNAL);
 	printf("View Internal = %s¥n", string1);

 	retval = bcltos(&cmwlabel, &string2, length, VIEW_EXTERNAL);
 	printf("View External = %s¥n", string2);
 }

printf 文によって、次のように出力されます。


View Internal = ADMIN_HIGH [ADMIN_HIGH]

View External = TOP SECRET CC SB BRAVO1 BRAVO3 SA ALPHA1 
PROJECT X/PROJECT Y LIMDIS ORCON ORG X/ORG Y D/E ALL EYES 
NOFORN [TS A B SA SB CC]

注 -

bclhigh(3) と、bclmanifest(3) ファミリの他の関数を使用すると CMW ラベルの情報ラベルの値を操作できますが、この値をオブジェクトに対して設定することはできません。デフォルトで、オブジェクトの情報ラベルはすべて ADMIN_LOW です。


機密ラベルと情報ラベル

インタフェースからの機密ラベルと情報ラベルの ASCII 出力形式を、次に示します。区切り文字には空白文字が使用されます。中括弧はオプション項目を示し、ピリオドは語句の繰り返しを示します。語句は、機密ラベルではコンパートメントを表し、情報レベルではコンパートメントとマーキングを表します。

格付け {語句}...

次のコード例は、さまざまなフラグを使用してバイナリの機密ラベルを ASCII に変換します。このプロセスは、TS A B で動作するので、bslhigh(3) に対する呼び出しの後、変換のため sys_trans_label 特権を必要とします。第 3 章「特権」で説明している特権のブラケット化が必要な位置は、コード内のコメントで示してあります。

#include <tsol/label.h>
 main()
 {
 	int				retval, length = 0;
 	char 				*string1 = (char *)0, *string2 = (char *)0,
 					*string3 = (char *)0, *string4 = (char *)0,
 					*string5 = (char *)0, *string6 = (char *)0,
 					*string7 = (char *)0;
 	bclabel_t				cmwlabel;
 	bslabel_t				senslabel;

 	retval = getcmwplabel(&cmwlabel);
 	getcsl(&senslabel, &cmwlabel);

 	retval = bsltos(&senslabel, &string1, length, LONG_WORDS);
 	printf("Retval1 = %d Long Words = %s¥n", retval, string1);

 	retval = bsltos(&senslabel, &string2, length, SHORT_WORDS);
 	printf("Retval2 = %d Short Words = %s¥n", retval, string2);

 	retval = bsltos(&senslabel, &string3, length, LONG_CLASSIFICATION);
 	printf("Retval3 = %d Long Classifications = %s¥n", retval, string3);

 	retval = bsltos(&senslabel, &string4, length, SHORT_CLASSIFICATION);
 	printf("Retval4 = %d Short Classifications = %s¥n", retval, string4);

 	retval = bsltos(&senslabel, &string5, length, NO_CLASSIFICATION);
 	printf("Retval5 = %d No Classification = %s¥n", retval, string5);

 	bslhigh(&senslabel);
/* 有効セット内で sys_trans_label をオン (有効) にする */
 	retval = bsltos(&senslabel, &string6, length, VIEW_INTERNAL);
/* sys_trans_label をオフ (無効) にする */
 	printf("Retval6 = %d View Internal = %s¥n", retval, string6);

 	retval = bsltos(&senslabel, &string7, length, VIEW_EXTERNAL);
 	printf("Retval7 = %d View External = %s¥n", retval, string7);
 }

printf 文により、次のように出力されます。

Long Words = TS A B

Short Words = TS A B

Long Classifications = TOP SECRET A B

Short Classifications = TS A B

No Classification = A B

View Internal = ADMIN_HIGH

View External = TS A B SA SB CC