インタフェースからの機密ラベルと情報ラベルの 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