diff options
author | Günther Deschner <gdeschner@redhat.com> | 2012-09-03 14:16:25 +0200 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2012-10-25 15:53:31 -0400 |
commit | 1d61edb4f36bccf9f258e8723d8bd652bcf478c4 (patch) | |
tree | c1c5824b366b3839d54ee1f903396ebc1c8f628e /proxy/src | |
parent | bb17b8618078ba68ced8f1dc077e83f1ffdb3514 (diff) | |
download | gss-proxy-1d61edb4f36bccf9f258e8723d8bd652bcf478c4.tar.gz gss-proxy-1d61edb4f36bccf9f258e8723d8bd652bcf478c4.tar.xz gss-proxy-1d61edb4f36bccf9f258e8723d8bd652bcf478c4.zip |
Call gss_export_name_composite() from gp_conv_name_to_gssx().
Make sure to return success in gp_conv_name_to_gssx() at that point.
Diffstat (limited to 'proxy/src')
-rw-r--r-- | proxy/src/gp_conv.c | 23 | ||||
-rw-r--r-- | proxy/src/gp_conv.h | 1 |
2 files changed, 23 insertions, 1 deletions
diff --git a/proxy/src/gp_conv.c b/proxy/src/gp_conv.c index 0eab8e7..a4b8fa0 100644 --- a/proxy/src/gp_conv.c +++ b/proxy/src/gp_conv.c @@ -340,6 +340,7 @@ uint32_t gp_conv_name_to_gssx(uint32_t *min, gss_name_t in, gssx_name *out) gss_buffer_desc name_buffer = GSS_C_EMPTY_BUFFER; gss_OID name_type; gss_buffer_desc exported_name = GSS_C_EMPTY_BUFFER; + gss_buffer_desc exported_composite_name = GSS_C_EMPTY_BUFFER; int ret; ret_maj = gss_display_name(&ret_min, in, &name_buffer, &name_type); @@ -377,17 +378,37 @@ uint32_t gp_conv_name_to_gssx(uint32_t *min, gss_name_t in, gssx_name *out) } } - /* out->exported_composite_name */ + ret_maj = gss_export_name_composite(&ret_min, in, &exported_composite_name); + if (ret_maj == 0) { + ret = gp_conv_buffer_to_gssx(&exported_composite_name, &out->exported_composite_name); + if (ret) { + ret_maj = GSS_S_FAILURE; + ret_min = ret; + goto done; + } + } else { + /* In case the error is GSS_S_NAME_NOT_MN the name was not + * canonicalized but that is ok we simply do not export the name + * in this case */ + if (ret_maj != GSS_S_NAME_NOT_MN) { + goto done; + } + } + + ret_maj = GSS_S_COMPLETE; + /* out->name_attributes */ done: *min = ret_min; gss_release_buffer(&ret_min, &name_buffer); gss_release_buffer(&ret_min, &exported_name); + gss_release_buffer(&ret_min, &exported_composite_name); if (ret_maj) { xdr_free((xdrproc_t)xdr_gssx_buffer, (char *)&out->display_name); xdr_free((xdrproc_t)xdr_gssx_OID, (char *)&out->name_type); xdr_free((xdrproc_t)xdr_gssx_buffer, (char *)&out->exported_name); + xdr_free((xdrproc_t)xdr_gssx_buffer, (char *)&out->exported_composite_name); } return ret_maj; } diff --git a/proxy/src/gp_conv.h b/proxy/src/gp_conv.h index b0c69fb..c79010d 100644 --- a/proxy/src/gp_conv.h +++ b/proxy/src/gp_conv.h @@ -27,6 +27,7 @@ #define _GSS_CONV_H_ #include <gssapi/gssapi.h> +#include <gssapi/gssapi_ext.h> #include "rpcgen/gss_proxy.h" void *gp_memdup(void *in, size_t len); |