X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_saml.h;h=99be5b88bb693cc418e9489efae9cb2ebd2fb1a2;hb=refs%2Fheads%2Fmeeting%2Fmoonshot2;hp=1115eb5f23281df659f72d05ff92b5dd0cb4569b;hpb=70b02ff081eff826695916c70e166b128769f4ca;p=mech_eap.orig diff --git a/util_saml.h b/util_saml.h index 1115eb5..99be5b8 100644 --- a/util_saml.h +++ b/util_saml.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, JANET(UK) + * Copyright (c) 2011, JANET(UK) * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,68 +30,130 @@ * SUCH DAMAGE. */ +/* + * SAML attribute provider. + */ + #ifndef _UTIL_SAML_H_ #define _UTIL_SAML_H_ 1 #ifdef __cplusplus + +namespace opensaml { + namespace saml2 { + class Attribute; + class Assertion; + class NameID; + }; +}; + +struct gss_eap_saml_assertion_provider : gss_eap_attr_provider { +public: + gss_eap_saml_assertion_provider(void); + ~gss_eap_saml_assertion_provider(void); + + bool initFromExistingContext(const gss_eap_attr_ctx *source, + const gss_eap_attr_provider *ctx); + bool initFromGssContext(const gss_eap_attr_ctx *source, + const gss_cred_id_t cred, + const gss_ctx_id_t ctx); + + bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const; + bool setAttribute(int complete, + const gss_buffer_t attr, + const gss_buffer_t value); + bool deleteAttribute(const gss_buffer_t value); + bool getAttribute(const gss_buffer_t attr, + int *authenticated, + int *complete, + gss_buffer_t value, + gss_buffer_t display_value, + int *more) const; + gss_any_t mapToAny(int authenticated, + gss_buffer_t type_id) const; + void releaseAnyNameMapping(gss_buffer_t type_id, + gss_any_t input) const; + + void exportToBuffer(gss_buffer_t buffer) const; + bool initFromBuffer(const gss_eap_attr_ctx *ctx, + const gss_buffer_t buffer); + + opensaml::saml2::Assertion *initAssertion(void); + + opensaml::saml2::Assertion *getAssertion(void) const { + return m_assertion; + } + bool authenticated(void) const { + return m_authenticated; + } + + time_t getExpiryTime(void) const; + OM_uint32 mapException(OM_uint32 *minor, std::exception &e) const; + + static bool init(void); + static void finalize(void); + + static gss_eap_attr_provider *createAttrContext(void); + +private: + static opensaml::saml2::Assertion * + parseAssertion(const gss_buffer_t buffer); + + void setAssertion(const opensaml::saml2::Assertion *assertion, + bool authenticated = false); + void setAssertion(const gss_buffer_t buffer, + bool authenticated = false); + + opensaml::saml2::Assertion *m_assertion; + bool m_authenticated; +}; + +struct gss_eap_saml_attr_provider : gss_eap_attr_provider { +public: + gss_eap_saml_attr_provider(void) {} + ~gss_eap_saml_attr_provider(void) {} + + bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const; + bool setAttribute(int complete, + const gss_buffer_t attr, + const gss_buffer_t value); + bool deleteAttribute(const gss_buffer_t value); + bool getAttribute(const gss_buffer_t attr, + int *authenticated, + int *complete, + gss_buffer_t value, + gss_buffer_t display_value, + int *more) const; + gss_any_t mapToAny(int authenticated, + gss_buffer_t type_id) const; + void releaseAnyNameMapping(gss_buffer_t type_id, + gss_any_t input) const; + + void exportToBuffer(gss_buffer_t buffer) const; + bool initFromBuffer(const gss_eap_attr_ctx *ctx, + const gss_buffer_t buffer); + + bool getAttribute(const gss_buffer_t attr, + int *authenticated, + int *complete, + const opensaml::saml2::Attribute **pAttribute) const; + bool getAssertion(int *authenticated, + opensaml::saml2::Assertion **pAssertion, + bool createIfAbsent = false) const; + + static bool init(void); + static void finalize(void); + + static gss_eap_attr_provider *createAttrContext(void); + +private: +}; + extern "C" { #endif -struct eap_gss_saml_attr_ctx; - -OM_uint32 -samlDuplicateAttrContext(OM_uint32 *minor, - const struct eap_gss_saml_attr_ctx *in, - struct eap_gss_saml_attr_ctx **out); - -OM_uint32 -samlCreateAttrContext(OM_uint32 *minor, - gss_cred_id_t acceptorCred, - gss_name_t initiatorName, - gss_buffer_t buffer, - struct eap_gss_saml_attr_ctx **pCtx); - -OM_uint32 -samlReleaseAttrContext(OM_uint32 *minor, - struct eap_gss_saml_attr_ctx **ctx); - -OM_uint32 -samlGetAttributeTypes(OM_uint32 *minor, - const struct eap_gss_saml_attr_ctx *ctx, - void *data, - OM_uint32 (*addAttribute)(OM_uint32 *, void *, gss_buffer_t)); - -OM_uint32 -samlGetAttribute(OM_uint32 *minor, - const struct eap_gss_saml_attr_ctx *ctx, - gss_buffer_t attr, - int *authenticated, - int *complete, - gss_buffer_t value, - gss_buffer_t display_value, - int *more); - -OM_uint32 -samlSetAttribute(OM_uint32 *minor, - struct eap_gss_saml_attr_ctx *ctx, - int complete, - gss_buffer_t attr, - gss_buffer_t value); - -OM_uint32 -samlGetAssertion(OM_uint32 *minor, - struct eap_gss_saml_attr_ctx *ctx, - gss_buffer_t buffer); - -OM_uint32 -samlExportAttrContext(OM_uint32 *minor, - struct eap_gss_saml_attr_ctx *ctx, - gss_buffer_t buffer); - -OM_uint32 -samlImportAttrContext(OM_uint32 *minor, - gss_buffer_t buffer, - struct eap_gss_saml_attr_ctx **pCtx); +OM_uint32 gssEapSamlAttrProvidersInit(OM_uint32 *minor); +OM_uint32 gssEapSamlAttrProvidersFinalize(OM_uint32 *minor); #ifdef __cplusplus }