X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=blobdiff_plain;f=util_radius.cpp;h=f730ddb565b7e28a670d7360c083afd7ddb36b69;hp=90ce876c26c1c0ac0944b2d042a22fb070d0190c;hb=203b509a0240995c98f04119906f84b280b3c429;hpb=360166c7359173c01758a2d24aa7e8985c1190c7 diff --git a/util_radius.cpp b/util_radius.cpp index 90ce876..f730ddb 100644 --- a/util_radius.cpp +++ b/util_radius.cpp @@ -446,9 +446,25 @@ gss_eap_radius_attr_provider::releaseAnyNameMapping(gss_buffer_t type_id, bool gss_eap_radius_attr_provider::init(void) { + struct rs_context *radContext; + gss_eap_attr_ctx::registerProvider(ATTR_TYPE_RADIUS, "urn:ietf:params:gss-eap:radius-avp", createAttrContext); + +#if 1 + /* + * This hack is necessary in order to force the loading of the global + * dictionary, otherwise accepting reauthentication tokens fails unless + * the acceptor has already accepted a normal authentication token. + */ + if (rs_context_create(&radContext, RS_DICT_FILE) != 0) { + return false; + } + + rs_context_destroy(radContext); +#endif + return true; } @@ -660,10 +676,11 @@ avpImport(VALUE_PAIR **pVp, remain -= 4; da = dict_attrbyvalue(attrid); - if (da == NULL) - goto fail; - - vp = pairalloc(da); + if (da != NULL) { + vp = pairalloc(da); + } else { + vp = paircreate(attrid, PW_TYPE_STRING); + } if (vp == NULL) { throw new std::bad_alloc; goto fail; @@ -707,7 +724,9 @@ avpImport(VALUE_PAIR **pVp, return true; fail: - pairbasicfree(vp); + if (vp != NULL) + pairbasicfree(vp); + *pVp = NULL; return false; }