From 3fe4e9cb0281b1e758545ce8cae14df05972bf61 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 23 Jul 2012 18:03:15 -0400 Subject: Add name handle wrapper --- proxy/src/mechglue/gss_plugin.c | 62 +++++++++++++++++++++++++++++++++++++++++ proxy/src/mechglue/gss_plugin.h | 9 ++++++ 2 files changed, 71 insertions(+) (limited to 'proxy/src/mechglue') diff --git a/proxy/src/mechglue/gss_plugin.c b/proxy/src/mechglue/gss_plugin.c index d1d5ec7..31ace12 100644 --- a/proxy/src/mechglue/gss_plugin.c +++ b/proxy/src/mechglue/gss_plugin.c @@ -378,7 +378,69 @@ uint32_t gpp_remote_to_local_ctx(uint32_t *minor, gssx_ctx **remote_ctx, xdr_free((xdrproc_t)xdr_gssx_ctx, (char *)(*remote_ctx)); *remote_ctx = NULL; + return maj; +} + +uint32_t gpp_name_to_local(uint32_t *minor, gssx_name *name, + gss_OID mech_type, gss_name_t *mech_name) +{ + uint32_t maj, min; + gss_buffer_desc display_name_buffer = GSS_C_EMPTY_BUFFER; + gss_OID display_name_type = GSS_C_NO_OID; + gss_name_t tmpname = NULL; + + maj = gpm_display_name(minor, name, + &display_name_buffer, + &display_name_type); + if (maj) { + return maj; + } + + maj = gss_import_name(minor, + &display_name_buffer, + display_name_type, + &tmpname); + + (void)gss_release_buffer(&min, &display_name_buffer); + (void)gss_release_oid(&min, &display_name_type); + + if (maj) { + return maj; + } + + if (mech_type != GSS_C_NO_OID) { + /* name for specific mech requested */ + maj = gss_canonicalize_name(minor, + tmpname, + gpp_special_mech(mech_type), + NULL); + } + + *mech_name = tmpname; + return maj; +} + +uint32_t gpp_local_to_name(uint32_t *minor, + gss_name_t local_name, gssx_name **name) +{ + uint32_t maj, min; + gss_buffer_desc display_name_buffer = GSS_C_EMPTY_BUFFER; + gss_OID display_name_type = GSS_C_NO_OID; + + maj = gss_display_name(minor, local_name, + &display_name_buffer, + &display_name_type); + if (maj) { + return maj; + } + + maj = gpm_import_name(minor, + &display_name_buffer, + display_name_type, + name); + (void)gss_release_buffer(&min, &display_name_buffer); + (void)gss_release_oid(&min, &display_name_type); return maj; } diff --git a/proxy/src/mechglue/gss_plugin.h b/proxy/src/mechglue/gss_plugin.h index 6184828..7fe5b5c 100644 --- a/proxy/src/mechglue/gss_plugin.h +++ b/proxy/src/mechglue/gss_plugin.h @@ -38,6 +38,11 @@ struct gpp_context_handle { gss_ctx_id_t local; }; +struct gpp_name_handle { + gssx_name *remote; + gss_name_t local; +}; + extern const gss_OID_desc gssproxy_mech_interposer; enum gpp_behavior { @@ -58,5 +63,9 @@ uint32_t gpp_unmap_error(uint32_t err); uint32_t gpp_remote_to_local_ctx(uint32_t *minor, gssx_ctx **remote_ctx, gss_ctx_id_t *local_ctx); uint32_t gpp_copy_oid(uint32_t *minor, gss_OID in, gss_OID *out); +uint32_t gpp_name_to_local(uint32_t *minor, gssx_name *name, + gss_OID mech_type, gss_name_t *mech_name); +uint32_t gpp_local_to_name(uint32_t *minor, + gss_name_t local_name, gssx_name **name); #endif /* _GSS_PLUGIN_H_ */ -- cgit