X-Git-Url: http://www.project-moonshot.org/gitweb/?p=moonshot.git;a=blobdiff_plain;f=moonshot%2Fmech_eap%2Futil_radius.cpp;h=9111e209759a34ec1e2f83dbc3bb18e00adcd139;hp=a23d93d5037a32d1e096aa2de588634ca3cc20da;hb=f8cc49e125b030bc7c81373984d12e54abc3cb11;hpb=3b237861776ddd08b2b9934974d6dc097b7c21a2 diff --git a/moonshot/mech_eap/util_radius.cpp b/moonshot/mech_eap/util_radius.cpp index a23d93d..9111e20 100644 --- a/moonshot/mech_eap/util_radius.cpp +++ b/moonshot/mech_eap/util_radius.cpp @@ -492,30 +492,6 @@ gss_eap_radius_attr_provider::init(void) { gss_eap_attr_ctx::registerProvider(ATTR_TYPE_RADIUS, createAttrContext); -#ifdef GSSEAP_ENABLE_REAUTH - struct rs_context *radContext; - - /* - * 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) != 0) - return false; - - if (rs_context_read_config(radContext, RS_CONFIG_FILE) != 0) { - rs_context_destroy(radContext); - return false; - } - - if (rs_context_init_freeradius_dict(radContext, NULL)) { - rs_context_destroy(radContext); - return false; - } - - rs_context_destroy(radContext); -#endif - return true; } @@ -871,3 +847,53 @@ gssEapRadiusMapError(OM_uint32 *minor, return GSS_S_FAILURE; } + +OM_uint32 +gssEapCreateRadiusContext(OM_uint32 *minor, + gss_cred_id_t cred, + struct rs_context **pRadContext) +{ + const char *configFile = RS_CONFIG_FILE; + struct rs_context *radContext; + struct rs_alloc_scheme ralloc; + struct rs_error *err; + OM_uint32 major; + + *pRadContext = NULL; + + if (rs_context_create(&radContext) != 0) { + *minor = GSSEAP_RADSEC_CONTEXT_FAILURE; + return GSS_S_FAILURE; + } + + if (cred->radiusConfigFile.value != NULL) + configFile = (const char *)cred->radiusConfigFile.value; + + ralloc.calloc = GSSEAP_CALLOC; + ralloc.malloc = GSSEAP_MALLOC; + ralloc.free = GSSEAP_FREE; + ralloc.realloc = GSSEAP_REALLOC; + + rs_context_set_alloc_scheme(radContext, &ralloc); + + if (rs_context_read_config(radContext, configFile) != 0) { + err = rs_err_ctx_pop(radContext); + goto fail; + } + + if (rs_context_init_freeradius_dict(radContext, NULL) != 0) { + err = rs_err_ctx_pop(radContext); + goto fail; + } + + *pRadContext = radContext; + + *minor = 0; + return GSS_S_COMPLETE; + +fail: + major = gssEapRadiusMapError(minor, err); + rs_context_destroy(radContext); + + return major; +}