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; } |