gss_str_to_oid() は常に使用できるわけではなく、また推奨されるものではないため、使用できる機構を調べて選択するために、より好ましい方法が (若干複雑ですが) いくつか存在します。1 つは、機構 OID を「手動で」構築し、使用できる機構の集合と比較する方法です。もう 1 つは、使用できる機構の集合を取得して、その中から 1 つを選択する方法です。
typedef struct gss_OID_desc struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; |
この構造体の elements フィールドは、gss_OID の通常の BER TLV エンコーディングの値の部分の ASN.1 BER エンコーディングが格納されているオクテット文字列の最初のバイトを指します。length フィールドには、この値のバイト数が格納されています。たとえば、DASS X.509 認証機構に対応する gss_OID 値の場合、length フィールドは 7 で、elements フィールドは「53,14,2,207,163,7,5」という 8 進数値を含む 7 つのオクテットを指します。
機構 OID を構築する 1 つの方法は、gss_OID を宣言して、次に、その要素を手作業で初期化して、機構の OID を表すようにします。前述のとおり、elements 値はハードコード化するか、表から検索するか、あるいは、ユーザー入力から取得できます。この方法は gss_str_to_oid() を使用するよりも手がかかりますが、同じ効果が得られます。
次に、手作業で構築した gss_OID を、使用できる機構の集合と比較します。使用できる機構の集合は、gss_indicate_mechs() または gss_inquire_mechs_for_name() の関数から戻されます。手作業で構築した機構 OID が、使用できる機構の集合の中に存在するかどうかを調べるには、gss_test_oid_set_member() 関数を使用します。gss_test_oid_set_member() がエラーを戻さなかった場合、手作業で構築した OID は GSS-API トランザクション用の機構として使用できます。
OID を手作業で構築する代わりに、gss_indicate_mechs() または gss_inquire_mechs_for_name() を使用すると、使用できる機構の gss_OID_set を取得できます。次に、gss_OID_set の形式を示します。
typedef struct gss_OID_set_desc_struct { OM_uint32 length; void *elements; } gss_OID_set_desc, *gss_OID_set; |
elements は機構を表す gss_OID です。すると、アプリケーションは各機構を解析し、それぞれの elements の値 (つまり、機構の数値表記) を表示できます。この結果、ユーザーは表示された値に基づいて使用したい機構を選択し、選択した機構が gss_OID_set の適切なメンバーになるようにアプリケーションで設定できます。あるいは、希望する機構と使用できる機構のリストをアプリケーションで比較することも可能です。