JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Trusted Extensions 開発者ガイド     Oracle Solaris 10 1/13 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  Trusted Extensions API およびセキュリティーポリシー

2.  ラベルと認可上限

3.  ラベルのコード例

4.  印刷とラベル API

5.  プロセス間通信

6.  Trusted X Window System

7.  ラベルビルダー API

ラベルビルダー GUI 用の API

対話型ユーザーインタフェースの作成

ラベルビルダーの動作

キーボード入力と「Update」ボタン

ラジオボタンオプション

「Reset」ボタン

「Cancel」ボタン

ラベルビルダーのアプリケーション固有の機能

特権操作とラベルビルダー

tsol_lbuild_create() ルーチン

ラベルビルダーの拡張操作

ModLabelData 構造体

ラベルビルダーのオンラインヘルプ

8.  信頼できる Web ガードプロトタイプ

9.  Solaris Trusted Extensions ラベル API のための試験的な Java バインディング

A.  プログラマーのリファレンス

B.  Trusted Extensions API リファレンス

索引

対話型ユーザーインタフェースの作成

次の図は、図のあとに示すコードによって作成されるものと同様の GUI を示しています。main プログラムは、1 つのボタン (display) を持つ親フォーム (form) を作成します。ボタンのコールバックが、tsol_lbuild_create() ルーチンの呼び出しによって作成されるラベルビルダーのダイアログボックスを表示します。tsol_lbuild_create(3TSOL) のマニュアルページを参照してください。

図 7-1 ラベル作成のインタフェース

image:ウィンドウはラベルビルダーの各部を示しています。コールアウトは、ダイアログボックスのタイトル、ユーザーフィールド、ラベル作成フィールド、および「OK」ボタンコールバック関数を示しています。

親フォームの「表示」ボタンをクリックすると、ラベルビルダーのダイアログボックスが表示されます。コールアウトは、tsol_lbuild_create() ルーチンに渡されたパラメータがラベルビルダーのダイアログボックスのどこに表示されるかを示しています。tsol_lbuild_create(3TSOL) のマニュアルページを参照してください。

次のコードによって、図に示すような GUI が作成されます。

#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <Xm/Xm.h>
#include <Xm/PushB.h>
#include <Xm/Form.h>
#include <Dt/ModLabel.h>

ModLabelData *data;

/* Callback passed to tsol_lbuild_create() */
void callback_function()
{ 
    char *title, *userval;
    char *string = (char *)0;
    char *string1 = (char *)0;
    int mode, view;
    Boolean show;
    m_label_t *sl_label, *work_sl_label;
    Position x, y;

/* Your application-specific implementation goes here */
    printf("OK button called\n"); 

/* Query settings */
    mode = (int)tsol_lbuild_get(data, LBUILD_MODE);
    title = (String)tsol_lbuild_get(data, LBUILD_TITLE);
    sl_label = (m_label_t*) tsol_lbuild_get(data, LBUILD_VALUE_SL);
    work_sl_label = (m_label_t*) tsol_lbuild_get(data, LBUILD_WORK_SL);
    view = (int)tsol_lbuild_get(data, LBUILD_VIEW);
    x = (Position ) tsol_lbuild_get(data, LBUILD_X);
    y = (Position ) tsol_lbuild_get(data, LBUILD_Y);
    userval = (char *)tsol_lbuild_get(data, LBUILD_USERFIELD);
    show = (Boolean )tsol_lbuild_get(data, LBUILD_SHOW);

    label_to_str(sl_label, &string, M_LABEL, LONG_NAMES);
    label_to_str(work_sl_label, &string1, M_LABEL, LONG_NAMES);
    printf("Mode = %d, Title = %s, SL = %s, WorkSL = %s, View = %d, ",
        mode, title, string, string1, view);
    printf("X = %d, Y = %d, Userval = %s, Show = %d\n",
        x, y, userval, show);

}

/* Callback to display dialog box upon button press */
void Show(Widget display, caddr_t client_data, caddr_t call_data)
{
    tsol_lbuild_set(data, LBUILD_SHOW, TRUE, NULL);
}

