summaryrefslogtreecommitdiffstats
path: root/proxy/src
diff options
context:
space:
mode:
authorGünther Deschner <gdeschner@redhat.com>2012-09-03 14:16:25 +0200
committerGünther Deschner <gdeschner@redhat.com>2012-10-18 17:06:50 +0200
commit5aedd1cfde6ead5b75866ddb34a65aa56282df0e (patch)
treeba7a4cfa0c6188377f72786aaae6772f151c9d94 /proxy/src
parenteeb54f52b49dc6cef6560498425976e080e2571e (diff)
downloadgss-proxy-5aedd1cfde6ead5b75866ddb34a65aa56282df0e.tar.gz
gss-proxy-5aedd1cfde6ead5b75866ddb34a65aa56282df0e.tar.xz
gss-proxy-5aedd1cfde6ead5b75866ddb34a65aa56282df0e.zip
Call gss_export_name_composite() from gp_conv_name_to_gssx().
Diffstat (limited to 'proxy/src')
-rw-r--r--proxy/src/gp_conv.c21
-rw-r--r--proxy/src/gp_conv.h1
2 files changed, 21 insertions, 1 deletions
diff --git a/proxy/src/gp_conv.c b/proxy/src/gp_conv.c
index 0eab8e7..6f60cd6 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,35 @@ 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;
+ }
+ }
+
/* 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);