gss_str_to_oid() は常に使用できるわけではなく、また推奨されるものではないため、使用できる機構を調べて選択するために、より好ましい方法が (若干複雑ですが) いくつか存在します。1 つは、機構 OID を「手動で」構築し、使用できる機構の集合と比較する方法です。もう 1 つは、使用できる機構の集合を取得して、その中から 1 つを選択する方法です。
typedef struct gss_OID_desc struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; |
機構 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; |