Solaris Trusted Extensions 開発ガイド

ラベル付けされている環境で印刷サービスが実行されているか否かの判別

印刷サービスは、ラベル付けされている環境とラベル付けされていない環境で機能するように設計されています。そのため、印刷アプリケーションは、遠隔ホストのラベルが要求されるときと、そのラベルが適用されるか否かを決定する必要があります。印刷プロセスは、最初、それ自身の環境を検査します。プロセスがラベル対応の環境で実行されているか否かを確認します。

アプリケーションは、遠隔要求がラベル付けされているか否かを最初に判別しません。その代わりに、印刷アプリケーションはそれ自身の環境がラベル付けされているか否かを判別します。アプリケーションがラベル付けされているホストで実行されていない場合、MAC ポリシーによって、印刷アプリケーションはラベル付けされた要求を受信できません。

印刷サービスは is_system_labeled() 関数を使用して、ラベル付けされた環境でプロセスが実行されているか否かを判別します。この関数についての詳細は、is_system_labeled(3C) のマニュアルページを参照してください。

次のコード抜粋は、ラベル付けされた環境でアプリケーションが実行されているか否かをどのように判別するかを示します。

if (is_system_labeled()) {
	ucred_t *uc = NULL;
	m_label_t *sl;
	char *pslabel = NULL; /* peer's slabel */

	if ((fd < 0) || (slabel == NULL)) {
		errno = EINVAL;
		return (-1);
	}

Trusted Extensions が設定されたシステムで印刷アダプタプロセスが実行されている場合、is_system_labeled() 関数は遠隔プロセスから ucred_t 資格抽象を取得します。次に、遠隔プロセスの ucred_t データ構造体およびピアのラベルが NULL に設定されます。資格およびピアのラベルの値を返す関数がデータ構造体を満たします。そのデータ構造体については、次の節で説明します。

get_peer_label() ルーチン全体のソースは、get_peer_label() ラベル対応関数」を参照してください。