機密ラベルがシステムまたはユーザーの認可範囲の中にあるかをチェックするには、blinset() ルーチンを使用してください。システム認可範囲は、ADMIN_HIGH や ADMIN_LOW など、システムで有効なすべてのラベルです。システムが処理するすべての機密ラベルの格付けとコンパートメントは、システム認可範囲の最下位の機密ラベルよりも優位でなければならず、システム認可範囲の最上位の機密ラベルよりも優位であってはなりません。システム管理者は、システム認可範囲を label_encodings(4) ファイルで定義します。
ユーザー認可範囲は、ユーザーに有効なすべての機密ラベルであり、ADMIN_HIGH と ADMIN_LOW が含まれることはありません。ユーザーに割り当てられたすべての機密ラベルの格付けとコンパートメントは、システム認可範囲の最下位の機密ラベルよりも優位でなければならず、システム用の認可範囲の最上位の機密ラベルよりも優位であってはなりません。システム管理者は、管理ユーザーインタフェースを使用して、機密ラベル範囲 (ユーザー認可範囲) をユーザーと役割に割り当てます。
次の例では、機密ラベルが、システム認可範囲 (id.type = 1) とユーザー認可範囲 (id.type = 2) の範囲内にあるか検査されます。
#include <tsol/label.h> main() { char *string = "CONFIDENTIAL", *string1 = "UNCLASSIFIED"; int sysval, userval, error, retval; bslabel_t senslabel; set_id id; retval = stobsl(string, &senslabel, NEW_LABEL, &error); id.type = 1; sysval = blinset(&senslabel, &id); id.type = 2; userval = blinset(&senslabel, &id); printf("System Range? = %d User Range? %d¥n", sysval, userval); }
printf 文によって、次のように出力されます。1 は、機密ラベルが範囲内であることを示します。0 は、機密ラベルが有効なラベルでない、指定された範囲内でない、または呼び出し元プロセスの機密ラベルがこの機密ラベルよりも優位でなく、呼び出しプロセスの有効セットに sys_trans_label 特権が含まれていない、のどれかを示します。
System Range? = 1 User Range? = 1