Trusted Solaris 開発ガイド

コード例

次の例は、NEW_LABEL フラグを使用して、ASCII 文字列をバイナリの CMW ラベル、機密ラベル、情報ラベルに変換し、再び元の ASCII に戻します。また、機密ラベルを指定された長さに変換する (クリッピング) 例も示しています。プロセスが SECRET B A [TS] 以上で作動する場合は、ラベル変換に sys_trans_label 特権を必要としません。

#include <tsol/label.h>

 main()
 {
 	int 			retval, error, length = 0;
 	char			*cmwstring ="SECRET A B [TOP SECRET A B]";
 	char 			*sensstring = "TOP SECRET A B";
 	char			*string1 = (char *)0, *string2 = (char *)0,
 				*string3 = (char *)0;
 	bclabel_t			cmwlabel;
 	bslabel_t			senslabel;


 	retval = stobcl(cmwstring, &cmwlabel, NEW_LABEL, &error);
 	retval = bcltos(&cmwlabel, &string1, length, ALL_ENTRIES);
 	retval = stobsl(sensstring, &senslabel, NEW_LABEL, &error);
 	retval = bsltos(&senslabel, &string2, length, ALL_ENTRIES);
 	string3 = sbsltos(&senslabel, 4);
 	
 	printf("CMW label = %s¥nSens label = %s¥nClipped label = %s¥nInf
 			label= %s¥n", string1, string2, string3);
 }

printf 文により、次のように出力されます。Clipped label (クリッピングされたラベル) 中の矢印 <- は、機密ラベル名の文字がクリッピングされたことを示します。

CMW label = SECRET B A [TS A B]

Sen label = TS A B

Clipped label = TS<-