gss-client
は main() 関数から始めます。main() は次の作業を実行します。
コマンド行引数を解析し、各引数を変数に割り当てます。
port が指定されている場合、port は待機するポート番号です。port が指定されていない場合、プログラムはデフォルトでポート 4444 を使用します。
-verbose が指定されている場合、プログラムはデバッグに類似したモードで動作します。
-inetd オプションは、プログラムが inetd デーモンを使用してポートで待機することを指示します。 inetd は stdin と stdout を使用してクライアントとの接続を処理します。
-once が指定されている場合、プログラムは 1 つのインスタンス接続だけを作成します。
(省略可能) mechanism は使用されるセキュリティ機構名 (Kerberos v5 など) です。機構が指定されていない場合、GSS-API はデフォルトの機構を使用します。
クライアントから要求されたネットワークサービス名
(telnet
、ftp
、login などのサービス) は service_name で指定されます。
次に、コマンド行の例を示します。
% gss-server -port 8080 -once -mech kerberos_v5 erebos.eng nfs "hello" |
機構を GSS-API オブジェクト識別子 (OID) に変換します (指定されている場合)。これは、GSS-API 関数が名前を内部形式で処理するためです。
使用される機構 (Kerberos v5 など) のために、サービス (ftp など) の資格を獲得します。
sign_server() 関数を呼び出します。この関数は、接続の確立、メッセージの受け取り、その署名など、ほとんどの作業を実際に行います。
inetd を使用するようにユーザーが指定している場合、プログラムは標準出力と標準エラーを閉じ、標準入力で sign_server() を呼び出します。inetd はこの sign_server() を使用して接続を渡します。そうでない場合、プログラムはソケットを作成し、そのソケットの接続を TCP 関数 accept() で受け入れ、accept() から戻されたファイル記述子で sign_server() を呼び出します。
inetd を使用しない場合、プログラムは終了されるまで接続とコンテキストを作成します。しかし、ユーザーが -once オプションを指定している場合、ループは最初の接続の後で終了します。
獲得した資格を解放します。
機構 OID の名前空間を解放します。
接続を閉じます (まだ開いている場合)。