この章では、Trusted Extensions X ウィンドウシステム API について説明します。また、トラステッド X ウィンドウシステムのセキュリティーポリシーおよび Solaris Trusted Extensions インタフェースを説明するために使用する簡単な Motif アプリケーションも含まれています。
Trusted Extensions API を Solaris OS で使用する方法の例は、Solaris ソースコードを参照してください。OpenSolaris の Web サイト の左のナビゲーションバーにある「Source Browser」をクリックします。Source Browser を使用して Solaris のソースコードを検索します。
この章の内容は次のとおりです。
Solaris Trusted Extensions が構成されているシステム は、共通デスクトップ環境 (Common Desktop Environment、CDE) の拡張バージョンである Solaris Trusted Extensions CDE を使用します。Solaris Trusted Extensions CDE は、Trusted Extensions X ウィンドウシステムを使用します。Trusted Extensions X ウィンドウシステムには、必須アクセス制御 (MAC)、任意アクセス制御 (DAC)、および特権の使用をサポートするためのプロトコル拡張が含まれます。
データ転送セッションは「多インスタンス化」されます。すなわち、異なる機密ラベルおよびユーザー ID でセッションがインスタンス化されます。多インスタンス化は、1 つの機密ラベルまたはユーザー ID の非特権クライアントのデータが、別の機密ラベルまたはユーザー ID の別のクライアントに転送されないようにします。このような転送は、トラステッド X ウィンドウシステムの DAC ポリシー、および 等位書き込みと下位読み取りの MAC ポリシーに違反する可能性があります。
Trusted Extensions X ウィンドウシステム API によって、セキュリティー関連属性情報を取得したり設定したりできます。さらに、この API によって、テキスト文字列出力にスタイルを適用するフォントリストおよびピクセル幅を使用してラベルを文字列に変換できます。たとえば、14 ポイント、ボールドの Helvetica フォントなどです。このようなインタフェースは、通常、Motif ウィジェット、Xt イントリンシクス、Xlib、および CDE インタフェースとともに作成される管理アプリケーションによって呼び出されます。
セキュリティー関連情報の取得 – これらのインタフェースは、X プロトコル要求が行われる Xlib レベルで機能します。入力パラメータ値に関するデータを取得するには、Xlib インタフェースを使用します。
文字列へのラベルの変換 – これらのインタフェースは Motif レベルで機能します。入力パラメータは、ラベル、テキスト文字列出力の体裁を指定するフォントリスト、および適切なピクセル幅です。指定したスタイルとピクセル幅の複合文字列が返されます。
これらのルーチンの宣言については、「Trusted Extensions X ウィンドウシステム API」を参照してください。
トラステッド X ウィンドウシステムのインタフェースは、さまざまな X ウィンドウシステムオブジェクトのセキュリティー関連属性の情報を管理します。Motif のみによって GUI アプリケーションを作成することができます。Motif アプリケーションは、Xlib オブジェクトのセキュリティー属性の情報を処理する Motif ウィジェットを基礎にして、Xlib オブジェクト ID を取得するために XToolkit ルーチンを使用します。
トラステッド X ウィンドウシステムインタフェースによってセキュリティー属性の情報が取得される X ウィンドウシステムのオブジェクトは、ウィンドウ、プロパティー、X ウィンドウサーバー、およびクライアントと X ウィンドウサーバー間の接続です。Xlib には、ウィンドウ、プロパティー、表示、およびクライアント接続 ID を取得する呼び出しがあります。
ウィンドウは、ユーザーに対して出力を表示し、クライアントからの入力を受け入れます。
プロパティーは、プロパティー名によってアクセスされるデータの任意の集まりです。プロパティー名およびプロパティータイプは「アトム」によって参照できます。これは一意の 32 ビットの識別子であり、文字の名前文字列です。
ウィンドウ、プロパティー、およびクライアント接続のセキュリティー属性は、所有者 ID および機密ラベル情報から構成されます。これらの属性を収集するための構造体については、「X11 のデータ型」を参照してください。セキュリティー属性情報を取得および設定するインタフェースについては、「Trusted Extensions X ウィンドウシステム API」を参照してください。
ウィンドウ、プロパティー、およびピックスマップオブジェクトには、ユーザー ID、クライアント ID、および機密ラベルがあります。グラフィックコンテキスト、フォント、およびカーソルには、クライアント ID のみがあります。クライアントと X ウィンドウサーバーとの接続には、ユーザー ID、X ウィンドウサーバー ID、および機密ラベルがあります。
「ユーザー ID」は、オブジェクトを作成したクライアントの ID です。「クライアント ID」は、オブジェクトを作成するクライアントが接続される接続番号に関連します。
DAC ポリシーでは、オブジェクトを所有するクライアントはそのオブジェクトで操作を実行しなければなりません。クライアントのユーザー ID がオブジェクトの ID と等しい場合、クライアントはオブジェクトを所有します。接続要求の場合、クライアントのユーザー ID が X ウィンドウサーバーワークステーションの所有者のアクセス制御リスト (ACL) にある必要があります。あるいは、クライアントがトラステッドパス属性を表明する必要があります。
MAC ポリシーは、ウィンドウおよびピックスマップに関しては等位書き込み、ネーミングウィンドウに関しては等位読み取りです。MAC ポリシーは、プロパティーに関しては下位読み取りです。機密ラベルは、作成元クライアントの機密ラベルに設定されます。次は、それぞれのアクションの MAC ポリシーです。
変更、作成、削除 – クライアントの機密ラベルは、オブジェクトの機密ラベルと同等である必要があります。
名前付け、読み取り、取得 – クライアントの機密ラベルは、オブジェクトの機密ラベルより優位である必要があります。
接続要求 – クライアントの機密ラベルは、X ウィンドウサーバーワークステーションの所有者のセッション認可上限のほうが優位である必要があります。あるいは、クライアントがトラステッドパス属性を表明する必要があります。
ウィンドウは、クライアント間で共有される情報を含むプロパティーを持つことができます。ウィンドウプロパティーは、アプリケーションが実行されている機密ラベルで作成されるので、プロパティーデータへのアクセスはそれの機密ラベルによって分離されます。クライアントは、プロパティーを作成したり、ウィンドウ上のプロパティーにデータを格納したり、MAC および DAC の制限に従ってプロパティーからデータを取得したりできます。多インスタンス化されないプロパティーを指定するには、TrustedExtensionsPolicy ファイルを更新します。
TrustedExtensionsPolicy ファイルは、Xsun サーバーおよび Xorg サーバー用にサポートされます。
SPARC: Xsun 用のファイルが /usr/openwin/server/etc にあります。
x86: Xorg 用のファイルが /usr/X11/lib/X11/xserver にあります。
次の節でそれぞれのセキュリティーポリシーについて説明します。
ルートウィンドウ
クライアントウィンドウ
優先指定/リダイレクトウィンドウ
キーボード、ポインタ、サーバー制御
選択マネージャー
デフォルトのウィンドウリソース
ウィンドウ間のデータの移動
ルートウィンドウは、ウィンドウ階層の最上位です。ルートウィンドウは、いずれのクライアントにも属さない公共オブジェクトですが、保護する必要があるデータを持ちます。ルートウィンドウの属性は ADMIN_LOW で保護されます。
クライアントには、通常、ルートウィンドウから派生する少なくとも 1 つの最上位クライアントウィンドウと、その最上位ウィンドウ内で入れ子にされた追加ウィンドウがあります。クライアントの最上位ウィンドウから派生するすべてのウィンドウの機密ラベルは同じです。
メニューや特定のダイアログボックスなどの優先指定/リダイレクトウィンドウは、別のクライアントから離れた入力フォーカスを受け取ることはできません。そのため、入力フォーカスは誤った機密ラベルでファイルに入力を受け入れません。優先指定/リダイレクトウィンドウは、作成元クライアントによって所有され、ほかのクライアントによって別の機密ラベルでデータにアクセスするために使用できません。
クライアントは、キーボード、ポインタ、およびサーバーを制御するために MAC および DAC を必要とします。フォーカスをリセットするには、クライアントはフォーカスを所有するか、実効セットに win_devices 特権を必要とします。
ポインタを移動するには、クライアントはポインタ制御、および宛先ウィンドウに対する MAC と DAC が必要です。明示的なユーザーアクションを含むイベントに関して、X および Y 座標情報が取得されます。
選択マネージャーアプリケーションは、信頼できないウィンドウ間をデータが転送されるカット&ペースト、ドラッグ&ドロップなど、ユーザーレベルのウィンドウ間データ移動を仲介します。転送が試みられると、選択マネージャーは転送をキャプチャーし、制御ユーザーの承認を確認し、ユーザーに確認とラベル付け情報を要求します。ユーザーがデータ移動を試みると常に、選択マネージャーが自動的に表示されます。選択マネージャーが表示されるようにアプリケーションコードを更新する必要はありません。
管理者は、一部の転送タイプに対して自動確認を設定できます。その場合、選択マネージャーは表示されません。転送が MAC および DAC ポリシーに一致する場合、データ転送は完了します。ファイルマネージャーおよびウィンドウマネージャーは、それぞれの専用ドロップ領域の選択エージェントとしても動作します。多インスタンス化される選択ターゲットを指定するには、/usr/openwin/server/etc/TrustedExtensionsPolicy ファイルを参照してください。自動的に確認される選択ターゲットを決定するには、/usr/dt/config/sel_config ファイルを参照してください。
クライアントによって作成されていないリソースは、ADMIN_LOW で保護されるデフォルトのリソースです。ADMIN_LOW で実行されるか、適切な特権を持って実行されるクライアントのみがデフォルトのリソースを変更できます。
ウィンドウリソースは次のとおりです。
ルートウィンドウの属性 – すべてのクライアントが読み取りおよび作成アクセスできますが、書き込みまたは変更アクセスは特権クライアントのみができます。「特権操作とトラステッド X ウィンドウシステム」を参照してください。
デフォルトカーソル – クライアントは、プロトコル要求でデフォルトカーソルを自由に参照できます。
事前定義アトム – TrustedExtensionsPolicyファイルには、事前定義アトムの読み取り専用リストが含まれます。
クライアントは、選択マネージャーと関係なくウィンドウ間でデータを移動するには、実効セットに win_selection 特権が必要です。「選択マネージャー」を参照してください。
ユーザーが介在せずにウィンドウ、プロパティー、またはアトム名にアクセスするライブラリルーチンは、MAC および DAC を必要とします。フレームバッファーグラフィックコンテキスト、フォント、およびカーソルにアクセスするライブラリルーチンは任意アクセスを必要とし、さらに、特別なタスクに対する追加特権を必要とする場合があります。
オブジェクトへのアクセスを拒否された場合、クライアントは実効セットに win_dac_read、win_dac_write、 win_mac_read、win_mac_write の特権のうち 1 つ以上を必要とする場合があります。これらの特権を有効または無効にするには、TrustedExtensionsPolicy ファイルを参照してください。
次に、それぞれのタスクを実行するのに必要な特権を示します。
ウィンドウリソースの構成と破棄 – X ウィンドウサーバーによって永続的に保持されるウィンドウまたはプロパティーを構成または破棄するには、クライアントプロセスは実効セットに win_config 特権が必要です。スクリーンセーバーはこのようなリソースの例です。
ウィンドウ入力デバイスの使用 – キーボードおよびポインタ制御を取得および設定する、または、ポインタボタンのマッピングおよびキーボードのマッピングを変更するには、クライアントプロセスは実効セットに win_devices 特権が必要です。
ダイレクトグラフィックスアクセスの使用 – ダイレクトグラフィックスアクセス (DGA) X プロトコル拡張を使用するには、クライアントプロセスは実効セットに win_dga 特権が必要です。
ウィンドウラベルのダウングレード – ウィンドウ、ピックスマップ、またはプロパティーの機密ラベルを既存のラベルより優位ではない新しいラベルに変更するには、クライアントプロセスは実効セットに win_downgrade_sl 特権が必要です。
ウィンドウラベルのアップグレード – ウィンドウ、ピックスマップ、またはプロパティーの機密ラベルを既存のラベルより優位な新しいラベルに変更するには、クライアントプロセスは実効セットに win_upgrade_sl 特権が必要です。
ウィンドウのフォントパスの設定 – フォントパスを変更するには、クライアントプロセスは実効セットに win_fontpath 特権が必要です。
Trusted X11 API を使用するには、次のヘッダーファイルが必要です。
#include <X11/extensions/Xtsol.h> |
Trusted X11 の例は、-lXtsol および -ltsol ライブラリオプションによってコンパイルされます。
X11 ラベルクリッピング API を使用するには、次のヘッダーファイルが必要です。
#include <Dt/label_clipping.h> |
ラベルクリッピングの例は、-lDtTsol および -ltsol ライブラリオプションによってコンパイルされます。
次の節で、Trusted X11 インタフェースおよび X11 ラベルクリッピングインタフェースのデータ型および宣言を示します。
X11 のデータ型
属性へのアクセス
ウィンドウラベルへのアクセスと設定
ウィンドウユーザー ID へのアクセスと設定
ウィンドウプロパティーラベルへのアクセスと設定
ウィンドウプロパティーユーザー ID へのアクセスと設定
ワークステーション所有者 ID へのアクセスと設定
X ウィンドウサーバーの認可上限と最下位ラベルの設定
トラステッドパスウィンドウでの作業
スクリーンストライプの高さへのアクセスと設定
ウィンドウの多インスタンス化情報の設定
X11 ラベルクリッピングインタフェースでの作業
次のデータ型が X11/extensions/Xtsol.h で定義されていて、Trusted Extensions X ウィンドウシステム API に使用されます。
X11 のオブジェクト型 – ResourceType 定義は、処理されるリソースの型を示します。値は IsWindow、IsPixmap、または IsColormap です。
ResourceType は、認可上限を表す型定義です。インタフェースは型 m_label_t の構造体をパラメータとして受け入れ、同じ型の構造体に認可上限を返します。
X11 のオブジェクト属性 – XTsolResAttributes 構造体には、次のリソース属性が含まれます。
typedef struct _XTsolResAttributes { CARD32 ouid; /* 所有者ユーザー ID */ CARD32 uid; /* ウィンドウのユーザー ID */ m_label_t *sl; /* 機密ラベル */ } XTsolResAttributes;
X11 のプロパティー属性 – XTsolPropAttributes 構造体には、次のプロパティー属性が含まれます。
typedef struct _XTsolPropAttributes { CARD32 uid; /* プロパティーのユーザー ID */ m_label_t *sl; /* 機密ラベル */ } XTsolPropAttributes;
X11 のクライアント属性 – XTsolClientAttributes 構造体には、次のクライアント属性が含まれます。
typedef struct _XTsolClientAttributes { int trustflag; /* クライアントが信頼できるとマークされている場合は真 */ uid_t uid; /* クライアントを起動した所有者ユーザー ID */ gid_t gid; /* グループ ID */ pid_t pid; /* プロセス ID */ u_long sessionid; /* セッション ID */ au_id_t auditid; /* 監査 ID */ u_long iaddr; /* クライアントを実行するホストのインターネットアドレス */ } XTsolClientAttributes;
リソース、プロパティー、およびクライアント属性にアクセスするために、次のルーチンが使用されます。
このルーチンは、winattrp のウィンドウ ID のリソース属性を返します。XTSOLgetResAttributes(3XTSOL) のマニュアルページを参照してください。
このルーチンは、propattrp のウィンドウ ID によって決まるプロパティーのプロパティー属性を返します。XTSOLgetPropAttributes(3XTSOL) のマニュアルページを参照してください。
このルーチンは clientattrp のクライアント属性を返します。XTSOLgetClientAttributes(3XTSOL) のマニュアルページを参照してください。
ウィンドウの機密ラベルを取得および設定するために、XTSOLgetResLabel() および XTSOLsetResLabel() ルーチンが使用されます。
このルーチンはウィンドウの機密ラベルを取得します。XTSOLgetResLabel(3XTSOL) のマニュアルページを参照してください。
このルーチンはウィンドウの機密ラベルを設定します。XTSOLsetResLabel(3XTSOL) のマニュアルページを参照してください。
ウィンドウのユーザー ID を取得および設定するために、XTSOLgetResUID() および XTSOLsetResUID() ルーチンが使用されます。
このルーチンはウィンドウのユーザー ID を取得します。XTSOLgetResUID(3XTSOL) のマニュアルページを参照してください。
このルーチンはウィンドウのユーザー ID を設定します。XTSOLsetResUID(3XTSOL) のマニュアルページを参照してください。
ウィンドウ ID によって決まるプロパティーの機密ラベルを取得および設定するために、XTSOLgetPropLabel() および XTSOLsetPropLabel() ルーチンが使用されます。
このルーチンは、ウィンドウ ID によって決まるプロパティーの機密ラベルを取得します。XTSOLgetPropLabel(3XTSOL) のマニュアルページを参照してください。
このルーチンは、ウィンドウ ID によって決まるプロパティーの機密ラベルを設定します。XTSOLsetPropLabel(3XTSOL) のマニュアルページを参照してください。
ウィンドウ ID によって決まるプロパティーのユーザー ID を取得および設定するために、XTSOLgetPropUID() および XTSOLsetPropUID() ルーチンが使用されます。
このルーチンは、ウィンドウ ID によって決まるプロパティーのユーザー ID を取得します。XTSOLgetPropUID(3XTSOL) のマニュアルページを参照してください。
このルーチンは、ウィンドウ ID によって決まるプロパティーのユーザー ID を設定します。XTSOLsetPropUID(3XTSOL) のマニュアルページを参照してください。
ワークステーションサーバーの所有者のユーザー ID を取得および設定するために、XTSOLgetWorkstationOwner() および XTSOLsetWorkstationOwner() ルーチンが使用されます。
XTSOLsetWorkstationOwner() ルーチンはウィンドウマネージャーによってのみ使用されます。
このルーチンは、ワークステーションサーバーの所有者のユーザー ID を取得します。XTSOLgetWorkstationOwner(3XTSOL) のマニュアルページを参照してください。
このルーチンは、ワークステーションサーバーの所有者のユーザー ID を設定します。XTSOLsetWorkstationOwner(3XTSOL) のマニュアルページを参照してください。
X ウィンドウサーバーにセッション高位認可上限およびセッション最下位ラベルを設定するために、XTSOLsetSessionHI() および XTSOLsetSessionLO() ルーチンを使用します。セッション高位認可上限は、ラベルビルダー GUI から選択でき、ユーザーの範囲内である必要があります。セッション最下位ラベルは、マルチレベルセッションの場合のユーザーの最下位ラベルと同じです。
これらのインタフェースはウィンドウマネージャーによってのみ使用されます。
セッションの高位認可上限は、ログイン時のワークステーション所有者の認可上限から設定されます。セッションの高位認可上限は、所有者の認可上限およびマシンモニターのラベル範囲の上限のほうが優位です。これが変更されると、ウィンドウサーバーの認可上限より高位の機密ラベルで実行されるクライアントからの接続要求は、特権がなければ拒否されます。XTSOLsetSessionHI(3XTSOL) のマニュアルページを参照してください。
セッションの最下位ラベルは、ログイン時のワークステーション所有者の最下位ラベルから設定されます。セッションの最下位ラベルは、管理のために設定されるユーザーの最下位ラベルおよびマシンモニターのラベル範囲の下限より高位です。この設定を変更すると、ウィンドウサーバーの機密ラベルより下位の機密ラベルで実行されるクライアントからの接続要求は、特権がなければ拒否されます。XTSOLsetSessionLO(3XTSOL) のマニュアルページを参照してください。。
指定したウィンドウをトラステッドパスウィンドウにするため、および、指定したウインドウがトラステッドパスウィンドウであるかどうかを検査するために、XTSOLMakeTPWindow() および XTSOLIsWindowTrusted() ルーチンが使用されます。
このルーチンは、指定したウィンドウをトラステッドパスウィンドウにします。XTSOLMakeTPWindow(3XTSOL) のマニュアルページを参照してください。
このルーチンは、指定したウィンドウがトラステッドパスウィンドウであるかどうかを検査します。XTSOLIsWindowTrusted(3XTSOL) のマニュアルページを参照してください。
スクリーンストライプの高さを取得および設定するために、XTSOLgetSSHeight() および XTSOLsetSSHeight() ルーチンが使用されます。
これらのインタフェースはウィンドウマネージャーによってのみ使用されます。
このルーチンはスクリーンストライプの高さを取得します。XTSOLgetSSHeight(3XTSOL) のマニュアルページを参照してください。
このルーチンはスクリーンストライプの高さを設定します。スクリーンストライプがなくなったり、非常に大きなスクリーンストライプになったりしないように注意してください。XTSOLsetSSHeight(3XTSOL) のマニュアルページを参照してください。
XTSOLsetPolyInstInfo() ルーチンは、クライアントとは異なる機密ラベルで、クライアントがプロパティーからプロパティー情報を取得できるようにします。最初の呼び出しで、必要な機密ラベルとユーザー ID を指定し、enabled プロパティーを True に設定します。次に、XTSOLgetPropAttributes()、 XTSOLgetPropLabel()、または XTSOLgetPropUID() を呼び出します。終了するには、enabled プロパティーを False に設定して XTSOLsetPolyInstInfo() ルーチンを再び呼び出します。XTSOLsetPolyInstInfo(3XTSOL) のマニュアルページを参照してください。
label_to_str() ルーチンは、機密ラベルまたは認可上限を文字列に変換します。label_to_str(3TSOL) のマニュアルページを参照してください。
このあとの各節では、Trusted Extensions インタフェース呼び出しを使用するコーディング例の抜粋を示します。これらの呼び出しはセキュリティー属性を処理して、ラベルを文字列に変換します。抜粋では、ウィンドウセキュリティー属性、アプリケーションプログラムでもっとも一般的に管理される属性の処理に焦点を当てます。多くの場合、クライアントは、別のアプリケーションによって作成されたオブジェクトに対して適切な特権を使用することによってセキュリティー属性を取得します。その次に、クライアントは属性をチェックして、オブジェクトに対する操作がシステムのセキュリティーポリシーによって許可されているか否かを判別します。このセキュリティーポリシーには、DAC ポリシー、および MAC の等位書き込みと下位読み取りのポリシーが含まれます。アクセスが拒否されると、アプリケーションは場合に応じてエラーを生成するか、特権を使用します。特権が必要とされる場合の説明は、「特権操作とトラステッド X ウィンドウシステム」を参照してください。
Trusted Extensions API に渡すためのオブジェクトの ID を取得する前に、オブジェクトを作成してください。
XTSOLgetResAttributes() ルーチンは、ウィンドウのセキュリティー関連属性を返します。次を指定します。
表示 ID
ウィンドウ ID
セキュリティー属性を必要とするオブジェクトがウィンドウであることを示すフラグ
返される属性を取得する XtsolResAttributes 構造体
クライアントは、そのクライアントが作成したウィンドウのセキュリティー属性を取得するので、特権は必要ありません。
このマニュアル内のプログラム例は、API の紹介を中心としていて、エラーチェックは行なっていません。実際に作成するアプリケーションでは、適切なエラーチェックを実行してください。
/* Xlib 呼び出しによって基本のウィンドウと表示 ID を取得する */ window = XtWindow(topLevel); display = XtDisplay(topLevel); /* ウィンドウセキュリティー属性を取得する */ retval = XTSOLgetResAttributes(display, window, IsWindow, &winattrs); /* ラベルを文字列に変換する */ retval = label_to_str(&winattrs.sl, &plabel, M_LABEL, LONG_NAMES); /* セキュリティー属性情報を出力する */ printf(“Workstation Owner ID = %d\nUser ID = %d\nLabel = %s\n”, winattrs.ouid, winattrs.uid, string1);
printf 文によって次のように出力されます。
Workstation Owner ID = 29378 User ID = 29378 Label = CONFIDENTIAL |
この例は、プロセス機密ラベルを取得し、フォントリストおよびピクセル幅を使用してそれを文字列に変換する方法を示します。ラベルの文字列とともに、ラベルウィジェットが作成されます。プロセス機密ラベルはウィンドウ機密ラベルと同じです。したがって、特権は必要ありません。
最後の文字列がピクセル幅に収まらない場合、文字列は切り取られて切り取りインジケータが表示されます。X ウィンドウシステムのラベル変換インタフェースは指定したピクセル数で切り取り、ラベルクリッピングインタフェースは文字数で切り取ります。
英語以外の言語で label_encodings ファイルを使用する場合、ISO 標準のコード番号 128 以上のアクセント文字では変換されないことがあります。次の例は、アジア言語の文字セットでは機能しません。
retval = getplabel(&senslabel); /* フォントリストを作成し、それを使用してラベルを変換する */ italic = XLoadQueryFont(XtDisplay(topLevel), “-adobe-times-medium-i-*-*-14-*-*-*-*-*-iso8859-1”); fontlist = XmFontListCreate(italic, “italic”); xmstr = Xbsltos(XtDisplay(topLevel), &senslabel, width, fontlist, LONG_WORDS); /* フォントリストとラベルテキストを使用してラベルウィジェットを作成する */ i=0; XtSetArg(args[i], XmNfontList, fontlist); i++; XtSetArg(args[i], XmNlabelString, xmstr); i++; label = XtCreateManagedWidget(“label”, xmLabelWidgetClass, form, args, i);
この例は、ウィンドウの機密ラベルを取得する方法を示します。プロセス機密ラベルはウィンドウ機密ラベルと同じです。したがって、特権は必要ありません。
/* ウィンドウラベルを取得する */ retval = XTSOLgetResLabel(display, window, IsWindow, &senslabel); /* ラベルを文字列に変換し、出力する */ retval = label_to_str(label, &string, M_LABEL, LONG_NAMES); printf(“Label = %s\n”, string);
printf 文によって、たとえば、次のように出力されます。
Label = PUBLIC |
この例は、ウィンドウに機密ラベルを設定する方法を示します。新しい機密ラベルは、ウィンドウおよびプロセスの機密ラベルより優位です。クライアントが優位ではないラベルを変換するには、クライアントの実効セットに sys_trans_label 特権が必要です。さらに、ウィンドウの機密ラベルを変更するには、クライアントに win_upgrade_sl 特権も必要です。
特権の使用についての詳細は、『Solaris セキュリティーサービス開発ガイド』を参照してください。
/* テキスト文字列を機密ラベルに変換する */ retval = label_to_str(string4, &label, M_LABEL, L_NO_CORRECTION, &error); /* 新しい値で機密ラベルを設定する */ retval = XTSOLsetResLabel(display, window, IsWindow, label);
この例は、ウィンドウユーザー ID を取得する方法を示します。プロセスはウィンドウリソースを所有し、同じ機密ラベルで実行されています。したがって、特権は必要ありません。
/* ウィンドウのユーザー ID を取得する */ retval = XTSOLgetResUID(display, window, IsWindow, &uid);
この例は、X ウィンドウサーバーにログインしているユーザーの ID を取得する方法を示します。プロセス機密ラベルはウィンドウ機密ラベルと同じです。したがって、特権は必要ありません。
/* ウィンドウのユーザー ID を取得する */ retval = XTSOLgetWorkstationOwner(display, &uid);