Trusted Solaris 開発ガイド

バイナリと 16 進

バイナリから 16 進への変換には、通常ルーチンと再入可能ルーチンの 2 種類のルーチンがあります。どちらのルーチンも変換結果を含んだ文字列のポインタを返し、変換されるラベルがバイナリラベルでない場合は、NULL を返します。

通常ルーチンによるバイナリと 16 進変換

次の例は、バイナリの 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

再入可能ルーチンによるバイナリと 16 進変換

再入可能 (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