バイナリから 16 進への変換には、通常ルーチンと再入可能ルーチンの 2 種類のルーチンがあります。どちらのルーチンも変換結果を含んだ文字列のポインタを返し、変換されるラベルがバイナリラベルでない場合は、NULL を返します。
バイナリラベル - 格付けは整数値として格納され、コンパートメントとマーキングは 0 と 1 のビットベクトルとして格納されます。
16 進ラベル - 対応するバイナリラベルと同じビットパターンを表す 16 進数の ASCII 表現です。
次の例は、バイナリの CMW ラベルを 16 進に変換し、再び元に戻します。機密ラベルの変換と情報ラベルの変換はほとんど同じです。
#include <tsol/label.h> #include <stdio.h> main() { int retval; bclabel_t hcmwlabel, hexcmw; char *string; getcmwplabel(&hcmwlabel); if((string = bcltoh(&hcmwlabel)) != NULL) printf("Hex string = %s¥n", string); retval = htobcl(string, &hexcmw); printf("Return Value = %d¥n", retval); }
最初の printf 文により、バイナリ CMW ラベルが次のように 16 進形式で出力されます。
0xClearance hexadecimal value
2 番目の printf 文により、次のように出力されます。0 以外は、変換が成功したことを示します。
Return Value = 1
再入可能 (MT-安全、マルチスレッドに対して安全) ルーチン bcleartoh_r(3) は、指定されたタイプの変数に対する記憶領域の割り当てと解放を必要とします。次の例は、記憶領域を割り当て、バイナリ CMW ラベルを 16 進に変換し、最後に記憶領域を解放します。機密ラベルまたは情報ラベルを 16 進に変換するプロセスと、元の形式に戻すプロセスはほとんど同じです。
#include <tsol/label.h> #include <stdio.h> main() { int retval; bclabel_t hcmwlabel, hexcmw; char *string, *hex; getcmwplabel(&hcmwlabel); hex = h_alloc(SUN_CMW_ID); if((string = bcltoh_r(&hcmwlabel, hex)) != NULL) printf("Hex string = %s¥n", string); retval = htobcl(string, &hexcmw); printf("Return Value = %d¥n", retval); h_free(hex); }
printf(1) 文により、次のように 16 進形式でバイナリ認可上限が出力されます。
Hex string =0x00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000[0x00040c0000000000000000000000 000000000000000000000003ffffffffffff0000] Return Value = 1 |