コンテキストを作成するには、rpc_gss_seccreate() を呼び出します。この関数は次の引数を取ります。
クライアントのハンドル (たとえば、clnt_create() が戻す)
サーバープリンシパル名 (たとえば、nfs@acme.com)
セッションの機構 (たとえば、Kerberos V5)
セキュリティサービスのタイプ (たとえば、プライバシ)
セッションの QOP
たいてい未定義なまま使用できる (つまり、プログラマが NULL 値を指定できる) 2 つの GSS-API パラメータ
rpc_gss_seccreate() を呼び出すと AUTH 認証ハンドルを戻します。例 8-1 に、rpc_gss_seccreate() で、Kerberos V5 セキュリティ機構と完全性サービスを使用してコンテキストを作成する方法を示します。
CLIENT *clnt; /* クライアントハンドル */ char server_host[] = "foo"; char service_name[] = "nfs@eng.acme.com"; char mech[] = "kerberos_v5"; clnt = clnt_create(server_host, SERVER_PROG, SERV_VERS, "netpath"); clnt->clnt_auth = rpc_gss_seccreate(clnt, service_name, mech, rpc_gss_svc_integrity, NULL, NULL, NULL); . . .
例 8-1 では、次のことに注意してください。
(読みやすいように) 機構は明示的に宣言しています。しかし、プログラムとしては、rpc_gss_get_mechanisms() を使用して利用可能な機構のテーブルから取得する方がより一般的です。
QOP として NULL が渡されているため、この機構のデフォルトが QOP に設定されます。それ以外の場合、機構に有効な値を取得するには rpc_gss_get_mechanisms() を使用できます。詳細は、rpc_gss_get_mechanisms(3N) のマニュアルページを参照してください。
セキュリティサービスのタイプ rpc_gss_svc_integrity は、RPCSEC_GSS タイプ rpc_gss_service_t の enum です。次に、rpc_gss_service_t の形式を示します。
typedef enum { rpc_gss_svc_default = 0, rpc_gss_svc_none = 1, rpc_gss_svc_integrity = 2, rpc_gss_svc_privacy = 3 } rpc_gss_service_t;
デフォルトのセキュリティサービスは完全性であるため、プログラマは rpc_gss_svc_default を指定しても同じ結果を得ることができます。
詳細は、rpc_gss_seccreate(3N) のマニュアルページを参照してください。