main(int argc, char **argv)
{
    Widget     form, topLevel, display;
    Arg args[9];
    int i = 0, error, retval;
    char *sl_string = "CNF";
    m_label_t * sl_label;

    topLevel = XtInitialize(argv[0], "XMcmds1", NULL, 0, &argc, argv);
    form = XtCreateManagedWidget("form",
        xmFormWidgetClass, topLevel, NULL, 0);

    retval = str_to_label(sl_string, &sl_label, MAC_LABEL, L_NO_CORRECTION, NULL);
    printf("Retval = %d\n", retval);

    data = tsol_lbuild_create( form, callback_function,
        LBUILD_MODE, LBUILD_MODE_SL,
        LBUILD_TITLE, "Building Sensitivity Label",
        LBUILD_VALUE_SL, sl_label,
        LBUILD_VIEW, LBUILD_VIEW_EXTERNAL,
        LBUILD_X, 200,
        LBUILD_Y, 200,
        LBUILD_USERFIELD, "/export/home/zelda",
        LBUILD_SHOW, FALSE,
        NULL);

    i = 0;
    XtSetArg(args[i], XmNtopAttachment, XmATTACH_FORM); i++;
    XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); i++;
    XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++;
    XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++;
    display = XtCreateManagedWidget("Show",
        xmPushButtonWidgetClass, form, args, i);
    XtAddCallback(display, XmNactivateCallback, Show,0);
    XtRealizeWidget(topLevel);

    XtMainLoop();

    tsol_lbuild_destroy(data);

}

このプログラムを実行すると、次の出力が生成されます。

OK button called  
Mode = 12, Title = Building Sensitivity label, 
Label = CNF, WorkSL = SECRET, 
View = 1, X = 200, Y = 200, 
Userval = /export/home/zelda, 
Show = 1

以降のセクションでは、これらのトピックについて説明します。

ラベルビルダーの動作

ラベルビルダーのダイアログボックスは、エンドユーザーに情報の入力を求め、その入力から有効な機密ラベルを生成します。ラベルビルダーは、有効なラベルまたは認可上限が確実に作成されるようにします。ラベルおよび認可上限は、システムの label_encodings ファイルに定義されます。

ラベルビルダーは、「OK」、「Reset」、「Cancel」、および「Update」ボタンのデフォルト動作を提供します。tsol_lbuild_create() ルーチンに渡されるコールバックは、「OK」ボタンにマップされてアプリケーション固有の動作を提供します。

キーボード入力と「Update」ボタン

「Update」ボタンは、「Update With」フィールドにユーザーが入力するテキストを受け取り、その文字列が label_encodings ファイルに定義されている有効なラベルまたは認可上限であることをチェックします。

ユーザーが「OK」をクリックすると、「OK」ボタンのコールバック実装に従ってユーザー作成の値が処理されます。

ラジオボタンオプション

「Label Settings」ラジオボタンオプションを使用すると、格付けおよびコンパートメントから機密ラベルまたは認可上限を作成できます。また、これらのオプションでは、格付け、コンパートメント、およびマーキングから情報ラベルを作成することもできます。モードによっては、これらのボタンのいずれかがグレー表示になることがあります。この方法は、前のセクションで説明したキーボード入力や「更新」ボタンによる方法とは関係ありません。

格付け、コンパートメント、およびマーキングに関する情報は、システムの label_encodings ファイルで指定します。label_encodings ファイルで指定される組み合わせと制約は、無効な組み合わせをグレー表示することによって強制されます。ユーザーがオプションを選択すると、「Label」フィールドが更新され、tsol_lbuild_create() ルーチンによって返される ModLabelData 変数の該当する作業用ラベルフィールドにその値が格納されます。ユーザーは格付け (CLASS) およびコンパートメント (COMPS) のリストにあるラジオボタンを選択することによって、機密ラベルまたは認可上限を作成できます。

ユーザーが「OK」をクリックすると、「OK」ボタンのコールバック実装に従ってユーザー作成の値が処理されます。

「Reset」ボタン

「Reset」ボタンは、「Label」フィールドのテキストを、アプリケーションが起動したときの値に設定します。

「Cancel」ボタン

「Cancel」ボタンは、変更内容を保存せずにアプリケーションを終了します。

ラベルビルダーのアプリケーション固有の機能

