size_t *pRemain,
gss_name_t *pName)
{
- OM_uint32 major, tmpMinor;
+ OM_uint32 major, tmpMinor, flags;
unsigned char *p = *pBuf;
size_t remain = *pRemain;
gss_buffer_desc tmp;
tmp.value = p + 4;
- major = gssEapImportNameInternal(minor, &tmp, pName,
- EXPORT_NAME_FLAG_COMPOSITE);
+ flags = EXPORT_NAME_FLAG_COMPOSITE;
+ if (mech == GSS_C_NO_OID)
+ flags |= EXPORT_NAME_FLAG_OID;
+
+ major = gssEapImportNameInternal(minor, &tmp, pName, flags);
if (GSS_ERROR(major))
return major;
- if (mech != GSS_C_NO_OID) {
+ if ((flags & EXPORT_NAME_FLAG_OID) == 0) {
major = gssEapCanonicalizeOid(minor, mech, 0, &(*pName)->mechanismUsed);
if (GSS_ERROR(major)) {
gssEapReleaseName(&tmpMinor, pName);