{
OM_uint32 major, minor;
- major = gssEapRadiusAttrProviderInit(&minor);
- assert(major == GSS_S_COMPLETE);
+ assert(gssEapAttrProvidersInitStatus == GSS_S_UNAVAILABLE);
- major = gssEapSamlAttrProvidersInit(&minor);
- assert(major == GSS_S_COMPLETE);
+ major = gssEapRadiusAttrProviderInit(&minor);
+ if (major == GSS_S_COMPLETE)
+ major = gssEapSamlAttrProvidersInit(&minor);
+ if (major == GSS_S_COMPLETE)
+ major = gssEapLocalAttrProviderInit(&minor);
- major = gssEapLocalAttrProviderInit(&minor);
+#ifdef GSSEAP_DEBUG
assert(major == GSS_S_COMPLETE);
+#endif
gssEapAttrProvidersInitStatus = major;
}
-static void
+static OM_uint32
gssEapAttrProvidersInit(void)
{
GSSEAP_ONCE(&gssEapAttrProvidersInitOnce, gssEapAttrProvidersInitInternal);
+ return gssEapAttrProvidersInitStatus;
}
OM_uint32
if (gssEapAttrProvidersInitStatus == GSS_S_COMPLETE) {
major = gssEapLocalAttrProviderFinalize(minor);
- major = gssEapSamlAttrProvidersFinalize(minor);
- major = gssEapRadiusAttrProviderFinalize(minor);
+ if (major == GSS_S_COMPLETE)
+ major = gssEapSamlAttrProvidersFinalize(minor);
+ if (major == GSS_S_COMPLETE)
+ major = gssEapRadiusAttrProviderFinalize(minor);
+
+ gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE;
}
- return GSS_S_COMPLETE;
+ return major;
}
static gss_eap_attr_create_provider gssEapAttrFactories[ATTR_TYPE_MAX + 1];
if (name->attrCtx == NULL)
return GSS_S_UNAVAILABLE;
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
if (!name->attrCtx->getAttributeTypes(attrs))
if (name->attrCtx == NULL)
return GSS_S_UNAVAILABLE;
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
if (!name->attrCtx->getAttribute(attr, authenticated, complete,
if (name->attrCtx == NULL)
return GSS_S_UNAVAILABLE;
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
name->attrCtx->deleteAttribute(attr);
if (name->attrCtx == NULL)
return GSS_S_UNAVAILABLE;
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
name->attrCtx->setAttribute(complete, attr, value);
return GSS_S_COMPLETE;
}
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
name->attrCtx->exportToBuffer(buffer);
assert(name->attrCtx == NULL);
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
if (buffer->length != 0) {
try {
assert(out->attrCtx == NULL);
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
if (in->attrCtx != NULL) {
if (name->attrCtx == NULL)
return GSS_S_UNAVAILABLE;
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
*output = name->attrCtx->mapToAny(authenticated, type_id);
if (name->attrCtx == NULL)
return GSS_S_UNAVAILABLE;
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return GSS_S_UNAVAILABLE;
try {
if (*input != NULL)
assert(gssCtx != GSS_C_NO_CONTEXT);
- gssEapAttrProvidersInit();
+ if (GSS_ERROR(gssEapAttrProvidersInit()))
+ return NULL;
ctx = new gss_eap_attr_ctx();
if (!ctx->initFromGssContext(gssCred, gssCtx)) {