この例の最初の部分は、sendattrs とともに異なるマスク (endptmask) を使用し、sendattrs に指定された機密ラベルのセキュリティ属性だけを通信終端に設定します。これにより、t6sendto(3N) ルーチン以外の伝送方法を使用して、または機密ラベルを指定しない属性セットを持つ t6sendto(3N) ルーチンを使用して、特権を持つプロセスが通信終端にメッセージを送信する場合に、機密ラベルが通信終端から取得されます。通信終端のセキュリティ属性を設定するプロセスは Secret で動作しているため、有効セットに net_upgrade_sl 特権が必要です。コード内のコメントは、第 3 章「特権」で説明している特権ブラケットが必要な位置を示します。
次の文は、通信終端のマスクを sendmask に変更し、終端マスクを取得して getmask に入れ、認可上限を保持するために getattrs を割り当て、通信終端のデフォルトからバイナリ認可上限を取得して getattrs に格納します。
通信終端のセキュリティ属性は、送信プロセスから取得される属性を無効にします。メッセージのセキュリティ属性は、通信終端から取得される属性を無効にします。
#include <tsix/t6attrs.h> #include <tsol/label.h> main() { t6mask_t sendmask, endptmask, getmask; int fd, sock, retval; t6attr_t sendattrs, getattrs; sendmask = T6M_SL | T6M_CLEARANCE; sendattrs = t6alloc_blk(sendmask); /* 機密ラベルを使用してマスクを初期化する */ endptmask = T6M_SL; /* マスクにより示される属性を sendattrs に設定する */ /* 有効セット内で net_upgrade_sl をオン (有効) にする */ retval = t6set_endpt_default(sock, endptmask, sendattrs); /* net_upgrade_sl をオフ (無効) にする */ /* 終端マスクを他のマスクに変更する */ retval = t6set_endpt_mask(sock, sendmask); /* 現在の終端マスクを得る */ retval = t6get_endpt_mask(sock, &getmask); /* 終端のデフォルトの認可上限を得る */ getmask = T6M_CLEARANCE; getattrs = t6alloc_blk(getmask); retval = t6get_endpt_default(fd, &getmask, getattrs); }