* gss_eap_saml_assertion_provider is for retrieving the underlying
* assertion.
*/
+gss_eap_saml_assertion_provider::gss_eap_saml_assertion_provider(const gss_eap_attr_ctx *
+ctx)
+ : gss_eap_attr_provider(ctx)
+{
+ /* Then we may be creating from an existing attribute context */
+ gss_eap_saml_assertion_provider *saml;
+
+ saml = dynamic_cast<gss_eap_saml_assertion_provider *>
+ (ctx->getProvider(ATTR_TYPE_SAML_ASSERTION));
+ if (saml != NULL)
+ setAssertion(saml->getAssertion());
+}
+
gss_eap_saml_assertion_provider::gss_eap_saml_assertion_provider(const gss_eap_attr_ctx *ctx,
gss_cred_id_t gssCred,
gss_ctx_id_t gssCtx)
- : gss_eap_attr_provider(ctx, gssCred, gssCtx)
+ : gss_eap_attr_provider(ctx)
{
- if (gssCtx == GSS_C_NO_CONTEXT) {
- /* Then we are creating from an existing attribute context */
- gss_eap_saml_assertion_provider *saml;
-
- saml = dynamic_cast<gss_eap_saml_assertion_provider *>
- (ctx->getProvider(ATTR_TYPE_SAML_ASSERTION));
- if (saml != NULL)
- setAssertion(saml->getAssertion());
- } else {
- gss_eap_radius_attr_provider *radius;
- gss_buffer_desc value = GSS_C_EMPTY_BUFFER;
- int authenticated, complete, more = -1;
- OM_uint32 minor;
-
- radius = dynamic_cast<gss_eap_radius_attr_provider *>
- (ctx->getProvider(ATTR_TYPE_RADIUS));
- if (radius != NULL &&
- radius->getAttribute(512, &authenticated, &complete,
- &value, NULL, &more)) {
- m_assertion = parseAssertion(&value);
- gss_release_buffer(&minor, &value);
- }
+ gss_eap_radius_attr_provider *radius;
+ gss_buffer_desc value = GSS_C_EMPTY_BUFFER;
+ int authenticated, complete, more = -1;
+ OM_uint32 minor;
+
+ radius = dynamic_cast<gss_eap_radius_attr_provider *>
+ (ctx->getProvider(ATTR_TYPE_RADIUS));
+ if (radius != NULL &&
+ radius->getAttribute(512, &authenticated, &complete,
+ &value, NULL, &more)) {
+ m_assertion = parseAssertion(&value);
+ gss_release_buffer(&minor, &value);
}
}
bool
gss_eap_saml_assertion_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute, void *data) const
{
- addAttribute(this, GSS_C_NO_BUFFER, data);
+ return addAttribute(this, GSS_C_NO_BUFFER, data);
}
void
duplicateBuffer(str, buffer);
}
-gss_eap_attr_provider *
+bool
gss_eap_saml_assertion_provider::unmarshall(const gss_eap_attr_ctx *ctx,
const gss_buffer_t buffer)
{
- return new gss_eap_saml_assertion_provider(ctx, buffer);
+ assert(m_assertion == NULL);
+
+ m_assertion = parseAssertion(buffer);
+
+ return (m_assertion != NULL);
}
bool
gss_eap_saml_assertion_provider::init(void)
{
+ return true;
}
void
{
}
-gss_eap_attr_provider *
+bool
gss_eap_saml_attr_provider::unmarshall(const gss_eap_attr_ctx *ctx,
const gss_buffer_t buffer)
{
- return new gss_eap_saml_attr_provider(ctx);
+ return false;
}
bool
gss_cred_id_t gssCred,
gss_ctx_id_t gssCtx)
{
- return new gss_eap_saml_attr_provider(ctx, gssCred, gssCtx);
+ if (gssCtx != GSS_C_NO_CONTEXT)
+ return new gss_eap_saml_attr_provider(ctx, gssCred, gssCtx);
+ else
+ return new gss_eap_saml_attr_provider(ctx);
}