GSS-API のプログラミング

概要: main() (クライアント)

すべての C プログラムと同様に、プログラムの外部シェルはエントリポイント関数 main() に含まれます。main() は次の 4 つの機能を実行します。

  1. コマンド行引数を解析し、各引数を変数に割り当てます。

    • port が指定されている場合、porthost で指定されたリモートマシンへの接続を確立するポート番号です。

    • -d フラグが設定されている場合、セキュリティ資格はサーバーに委託されます。特に、deleg_flag 変数は GSS-API 値 GSS_C_DELEG_FLAG に設定されます。-d フラグが設定されていない場合、deleg_flag は 0 に設定されます。

    • (省略可能) mech は使用されるセキュリティ機構名 (Kerberos v5 や X.509 など) です。機構が指定されていない場合、GSS-API はデフォルトの機構を使用します。

    • クライアントから要求されたネットワークサービス名 (telnetftplogin などのサービス) は service_name に割り当てられます。

    • 最後に、msg は保護されたデータとしてサーバーに送信される文字列です。-f オプションが指定されている場合、msg は文字列を読み取るべきファイル名です。

    次に、コマンド行の例を示します。


    % gss-client -port 8080 -d -mech kerberos_v5 erebos.eng nfs "ls"
    

    次のコマンド行は機構もポートも指定せず、委託も使用しません。


    % gss-client erebos.eng nfs "ls"
    

  2. parse_oid() を呼び出して、(コマンド行に指定されている場合) セキュリティ機構名から、GSS-API OID (オブジェクト識別子) を作成します。


    if (mechanism)
             parse_oid(mechanism, &g_mechOid);

    mechanism は変換される文字列で、g_mechOid は機構の gss_OID オブジェクトへのポインタです。デフォルト以外の機構の指定については、付録 C 「OID の指定」 を参照してください。

  3. call_server() を呼び出します。この関数は、コンテキストの作成とデータの送信を実際に行います。


    if (call_server(hostname, port, g_mechOid, service_name,
                       deleg_flag, msg, use_file) < 0)
              exit(1);
  4. OID の記憶領域を解放します (まだ解放されていない場合)。


    if (g_mechOID != GSS_C_NULL_OID)
         (void) gss_release_oid(&min_stat, &g_mechoid);

    gss_release_oid() は、GSS-API の Sun の実装ではサポートされますが、すべての GSS-API 実装でサポートされるわけではなく、標準ではないと考えられます。アプリケーションは、gss_str_to_oid() で機構を割り当てるのではなく、可能な限り GSS-API が提供するデフォルトの機構を使用するべきです。したがって、gss_release_oid() コマンドは通常使用するべきではありません。