セキュリティコンテキストを確立し、保持するには、次の 2 つのタイプの主体名が必要です。
「サーバー」主体名
サーバーの主体名は、通常、「service@host」の形式の NULL で終わる ASCII 文字列で指定します。たとえば、 nfs@dalkey.eng.company.com のように指定します。
クライアントが rpc_gss_seccreate() でセキュリティコンテキストを作成する時に、この方法でサーバーの主体名を指定します。同様にサーバーは、表示する主体名を設定する必要がある場合は、引数としてこのフォーマットの主体名をとる rpc_gss_set_svc_name() を使用します。
「クライアント」主体名
サーバーが受信するクライアントの主体名は、rpc_gss_principal_t 構造の形式 (使用するメカニズムによって決定される、不透明で長さを暗示したバイト列) をとります。
サーバーは、起動時に、そのサーバーを表わす主体名を指定する必要があります。1 つのサーバーが複数の主体として機能する場合もあります。サーバー主体名の設定には、rpc_gss_set_svc_name() を使用します。
char *principal, *mechanism; u_int req_time; principal = "nfs@engineering.company.com"; mechanism = "kerberosv5"; req_time = 10000; /* 資格の有効時間 */ rpc_gss_set_svc_name(principal, mechanism, req_time, SERV_PROG, SERV_VERS); |
サーバーは、クライアントの主体名で稼動できなければなりません。たとえば、クライアントの主体名をアクセス制御リストと比較するため、またはクライアントの UNIX 資格を検出するため (このような資格が存在する場合) に必要です。サーバーが、受信した主体名を既知のエンティティの名前と比較する必要がある場合、サーバーは、既知のエンティティ用に rpc_gss_principal_t 主体名を生成できなければなりません。 rpc_gss_get_principal_name() 呼び出しでは、ネットワーク上で個人を識別するパラメータをいくつか入力し、rpc_gss_principal_t 構造ポインタの形式で主体名を設定します。
rpc_gss_principal_t *principal; rpc_gss_get_principal_name(principal, mechanism, name, node, domain); . . . |
主体名は、free() ライブラリコールを使用して解放します。