Trusted Solaris 開発ガイド

メッセージのセキュリティ属性

この例では、次の手順によって、msg とともに送信する機密ラベルと認可上限の新しい属性値を設定します。

msg を送信するプロセスは Confidential であるため、認可上限と機密ラベルを変更するために、有効セットに net_setclrnet_upgrade_sl 特権が必要です。新しい機密ラベルと認可上限は、送信プロセスから受け取った msg の機密ラベルと認可上限を無効にします。コード内のコメントは、第 3 章「特権」で説明している特権ブラケットが必要な位置を示します。

#include <tsix/t6attrs.h>
 #include <tsol/label.h>

 main()
 {
 	int				retval, sock, error;
 	t6attr_t				sendattrs
 	t6mask_t				sendmask;
 	char				*msg = "Hello World!";
 	bslabel_t				senslabel;
 	bclear_t				clearance;

/* 機密ラベルとプロセスの認可上限のセキュリティ属性フィールドを */
/* 使用してマスクを初期化する */
 	sendmask = T6M_SL | T6M_CLEARANCE;

/* マスクを使用して 2 つのセキュリティ属性構造体に */
/* 必要なだけの領域を割り当てる */
 	sendattrs = t6alloc_blk(sendmask);

/* 機密ラベルと認可上限を Top Secret に初期化する */
 	stobsl("TOP SECRET", &senslabel, NEW_LABEL, &error);
 	stobclear("TOP SECRET", &clearance, NEW_LABEL, &error);

/* メッセージと一緒に送られるセキュリティ属性フィールドの属性値を */
/* 設定する */
 	retval = t6set_attr(T6_SL, &senslabel, sendattrs);
 	printf("Retval1 = %d¥n", retval);
 	retval = t6set_attr(T6_CLEARANCE, &clearance, sendattrs);
 	printf("Retval2 = %d¥n", retval);

/* ソケット通信を設定する */
/* ... */

/* 変更されたセキュリティ属性をメッセージと一緒に送る */
/* 有効セット内で net_setclr と net_upgrade_sl をオン (有効) にする */
 	retval = t6sendto(sock, msg, sizeof(msg), 0, 0, 0, &sendattrs);
/* net_setclr と net_upgrade_sl をオフ (無効) にする */
 	printf("Retval3 = %d¥n bytes", retval);
 }

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

Retval1 = 0

Retval2 = 0

Retval3 = 4 bytes