Trusted Solaris 開発ガイド

セマフォセットラベルの使用

この例は、Confidential でセマフォセットの識別子を作成し、同じセマフォセットで CMW ラベルを取得します。続いてプログラムは、ロックを要求する時点で、セマフォセットの情報ラベルを変更します。このプログラムは、Top Secret で動作しています。

#include <sys/tsol/ipc.h>
 #include <sys/types.h>
 #include <tsol/label.h>
 #include <sys/sem.h>

 main()
 {
 	int							id, retval, error;
 	bclabel_t							cmwlabel;
 	bslabel_t							senslabel;
 	bilabel_t							inflabel;
 	char							*string = (char *)0, *string2 = (char *)0;
 	struct sembuf							sops = {2, 1, IPC_NOWAIT};

 	retval = stobsl("CONFIDENTIAL", &senslabel, NEW_LABEL, &error);
 	retval = stobil("CONFIDENTIAL", &inflabel, NEW_LABEL, &error);

/* Confidential のセマフォセットを作成する */
/* 有効セット内で ipc_mac_write をオン (有効) にする */
 	id = semgetl(IPC_PRIVATE, 5, IPC_CREAT, &senslabel);
/* ipc_mac_write をオフ (無効) にする */

/* セマフォセットの CMW ラベルを得る */
/* 有効セット内で ipc_mac_read をオン (有効) にする */
 	retval = getsemcmwlabel(id, &cmwlabel);
/* ipc_mac_read をオフ (無効) にする */

/* CMW ラベルを出力する */
 	bcltos(&cmwlabel, &string, 0, LONG_WORDS);
 	printf("CMW label = %s¥n", string);

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

CMW label = UNCLASSIFIED[C]

プログラムは、セマフォロックを要求するとき、セマフォセットの情報ラベルを Unclassified から Confidential に変更します。

/* ロックを要求し、情報ラベルを Confidential に変更する */
/* 有効セット内で ipc_upgrade_il をオン (有効) にする */
 	retval = semopl(id, &sops, 1, &inflabel);
/* ipc_upgrade_il をオフ (無効) にする */

/* セマフォセットの CMW ラベルを得る */
/* 有効セット内で ipc_mac_read をオン (有効) にする */
 	retval = getsemcmwlabel(id, &cmwlabel);
/* ipc_mac_read をオフ (無効) にする */

 	getcil(&inflabel, &cmwlabel);

/* 情報ラベルを出力する */
 	biltos(&inflabel, &string2, 0, LONG_WORDS);
 	printf("Information label = %s¥n", string2);
 }

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

Information label = CONFIDENTIAL


注 -

情報ラベルに対する変更を確認する場合、/etc/system ファイルで System V IPC セマフォの情報ラベルの浮上がオンに設定されていること (tsol_float_sem_il = 1) を確認してください。