X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_shib.cpp;h=94441c8b39ab5f87096d89bec0da8c72b696590a;hb=d3586fddc2afb973dcc83daf1f3247e28b27abb4;hp=815b57a8d316b939c41c880ed1a9e3ff03d3ecf3;hpb=1cbb489ca748ff49fc42238e0c1b610530ed43d2;p=mech_eap.orig diff --git a/util_shib.cpp b/util_shib.cpp index 815b57a..94441c8 100644 --- a/util_shib.cpp +++ b/util_shib.cpp @@ -31,7 +31,7 @@ */ /* * Copyright 2001-2009 Internet2 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -58,14 +58,7 @@ #include #include -#include -#include -#include -#include -#include -#include - -#include "resolver.h" +#include using namespace shibsp; using namespace shibresolver; @@ -76,6 +69,19 @@ using namespace xmltooling; using namespace xercesc; using namespace std; +gss_eap_shib_attr_provider::gss_eap_shib_attr_provider(void) +{ + m_authenticated = false; +} + +gss_eap_shib_attr_provider::~gss_eap_shib_attr_provider(void) +{ + for_each(m_attributes.begin(), + m_attributes.end(), + xmltooling::cleanup()) + ; +} + bool gss_eap_shib_attr_provider::initFromExistingContext(const gss_eap_attr_ctx *manager, const gss_eap_attr_provider *ctx) @@ -152,7 +158,7 @@ gss_eap_shib_attr_provider::initFromGssContext(const gss_eap_attr_ctx *manager, const gss_eap_saml_assertion_provider *saml; const gss_eap_radius_attr_provider *radius; gss_buffer_desc nameBuf = GSS_C_EMPTY_BUFFER; - ShibbolethResolver *resolver = NULL; + ShibbolethResolver *resolver; OM_uint32 minor; if (!gss_eap_attr_provider::initFromGssContext(manager, gssCred, gssCtx)) @@ -163,6 +169,8 @@ gss_eap_shib_attr_provider::initFromGssContext(const gss_eap_attr_ctx *manager, radius = static_cast (manager->getProvider(ATTR_TYPE_RADIUS)); + resolver = ShibbolethResolver::create(); + if (gssCred != GSS_C_NO_CREDENTIAL && gss_display_name(&minor, gssCred->name, &nameBuf, NULL) == GSS_S_COMPLETE) resolver->setApplicationID((const char *)nameBuf.value); @@ -180,21 +188,24 @@ gss_eap_shib_attr_provider::initFromGssContext(const gss_eap_attr_ctx *manager, m_authenticated = saml->authenticated(); } - resolver->resolveAttributes(m_attributes); + resolver->resolve(); + + m_attributes = resolver->getResolvedAttributes(); + resolver->getResolvedAttributes().clear(); gss_release_buffer(&minor, &nameBuf); delete resolver; - return true; -} +#ifdef GSSEAP_DEBUG + gss_buffer_desc testattr = { + sizeof("urn:greet:greeting") - 1, (void *)"urn:greet:greeting" }; + gss_buffer_desc testval = + { sizeof("Hello, GSS EAP.") - 1, (void *)"Hello, GSS EAP." }; + setAttribute(true, &testattr, &testval); +#endif /* GSSEAP_DEBUG */ -gss_eap_shib_attr_provider::~gss_eap_shib_attr_provider(void) -{ - for_each(m_attributes.begin(), - m_attributes.end(), - xmltooling::cleanup()) - ; + return true; } int @@ -225,16 +236,13 @@ gss_eap_shib_attr_provider::setAttribute(int complete, const gss_buffer_t value) { string attrStr((char *)attr->value, attr->length); - vector ids(1); - - ids.push_back(attrStr); - + vector ids(1, attrStr); SimpleAttribute *a = new SimpleAttribute(ids); if (value->length != 0) { string valueStr((char *)value->value, value->length); - a->getValues().push_back(valueStr); + a->getValues().push_back(valueStr); } m_attributes.push_back(a); @@ -333,9 +341,11 @@ gss_eap_shib_attr_provider::getAttribute(const gss_buffer_t attr, if (display_value != NULL) duplicateBuffer(buf, display_value); } - - *authenticated = m_authenticated; - *complete = false; + + if (authenticated != NULL) + *authenticated = m_authenticated; + if (complete != NULL) + *complete = false; if (nvalues > ++i) *more = i; @@ -432,8 +442,25 @@ gss_eap_shib_attr_provider::initFromBuffer(const gss_eap_attr_ctx *ctx, bool gss_eap_shib_attr_provider::init(void) { +#if 1 + SPConfig& conf=SPConfig::getConfig(); + conf.setFeatures( + SPConfig::Metadata | + SPConfig::Trust | + SPConfig::AttributeResolution | + SPConfig::Credentials | + SPConfig::OutOfProcess + ); + if (!conf.init()) + return false; + if (!conf.instantiate()) { + conf.term(); + return false; + } +#else if (!ShibbolethResolver::init()) return false; +#endif gss_eap_attr_ctx::registerProvider(ATTR_TYPE_LOCAL, NULL, @@ -445,8 +472,8 @@ gss_eap_shib_attr_provider::init(void) void gss_eap_shib_attr_provider::finalize(void) { - ShibbolethResolver::term(); gss_eap_attr_ctx::unregisterProvider(ATTR_TYPE_LOCAL); +// ShibbolethResolver::term(); } gss_eap_attr_provider * @@ -458,10 +485,8 @@ gss_eap_shib_attr_provider::createAttrContext(void) Attribute * gss_eap_shib_attr_provider::duplicateAttribute(const Attribute *src) { - Attribute *attribute; - DDF obj = src->marshall(); - attribute = Attribute::unmarshall(obj); + Attribute *attribute = Attribute::unmarshall(obj); obj.destroy(); return attribute; @@ -479,3 +504,17 @@ gss_eap_shib_attr_provider::duplicateAttributes(const vector src) return dst; } + +OM_uint32 +gssEapLocalAttrProviderInit(OM_uint32 *minor) +{ + return gss_eap_shib_attr_provider::init() + ? GSS_S_COMPLETE : GSS_S_FAILURE; +} + +OM_uint32 +gssEapLocalAttrProviderFinalize(OM_uint32 *minor) +{ + gss_eap_shib_attr_provider::finalize(); + return GSS_S_COMPLETE; +}