server_acquire_creds() は要求されたネットワークサービスの資格を取得します。
/*
* 関数: server_acquire_creds
*
* 目的: サービス名をインポートし、その資格を獲得する
*
* 引数:
*
* service_name (r) サービスの ASCII 名
mechType (r) 使用される機構の型
* server_creds (w) GSS-API サービスの資格
*
* 戻り値: 成功した場合は 0、失敗した場合は -1
*
* 効果:
*
* サービス名が gss_import_name でインポートされ、サービスの資格が
* gss_acquire_cred で獲得される。どちらかの操作が失敗した場合、
* エラーメッセージが表示され、-1 が戻される。そうでない場合、0 が戻される。
*/
int server_acquire_creds(service_name, mechOid, server_creds)
char *service_name;
gss_OID mechOid;
gss_cred_id_t *server_creds;
{
gss_buffer_desc name_buf;
gss_name_t server_name;
OM_uint32 maj_stat, min_stat;
gss_OID_set_desc mechOidSet;
gss_OID_set desiredMechs = GSS_C_NULL_OID_SET;
if (mechOid != GSS_C_NULL_OID) {
desiredMechs = &mechOidSet;
mechOidSet.count = 1;
mechOidSet.elements = mechOid;
} else
desiredMechs = GSS_C_NULL_OID_SET;
name_buf.value = service_name;
name_buf.length = strlen(name_buf.value) + 1;
maj_stat = gss_import_name(&min_stat, &name_buf,
(gss_OID) GSS_C_NT_HOSTBASED_SERVICE, &server_name);
if (maj_stat != GSS_S_COMPLETE) {
display_status("importing name", maj_stat, min_stat);
if (mechOid != GSS_C_NO_OID)
gss_release_oid(&min_stat, &mechOid);
return -1;
}
maj_stat = gss_acquire_cred(&min_stat, server_name, 0,
desiredMechs, GSS_C_ACCEPT,
server_creds, NULL, NULL);
if (maj_stat != GSS_S_COMPLETE) {
display_status("acquiring credentials", maj_stat, min_stat);
return -1;
}
(void) gss_release_name(&min_stat, &server_name);
return 0;
}
|