From de13ec1bef665ffca5093daa5e957018cc0bc5b8 Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Tue, 19 Apr 2011 18:58:38 +0200 Subject: [PATCH] Allow composite names in GSS_C_NT_EXPORT_NAME --- mech_eap/util.h | 1 + mech_eap/util_name.c | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mech_eap/util.h b/mech_eap/util.h index 1a51d6f..b3399be 100644 --- a/mech_eap/util.h +++ b/mech_eap/util.h @@ -452,6 +452,7 @@ gssEapSaslNameToOid(const gss_buffer_t name); /* util_name.c */ #define EXPORT_NAME_FLAG_OID 0x1 #define EXPORT_NAME_FLAG_COMPOSITE 0x2 +#define EXPORT_NAME_FLAG_ALLOW_COMPOSITE 0x4 OM_uint32 gssEapAllocName(OM_uint32 *minor, gss_name_t *pName); OM_uint32 gssEapReleaseName(OM_uint32 *minor, gss_name_t *pName); diff --git a/mech_eap/util_name.c b/mech_eap/util_name.c index 84478fd..fbd4b8a 100644 --- a/mech_eap/util_name.c +++ b/mech_eap/util_name.c @@ -339,7 +339,6 @@ gssEapImportNameInternal(OM_uint32 *minor, unsigned char *p; size_t len, remain; gss_buffer_desc buf; - enum gss_eap_token_type tokType; gss_name_t name = GSS_C_NO_NAME; gss_OID mechanismUsed = GSS_C_NO_OID; @@ -350,6 +349,8 @@ gssEapImportNameInternal(OM_uint32 *minor, if (flags & EXPORT_NAME_FLAG_OID) { gss_OID_desc mech; + enum gss_eap_token_type tokType; + uint16_t wireTokType; /* TOK_ID || MECH_OID_LEN || MECH_OID */ if (remain < 6) { @@ -363,7 +364,15 @@ gssEapImportNameInternal(OM_uint32 *minor, tokType = TOK_TYPE_EXPORT_NAME; /* TOK_ID */ - if (load_uint16_be(p) != tokType) { + wireTokType = load_uint16_be(p); + + if ((flags & EXPORT_NAME_FLAG_ALLOW_COMPOSITE) && + wireTokType == TOK_TYPE_EXPORT_NAME_COMPOSITE) { + tokType = TOK_TYPE_EXPORT_NAME_COMPOSITE; + flags |= EXPORT_NAME_FLAG_COMPOSITE; + } + + if (wireTokType != tokType) { *minor = GSSEAP_WRONG_TOK_ID; return GSS_S_BAD_NAME; } @@ -448,7 +457,8 @@ importExportName(OM_uint32 *minor, gss_name_t *name) { return gssEapImportNameInternal(minor, nameBuffer, name, - EXPORT_NAME_FLAG_OID); + EXPORT_NAME_FLAG_OID | + EXPORT_NAME_FLAG_ALLOW_COMPOSITE); } #ifdef HAVE_GSS_C_NT_COMPOSITE_EXPORT -- 2.1.4