すべての C プログラムと同様に、プログラムの外部シェルはエントリポイント関数 main() に含まれます。main() は次の 4 つの機能を実行します。
コマンド行引数を解析し、各引数を変数に割り当てます。
port が指定されている場合、port は host で指定されたリモートマシンへの接続を確立するポート番号です。
-d フラグが設定されている場合、セキュリティ資格はサーバーに委託されます。特に、deleg_flag 変数は GSS-API 値 GSS_C_DELEG_FLAG に設定されます。-d フラグが設定されていない場合、deleg_flag は 0 に設定されます。
(省略可能) mech は使用されるセキュリティ機構名 (Kerberos v5 や X.509 など) です。機構が指定されていない場合、GSS-API はデフォルトの機構を使用します。
クライアントから要求されたネットワークサービス名 (telnet
、ftp
、login
などのサービス) は service_name に割り当てられます。
最後に、msg は保護されたデータとしてサーバーに送信される文字列です。-f オプションが指定されている場合、msg は文字列を読み取るべきファイル名です。
次に、コマンド行の例を示します。
% gss-client -port 8080 -d -mech kerberos_v5 erebos.eng nfs "ls" |
次のコマンド行は機構もポートも指定せず、委託も使用しません。
% gss-client erebos.eng nfs "ls" |
parse_oid() を呼び出して、(コマンド行に指定されている場合) セキュリティ機構名から、GSS-API OID (オブジェクト識別子) を作成します。
if (mechanism) parse_oid(mechanism, &g_mechOid); |
call_server() を呼び出します。この関数は、コンテキストの作成とデータの送信を実際に行います。
if (call_server(hostname, port, g_mechOid, service_name, deleg_flag, msg, use_file) < 0) exit(1); |
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() コマンドは通常使用するべきではありません。