assert(gssEapAttrProvidersInitStatus == GSS_S_UNAVAILABLE);
major = gssEapRadiusAttrProviderInit(&minor);
- if (major == GSS_S_COMPLETE)
- major = gssEapSamlAttrProvidersInit(&minor);
- if (major == GSS_S_COMPLETE)
- major = gssEapLocalAttrProviderInit(&minor);
+ if (GSS_ERROR(major))
+ goto cleanup;
+
+ major = gssEapSamlAttrProvidersInit(&minor);
+ if (GSS_ERROR(major))
+ goto cleanup;
+
+ /* Allow Shibboleth initialization failure to be non-fatal */
+ gssEapLocalAttrProviderInit(&minor);
+cleanup:
#ifdef GSSEAP_DEBUG
assert(major == GSS_S_COMPLETE);
#endif
JSONObject obj = jsonRepresentation();
#if 0
- obj.dump(stdout, JSON_INDENT(3));
+ obj.dump(stdout);
#endif
s = obj.dump(JSON_COMPACT);
OM_uint32 major;
/* Errors we handle ourselves */
- major = GSS_S_FAILURE;
-
if (typeid(e) == typeid(std::bad_alloc)) {
*minor = ENOMEM;
goto cleanup;
+ } else if (typeid(e) == typeid(std::runtime_error)) {
+ major = GSS_S_BAD_NAME;
+ *minor = GSSEAP_BAD_ATTR_TOKEN;
+ goto cleanup;
+ } else if (this == NULL) {
+ major = GSS_S_FAILURE;
+ goto cleanup;
}
/* Errors we delegate to providers */
gss_buffer_t display_value,
int *more)
{
- *authenticated = 0;
- *complete = 0;
+ if (authenticated != NULL)
+ *authenticated = 0;
+ if (complete != NULL)
+ *complete = 0;
if (value != NULL) {
value->length = 0;
if (!ctx->initFromBuffer(buffer)) {
delete ctx;
*minor = GSSEAP_BAD_ATTR_TOKEN;
- return GSS_S_DEFECTIVE_TOKEN;
+ return GSS_S_BAD_NAME;
}
name->attrCtx = ctx;
} catch (std::exception &e) {