GSS-API のプログラミング

概要: main() (サーバー)

gss-clientmain() 関数から始めます。main() は次の作業を実行します。

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

    • port が指定されている場合、port は待機するポート番号です。port が指定されていない場合、プログラムはデフォルトでポート 4444 を使用します。

    • -verbose が指定されている場合、プログラムはデバッグに類似したモードで動作します。

    • -inetd オプションは、プログラムが inetd デーモンを使用してポートで待機することを指示します。inetdstdinstdout を使用してクライアントとの接続を処理します。

    • -once が指定されている場合、プログラムは 1 つのインスタンス接続だけを作成します。

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

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

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


    % gss-server -port 8080 -once -mech kerberos_v5 erebos.eng nfs "hello"
    

  2. 機構を GSS-API オブジェクト識別子 (OID) に変換します (指定されている場合)。これは、GSS-API 関数が名前を内部形式で処理するためです。

  3. 使用される機構 (Kerberos v5 など) のために、サービス (ftp など) の資格を獲得します。

  4. sign_server() 関数を呼び出します。この関数は、接続の確立、メッセージの受け取り、その署名など、ほとんどの作業を実際に行います。

    inetd を使用するようにユーザーが指定している場合、プログラムは標準出力と標準エラーを閉じ、標準入力で sign_server() を呼び出します。inetd はこの sign_server() を使用して接続を渡します。そうでない場合、プログラムはソケットを作成し、そのソケットの接続を TCP 関数 accept() で受け入れ、accept() から戻されたファイル記述子で sign_server() を呼び出します。

    inetd を使用しない場合、プログラムは終了されるまで接続とコンテキストを作成します。しかし、ユーザーが -once オプションを指定している場合、ループは最初の接続の後で終了します。

  5. 獲得した資格を解放します。

  6. 機構 OID の名前空間を解放します。

  7. 接続を閉じます (まだ開いている場合)。