From 77a2858bcd38553e588e113d3614a066d22318ea Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Tue, 21 Sep 2010 19:18:24 +0200 Subject: [PATCH] use urn:radius: prefix --- mech_eap/util_radius.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mech_eap/util_radius.cpp b/mech_eap/util_radius.cpp index a6d186b..ff00f77 100644 --- a/mech_eap/util_radius.cpp +++ b/mech_eap/util_radius.cpp @@ -32,6 +32,11 @@ #include "gssapiP_eap.h" +static gss_buffer_desc radiusUrnPrefix = { + sizeof("urn:radius:") - 1, + (void *)"urn:radius:" +}; + VALUE_PAIR * gss_eap_radius_attr_provider::copyAvps(const VALUE_PAIR *src) { @@ -179,7 +184,8 @@ gss_eap_radius_attr_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addA attribute.value = (void *)vp->name; attribute.length = strlen(vp->name); #else - snprintf(attrid, sizeof(attrid), "%d", vp->attribute); + snprintf(attrid, sizeof(attrid), "%s%d", + (char *)radiusUrnPrefix.value, vp->attribute); attribute.value = attrid; attribute.length = strlen(attrid); @@ -221,11 +227,12 @@ gss_eap_radius_attr_provider::getAttribute(const gss_buffer_t attr, char *s; /* XXX vendor */ - duplicateBuffer(*attr, &strAttr); s = (char *)strAttr.value; - if (isdigit(((char *)strAttr.value)[0])) { + if (attr->length >= radiusUrnPrefix.length && + memcmp(s, radiusUrnPrefix.value, radiusUrnPrefix.length) == 0) { + s += radiusUrnPrefix.length; attrid = strtoul(s, NULL, 10); } else { d = rc_dict_findattr(m_rh, (char *)s); -- 2.1.4