X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=blobdiff_plain;f=mech_eap%2Futil_attr.cpp;h=1931efedec1c08875b18e1fc827e96dcc505b601;hp=3bfe7856df73de60c8bde0c2257ac3558b512698;hb=HEAD;hpb=a1e95d663ffdd950ced493e84f8bf5453c858bd8 diff --git a/mech_eap/util_attr.cpp b/mech_eap/util_attr.cpp index 3bfe785..1931efe 100644 --- a/mech_eap/util_attr.cpp +++ b/mech_eap/util_attr.cpp @@ -58,22 +58,28 @@ GSSEAP_ONCE_CALLBACK(gssEapAttrProvidersInitInternal) if (GSS_ERROR(major)) goto cleanup; -#ifdef HAVE_OPENSAML - major = gssEapSamlAttrProvidersInit(&minor); - if (GSS_ERROR(major)) - goto cleanup; -#endif #ifdef HAVE_SHIBRESOLVER /* Allow Shibboleth initialization failure to be non-fatal */ gssEapLocalAttrProviderInit(&minor); #endif +#ifdef HAVE_OPENSAML + wpa_printf(MSG_INFO, "### gssEapAttrProvidersInitInternal(): Calling gssEapSamlAttrProvidersInit()"); + major = gssEapSamlAttrProvidersInit(&minor); + if (GSS_ERROR(major)) { + wpa_printf(MSG_ERROR, "### gssEapAttrProvidersInitInternal(): Error returned from gssEapSamlAttrProvidersInit; major code is %08X; minor is %08X", major, minor); + goto cleanup; + } +#else + wpa_printf(MSG_INFO, "### gssEapAttrProvidersInitInternal(): Don't have OpenSAML; not calling gssEapSamlAttrProvidersInit()"); +#endif cleanup: #ifdef GSSEAP_DEBUG GSSEAP_ASSERT(major == GSS_S_COMPLETE); #endif + wpa_printf(MSG_INFO, "### gssEapAttrProvidersInitInternal(): Setting gssEapAttrProvidersInitStatus to %08X", major); gssEapAttrProvidersInitStatus = major; GSSEAP_ONCE_LEAVE; @@ -90,24 +96,38 @@ gssEapAttrProvidersInit(OM_uint32 *minor) return gssEapAttrProvidersInitStatus; } -OM_uint32 -gssEapAttrProvidersFinalize(OM_uint32 *minor) -{ - if (gssEapAttrProvidersInitStatus == GSS_S_COMPLETE) { -#ifdef HAVE_SHIBRESOLVER - gssEapLocalAttrProviderFinalize(minor); -#endif + +namespace { + + class finalize_class { + public: + + finalize_class() { + wpa_printf(MSG_INFO, "### finalize_class::finalize_class(): Constructing"); + } + + ~finalize_class() + { + OM_uint32 minor = 0; + + wpa_printf(MSG_INFO, "### ~finalize_class::~finalize_class() : initStatus=%08x", gssEapAttrProvidersInitStatus); + + if (gssEapAttrProvidersInitStatus == GSS_S_COMPLETE) { + wpa_printf(MSG_INFO, "### ~finalize_class::~finalize_class() : really finalizing"); + #ifdef HAVE_OPENSAML - gssEapSamlAttrProvidersFinalize(minor); + gssEapSamlAttrProvidersFinalize(&minor); #endif - gssEapRadiusAttrProviderFinalize(minor); + gssEapRadiusAttrProviderFinalize(&minor); - gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE; - } - - return GSS_S_COMPLETE; + gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE; + } + } + } finalizer; } + + static gss_eap_attr_create_provider gssEapAttrFactories[ATTR_TYPE_MAX + 1]; /* @@ -980,7 +1000,7 @@ gssEapSetNameAttribute(OM_uint32 *minor, OM_uint32 gssEapExportAttrContext(OM_uint32 *minor, - gss_name_t name, + gss_const_name_t name, gss_buffer_t buffer) { if (name->attrCtx == NULL) { @@ -1044,7 +1064,7 @@ gssEapImportAttrContext(OM_uint32 *minor, OM_uint32 gssEapDuplicateAttrContext(OM_uint32 *minor, - gss_name_t in, + gss_const_name_t in, gss_name_t out) { gss_eap_attr_ctx *ctx = NULL;