Packages

Bindings to the system GSSAPI library

Current section

Files

Jump to
egssapi c_src egssapi_resources.c
Raw

c_src/egssapi_resources.c

#include "egssapi_resources.h"
#include "egssapi_errors.h"
static void gss_name_dtor(ErlNifEnv* caller_env, void* obj)
{
egssapi_gss_name* gss_name = (egssapi_gss_name*)obj;
uint32_t major, minor;
major = gss_release_name(&minor, &gss_name->inner);
if (major != GSS_S_COMPLETE) {
egssapi_raise_exception(caller_env, major, minor);
}
}
ErlNifResourceType* load_gss_name(ErlNifEnv* caller_env)
{
return enif_open_resource_type(caller_env,
NULL,
"egssapi_gss_name",
gss_name_dtor,
ERL_NIF_RT_CREATE,
NULL);
}
static void gss_cred_handle_dtor(ErlNifEnv* caller_env, void* obj)
{
egssapi_gss_cred_handle* gss_cred_handle= (egssapi_gss_cred_handle*)obj;
uint32_t major, minor;
major = gss_release_cred(&minor, &gss_cred_handle->inner);
if (major != GSS_S_COMPLETE) {
egssapi_raise_exception(caller_env, major, minor);
}
}
ErlNifResourceType* load_cred_handle(ErlNifEnv* caller_env)
{
return enif_open_resource_type(caller_env,
NULL,
"egssapi_cred_handle",
gss_cred_handle_dtor,
ERL_NIF_RT_CREATE,
NULL);
}
static void gss_ctx_handle_dtor(ErlNifEnv* caller_env, void* obj)
{
egssapi_gss_ctx_handle* gss_ctx_handle= (egssapi_gss_ctx_handle*)obj;
uint32_t major, minor;
major = gss_delete_sec_context(&minor, &gss_ctx_handle->inner, NULL);
if (major != GSS_S_COMPLETE) {
egssapi_raise_exception(caller_env, major, minor);
}
}
ErlNifResourceType* load_ctx_handle(ErlNifEnv* caller_env)
{
return enif_open_resource_type(caller_env,
NULL,
"egssapi_ctx_handle",
gss_ctx_handle_dtor,
ERL_NIF_RT_CREATE,
NULL);
}