AC_SUBST(KRB5_CFLAGS)
AC_SUBST(KRB5_LDFLAGS)
AC_SUBST(KRB5_LIBS)
+ AC_CHECK_LIB(gssapi_krb5, GSS_C_NT_COMPOSITE_EXPORT, [AC_DEFINE_UNQUOTED([HAVE_GSS_C_NT_COMPOSITE_EXPORT], 1, [Define if GSS-API library supports recent naming extensions draft])], [], "$KRB5_LDFLAGS")
fi
])dnl
#include "gssapiP_eap.h"
-#if 0
-/*
- * Not sure about this. If we have a generalised representation of composite
- * names, it should be (a) defined in the naming extensions specification
- * and (b) implemented by the mechanism glue.
- */
OM_uint32
gss_export_name_composite(OM_uint32 *minor,
gss_name_t input_name,
return gssEapExportNameInternal(minor, input_name, exported_name,
EXPORT_NAME_FLAG_OID | EXPORT_NAME_FLAG_ATTRS);
}
-#endif
if (GSS_ERROR(major))
goto cleanup;
+#ifdef HAVE_GSS_C_NT_COMPOSITE_EXPORT
+ major = gss_add_oid_set_member(minor, GSS_C_NT_COMPOSITE_EXPORT, name_types);
+ if (GSS_ERROR(major))
+ goto cleanup;
+#endif
+
major = gss_add_oid_set_member(minor, GSS_EAP_NT_PRINCIPAL_NAME, name_types);
if (GSS_ERROR(major))
goto cleanup;
unsigned char *p;
size_t len, remain;
gss_buffer_desc buf;
- enum gss_eap_token_type tok_type;
+ enum gss_eap_token_type tokType;
gss_name_t name = GSS_C_NO_NAME;
GSSEAP_KRB_INIT(&krbContext);
if (remain < 6 + GSS_EAP_MECHANISM->length + 4)
return GSS_S_BAD_NAME;
+ if (flags & EXPORT_NAME_FLAG_ATTRS)
+ tokType = TOK_TYPE_EXPORT_NAME_COMPOSITE;
+ else
+ tokType = TOK_TYPE_EXPORT_NAME;
+
/* TOK_ID */
- tok_type = load_uint16_be(p);
- if (tok_type != TOK_TYPE_EXPORT_NAME &&
- tok_type != TOK_TYPE_EXPORT_NAME_COMPOSITE)
+ if (load_uint16_be(p) != tokType)
return GSS_S_BAD_NAME;
UPDATE_REMAIN(2);
- if (tok_type == TOK_TYPE_EXPORT_NAME_COMPOSITE)
- flags |= EXPORT_NAME_FLAG_ATTRS;
-
/* MECH_OID_LEN */
len = load_uint16_be(p);
if (len != 2 + GSS_EAP_MECHANISM->length)
else if (oidEqual(nameType, GSS_C_NT_EXPORT_NAME))
major = gssEapImportNameInternal(minor, nameBuffer, name,
EXPORT_NAME_FLAG_OID);
+#ifdef HAVE_GSS_C_NT_COMPOSITE_EXPORT
+ else if (oidEqual(nameType, GSS_C_NT_COMPOSITE_EXPORT))
+ major = gssEapImportNameInternal(minor, nameBuffer, name,
+ EXPORT_NAME_FLAG_OID |
+ EXPORT_NAME_FLAG_ATTRS);
+#endif
else
major = GSS_S_BAD_NAMETYPE;
return major;
}
-