Trusted Solaris 開発ガイド

プロセス認可上限の変換

ラベルと同じように、認可上限もバイナリ、ASCII、16 進のいずれかで示すことができます。カーネル内部では、認可上限はすべてバイナリ形式で格納されます。バイナリは、プログラムインタフェース上でやり取りされる認可上限に使用される形式です。

バイナリと ASCII

次の例は、バイナリ認可上限を長形式の語句を使用した、 ASCII に変換します。TS A B で動作しているプロセスは、バイナリ認可上限に同等で、特権を必要としません。


注 -

ASCII の入出力形式、規則、およびフラグの詳細は、「バイナリと ASCII」を参照してください。


#include <tsol/label.h>
 main()
 {
 	int			retval, length = 0;
 	bclear_t			pclear;
 	char			*string = (char *)0;

 	retval = getclearance(&pclear);
 	retval = bcleartos(&pclear, &string, length, LONG_WORDS);
 	printf("Process clearance = %s¥n", string);
 }

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

Process clearance = TS ABLE BAKER

次の例は、プロセスのラベルを 5 文字以内にクリッピング (長さを変更) します。クリッピングは、pclear 内の文字数が指定された長さを超える場合に行われます。

#include <tsol/label.h>

 main()
 {
 	int			retval;
 	bclear_t			pclear;
 	char			*string = (char *)0;

 	retval = getclearance(&pclear);
 	string = sbcleartos(&pclear, 5);
 	printf("Clipped process clearance = %s¥n", string);
 }

printf 文によって、次のように出力されます。<- は、名前がクリッピングされたことを示します。この <- は、2 文字としてクリッピング後の文字数に含まれます。

Clipped process clearance = TS<-

次の例は、ASCII 文字列をバイナリ認可上限に変換します。

#include <tsol/label.h>

 main()
 {
 	int			retval, error;
 	bclear_t			bclear;
 	char			*labelstring = "TS ABLE BAKER";

 	retval = stobclear(labelstring, &bclear, NEW_LABEL, &error);
 	if (retval == 0)
 		printf("Error = %d¥n", error);
 	else
 		printf("Retval = %d¥n", retval);
 }

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

Retval = 1

バイナリと 16 進

バイナリから 16 進への変換には、通常ルーチンと再入可能ルーチンの 2 種類のルーチンがあります。どちらのルーチンも、変換後の文字列へのポインタを返します。また、渡された認可上限が bclear_t 型でなければ NULL を返します。

通常ルーチン

次の例は、バイナリのプロセス認可上限を 16 進に変換し、再び元に戻します。

#include <tsol/label.h>

 main()
 {
 	int			retval;
 	bclear_t			hclear;
 	char			*string ;

 	retval = getclearance(&hclear);

 	if((string = bcleartoh(&hclear)) != 0)
 		printf("Hex string = %s¥n", string);

 	retval = htobclear(string, &hclear);
 	printf("Return Value = %d¥n", retval);
 }

最初の printf(1) 文により、バイナリの認可上限が次のように 16 進形式で出力されます。

0xClearance hexadecimal value

2 番目の printf 文により、次のように出力されます。0 以外は、変換が成功したことを示します。

Return Value = 1

再入可能ルーチン

再入可能 (MT - 安全、マルチスレッドに対して安全) ルーチン bcleartoh_r(3) は、返される値に対する記憶領域の割り当てと開放を必要とします。h_alloc(3) ルーチンは、変換されるラベルの型 (この場合は 16 進形式) にあわせて適切なサイズの記憶領域を割り当てるのに使用されます。

が 16 進値である場合は、定義された認可上限 (SUN_CLR_ID) が 16 進に変換されることを表します。

次の例は、変換の型に対し記憶領域を割り当て、バイナリのプロセス認可上限を 16 進に変換し、最後に記憶領域を解放します。

#include <tsol/label.h>

 main()
 {
 	bclear_t			 hclear;
 	char			*string, *hex;

 	getclearance(&hclear);
 	hex = h_alloc(SUN_CLR_ID);
 	if((string = bcleartoh_r(&hclear, hex)) != 0);
 		printf("Hex string = %s¥n", string);

 	h_free(hex);
 }

printf(1) 文により、次のように 16 進形式でバイナリ認可上限が出力されます。


Hex string = 0x0006cc0000000000000000000000000000000000000 
000000003ffffffffffff0000