ラベルビルダー GUI は、有効なラベルまたは認可上限を生成します。アプリケーション固有のコールバック、エラー処理、さらにラベルまたは認可上限に関連付けられるその他の機能も追加する必要があります。

特権操作とラベルビルダー

ラベルビルダーは、ワークスペースの機密ラベルが優位である格付けおよび関連コンパートメントのみをユーザーに表示します。実行可能ファイルの実効セットに sys_trans_label 特権が含まれている場合は、それ以外の格付けおよびコンパートメントも表示されることがあります。

「OK」ボタンコールバックのアプリケーション固有の実装には、特権が必要な場合があります。

ユーザーがラベルをアップグレードまたはダウングレードする承認を持っていない場合、「OK」および「Reset」ボタンはグレー表示されます。ユーザー作成のラベルがユーザーの範囲外にある場合も同様です。グレー表示されたボタンでは、ユーザーはタスクを完了できません。これらの制限をオーバーライドできる特権はありません。

tsol_lbuild_create() ルーチン

tsol_lbuild_create() ルーチンは、任意のウィジェット、コールバック関数、および NULL で終わる一連の名前と値のペアを受け入れます。その名前は操作を表します。このルーチンは、ModLabelData 型の変数を返します。

次に、tsol_lbuild_create() ルーチンによって受け入れられる情報について説明します。

ラベルビルダーの拡張操作

このセクションでは、拡張操作と、tsol_lbuild_create()tsol_lbuild_get()、および tsol_lbuild_set() ルーチンに渡すことができる有効な値について説明します。tsol_lbuild_create() に渡される値は、その戻り値に格納されます。戻り値の型は ModLabelData です。パラメータで返される値には、tsol_lbuild_get() および tsol_lbuild_set() の呼び出しによってアクセスできます。ModLabelData 構造体については、ModLabelData 構造体」で説明しています。tsol_lbuild_create(3TSOL)tsol_lbuild_get(3TSOL)、および tsol_lbuild_set(3TSOL) のマニュアルページを参照してください。

すべての拡張操作は、tsol_lbuild_get() に渡すことができます。しかし、LBUILD_WORK_SL および LBUILD_WORK_CLR 操作は、tsol_lbuild_set() または tsol_lbuild_create() に渡すことができません。これらの値はユーザー入力に基づいてラベルビルダーによって設定されるためです。これらの例外は、次の操作の説明にも記されています。

ModLabelData 構造体

ModLabelData 構造体には、tsol_lbuild_create() ルーチンを呼び出すことによって作成されるラベルビルダーインタフェースの状態に関する情報が含まれます。次の表では、ModLabelData の各フィールドについて説明します。ウィジェットとコールバックを除くすべてのフィールドには、関連した拡張操作と有効な値を tsol_lbuild_set() または tsol_lbuild_get() の呼び出しに指定することによってアクセスできます。拡張操作については、「ラベルビルダーの拡張操作」を参照してください。

表 7-1 ModLabelData 構造体

拡張操作または説明
データ型
フィールド
コメント
LBUILD_CHECK_AR
int
check_ar
LBUILD_MODE
int
mode
LBUILD_SHOW
Bool
show
LBUILD_TITLE
char
*lbuild_title
LBUILD_UPPER_BOUNDLBUILD_LOWER_BOUND
brange_t
range
LBUILD_USERFIELD
char
*userfield
LBUILD_VALUE_CLR
bclear_t
*clr
LBUILD_VALUE_SL
m_label_t
*sl
LBUILD_VIEW
int
view
LBUILD_WORK_CLR
bclear_t
*clr_work
tsol_lbuild_set() または tsol_lbuild_create() には無効
LBUILD_WORK_SL
m_label_t
*sl_work
tsol_lbuild_set() または tsol_lbuild_create() には無効
LBUILD_X
Position
x
LBUILD_Y
Position
y
tsol_lbuild_create() に渡されるコールバック
void
(*event_handler)()
「Cancel」ボタン
Widget
cancel
「Help」ボタン
Widget
help
ラベルビルダーのダイアログボックス
Widget
lbuild_dialog
「OK」ボタン
Widget
ok
「Reset」ボタン
Widget
reset
「Update」ボタン
Widget
update