#include <new>
static gss_eap_attr_create_factory
-gss_eap_attr_factories[ATTR_TYPE_MAX] = {
- gss_eap_radius_attr_source::createAttrContext,
- gss_eap_saml_assertion_source::createAttrContext,
- gss_eap_saml_attr_source::createAttrContext,
- gss_eap_shib_attr_source::createAttrContext
-};
+gss_eap_attr_factories[ATTR_TYPE_MAX];
+
+void
+gss_eap_attr_ctx::registerProvider(unsigned int type,
+ gss_eap_attr_create_factory factory)
+{
+ gss_eap_attr_factories[type] = factory;
+}
gss_eap_attr_ctx::gss_eap_attr_ctx(void)
{
for (unsigned int i = 0; i < ATTR_TYPE_MAX; i++) {
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
- source = (gss_eap_attr_factories[i])();
+ provider = (gss_eap_attr_factories[i])();
- m_sources[i] = source;
+ m_providers[i] = provider;
}
}
bool
gss_eap_attr_ctx::initFromExistingContext(const gss_eap_attr_ctx *manager,
- const gss_eap_attr_source *source)
+ const gss_eap_attr_provider *provider)
{
- if (!gss_eap_attr_source::initFromExistingContext(this, source))
+ if (!gss_eap_attr_provider::initFromExistingContext(this, provider))
return false;
for (unsigned int i = 0; i < ATTR_TYPE_MAX; i++) {
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
- source = m_sources[i];
- if (source != NULL) {
- if (!source->initFromExistingContext(this, source))
+ provider = m_providers[i];
+ if (provider != NULL) {
+ if (!provider->initFromExistingContext(this, provider))
return false;
}
}
const gss_cred_id_t cred,
const gss_ctx_id_t ctx)
{
- if (!gss_eap_attr_source::initFromGssContext(this, cred, ctx))
+ if (!gss_eap_attr_provider::initFromGssContext(this, cred, ctx))
return false;
for (unsigned int i = 0; i < ATTR_TYPE_MAX; i++) {
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
- source = m_sources[i];
- if (source != NULL) {
- if (!source->initFromGssContext(this, cred, ctx))
+ provider = m_providers[i];
+ if (provider != NULL) {
+ if (!provider->initFromGssContext(this, cred, ctx))
return false;
}
}
gss_eap_attr_ctx::~gss_eap_attr_ctx(void)
{
for (unsigned int i = 0; i < ATTR_TYPE_MAX; i++)
- delete m_sources[i];
+ delete m_providers[i];
}
bool
gss_eap_attr_ctx::init(void)
{
- return gss_eap_radius_attr_source::init() &&
- gss_eap_saml_assertion_source::init() &&
- gss_eap_saml_attr_source::init() &&
- gss_eap_shib_attr_source::init();
+ return gss_eap_radius_attr_provider::init() &&
+ gss_eap_saml_assertion_provider::init() &&
+ gss_eap_saml_attr_provider::init() &&
+ gss_eap_shib_attr_provider::init();
}
void
gss_eap_attr_ctx::finalize(void)
{
- gss_eap_shib_attr_source::finalize();
- gss_eap_saml_attr_source::finalize();
- gss_eap_saml_assertion_source::finalize();
- gss_eap_radius_attr_source::finalize();
+ gss_eap_shib_attr_provider::finalize();
+ gss_eap_saml_attr_provider::finalize();
+ gss_eap_saml_assertion_provider::finalize();
+ gss_eap_radius_attr_provider::finalize();
}
-gss_eap_attr_source *
+gss_eap_attr_provider *
gss_eap_attr_ctx::getProvider(unsigned int type) const
{
- return m_sources[type];
+ return m_providers[type];
}
-gss_eap_attr_source *
+gss_eap_attr_provider *
gss_eap_attr_ctx::getProvider(const gss_buffer_t prefix) const
{
unsigned int type;
type = attributePrefixToType(prefix);
- return m_sources[type];
+ return m_providers[type];
}
void
{
gss_buffer_desc suffix = GSS_C_EMPTY_BUFFER;
unsigned int type;
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
decomposeAttributeName(attr, &type, &suffix);
- source = m_sources[type];
- if (source != NULL) {
- source->setAttribute(complete,
+ provider = m_providers[type];
+ if (provider != NULL) {
+ provider->setAttribute(complete,
(type == ATTR_TYPE_LOCAL) ? attr : &suffix,
value);
{
gss_buffer_desc suffix = GSS_C_EMPTY_BUFFER;
unsigned int type;
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
decomposeAttributeName(attr, &type, &suffix);
- source = m_sources[type];
- if (source != NULL) {
- source->deleteAttribute(type == ATTR_TYPE_LOCAL ? attr : &suffix);
+ provider = m_providers[type];
+ if (provider != NULL) {
+ provider->deleteAttribute(type == ATTR_TYPE_LOCAL ? attr : &suffix);
}
}
size_t i;
for (i = 0; i < ATTR_TYPE_MAX; i++) {
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
- source = m_sources[i];
- if (source == NULL)
+ provider = m_providers[i];
+ if (provider == NULL)
continue;
- ret = source->getAttributeTypes(cb, data);
+ ret = provider->getAttributeTypes(cb, data);
if (ret == false)
break;
}
};
static bool
-addAttribute(const gss_eap_attr_source *source,
+addAttribute(const gss_eap_attr_provider *provider,
const gss_buffer_t attribute,
void *data)
{
args.attrs = *attrs;
for (i = 0; i < ATTR_TYPE_MAX; i++) {
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
args.type = i;
- source = m_sources[i];
- if (source == NULL)
+ provider = m_providers[i];
+ if (provider == NULL)
continue;
- ret = source->getAttributeTypes(addAttribute, (void *)&args);
+ ret = provider->getAttributeTypes(addAttribute, (void *)&args);
if (ret == false)
break;
}
{
gss_buffer_desc suffix = GSS_C_EMPTY_BUFFER;
unsigned int type;
- gss_eap_attr_source *source;
+ gss_eap_attr_provider *provider;
bool ret;
decomposeAttributeName(attr, &type, &suffix);
- source = m_sources[type];
- if (source == NULL) {
+ provider = m_providers[type];
+ if (provider == NULL) {
*more = 0;
return false;
}
- ret = source->getAttribute(type == ATTR_TYPE_LOCAL ? attr : &suffix,
- authenticated, complete,
- value, display_value, more);
+ ret = provider->getAttribute(type == ATTR_TYPE_LOCAL ? attr : &suffix,
+ authenticated, complete,
+ value, display_value, more);
return ret;
}
void
gss_eap_attr_ctx::exportToBuffer(gss_buffer_t buffer) const
{
- m_sources[ATTR_TYPE_RADIUS]->exportToBuffer(buffer);
+ m_providers[ATTR_TYPE_RADIUS]->exportToBuffer(buffer);
}
bool
unsigned int i;
bool ret;
- ret = m_sources[ATTR_TYPE_RADIUS]->initFromBuffer(this, buffer);
+ ret = m_providers[ATTR_TYPE_RADIUS]->initFromBuffer(this, buffer);
if (!ret)
return false;
for (i = ATTR_TYPE_RADIUS + 1; i < ATTR_TYPE_MAX; i++) {
- gss_eap_attr_source *source = m_sources[i];
+ gss_eap_attr_provider *provider = m_providers[i];
- ret = source->initFromGssContext(this,
- GSS_C_NO_CREDENTIAL,
- GSS_C_NO_CONTEXT);
+ ret = provider->initFromGssContext(this,
+ GSS_C_NO_CREDENTIAL,
+ GSS_C_NO_CONTEXT);
if (!ret)
break;
}
struct gss_eap_attr_ctx;
-struct gss_eap_attr_source
+struct gss_eap_attr_provider
{
public:
- gss_eap_attr_source(void) {}
- virtual ~gss_eap_attr_source(void) {}
+ gss_eap_attr_provider(void) {}
+ virtual ~gss_eap_attr_provider(void) {}
bool initWithManager(const gss_eap_attr_ctx *manager)
{
}
virtual bool initFromExistingContext(const gss_eap_attr_ctx *manager,
- const gss_eap_attr_source *ctx)
+ const gss_eap_attr_provider *ctx)
{
return initWithManager(manager);
}
}
typedef bool
- gss_eap_attr_enumeration_cb(const gss_eap_attr_source *source,
+ gss_eap_attr_enumeration_cb(const gss_eap_attr_provider *source,
const gss_buffer_t attribute,
void *data);
static bool init() { return true; }
static void finalize() {}
- static gss_eap_attr_source *createAttrContext(void) { return NULL; }
+ static gss_eap_attr_provider *createAttrContext(void) { return NULL; }
protected:
const gss_eap_attr_ctx *m_manager;
private:
/* make non-copyable */
- gss_eap_attr_source(const gss_eap_attr_source&);
- gss_eap_attr_source& operator=(const gss_eap_attr_source&);
+ gss_eap_attr_provider(const gss_eap_attr_provider&);
+ gss_eap_attr_provider& operator=(const gss_eap_attr_provider&);
};
-typedef gss_eap_attr_source *(*gss_eap_attr_create_factory)(void);
+typedef gss_eap_attr_provider *(*gss_eap_attr_create_factory)(void);
-struct gss_eap_attr_ctx : gss_eap_attr_source
+struct gss_eap_attr_ctx : gss_eap_attr_provider
{
public:
gss_eap_attr_ctx(void);
~gss_eap_attr_ctx(void);
bool initFromExistingContext(const gss_eap_attr_ctx *manager,
- const gss_eap_attr_source *ctx);
+ const gss_eap_attr_provider *ctx);
bool initFromGssContext(const gss_eap_attr_ctx *manager,
const gss_cred_id_t cred,
const gss_ctx_id_t ctx);
composeAttributeName(unsigned int type,
const gss_buffer_t suffix);
- gss_eap_attr_source *getProvider(unsigned int type) const;
- gss_eap_attr_source *getProvider(const gss_buffer_t prefix) const;
+ gss_eap_attr_provider *getProvider(unsigned int type) const;
+ gss_eap_attr_provider *getProvider(const gss_buffer_t prefix) const;
+
+ static void
+ registerProvider(unsigned int type, gss_eap_attr_create_factory factory);
private:
/* make non-copyable */
gss_eap_attr_ctx(const gss_eap_attr_ctx&);
gss_eap_attr_ctx& operator=(const gss_eap_attr_ctx&);
- gss_eap_attr_source *m_sources[ATTR_TYPE_MAX];
+ gss_eap_attr_provider *m_providers[ATTR_TYPE_MAX];
};
#include "util_radius.h"
#include "gssapiP_eap.h"
bool
-gss_eap_radius_attr_source::initFromExistingContext(const gss_eap_attr_ctx *manager,
- const gss_eap_attr_source *ctx)
+gss_eap_radius_attr_provider::initFromExistingContext(const gss_eap_attr_ctx *manager,
+ const gss_eap_attr_provider *ctx)
{
- if (!gss_eap_attr_source::initFromExistingContext(manager, ctx))
+ if (!gss_eap_attr_provider::initFromExistingContext(manager, ctx))
return false;
return true;
}
bool
-gss_eap_radius_attr_source::initFromGssContext(const gss_eap_attr_ctx *manager,
- const gss_cred_id_t gssCred,
- const gss_ctx_id_t gssCtx)
+gss_eap_radius_attr_provider::initFromGssContext(const gss_eap_attr_ctx *manager,
+ const gss_cred_id_t gssCred,
+ const gss_ctx_id_t gssCtx)
{
- if (!gss_eap_attr_source::initFromGssContext(manager, gssCred, gssCtx))
+ if (!gss_eap_attr_provider::initFromGssContext(manager, gssCred, gssCtx))
return false;
return true;
}
-gss_eap_radius_attr_source::~gss_eap_radius_attr_source(void)
+gss_eap_radius_attr_provider::~gss_eap_radius_attr_provider(void)
{
}
bool
-gss_eap_radius_attr_source::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute, void *data) const
+gss_eap_radius_attr_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute, void *data) const
{
return true;
}
void
-gss_eap_radius_attr_source::setAttribute(int complete,
- const gss_buffer_t attr,
- const gss_buffer_t value)
+gss_eap_radius_attr_provider::setAttribute(int complete,
+ const gss_buffer_t attr,
+ const gss_buffer_t value)
{
}
void
-gss_eap_radius_attr_source::deleteAttribute(const gss_buffer_t value)
+gss_eap_radius_attr_provider::deleteAttribute(const gss_buffer_t value)
{
}
bool
-gss_eap_radius_attr_source::getAttribute(const gss_buffer_t attr,
- int *authenticated,
- int *complete,
- gss_buffer_t value,
- gss_buffer_t display_value,
- int *more) const
+gss_eap_radius_attr_provider::getAttribute(const gss_buffer_t attr,
+ int *authenticated,
+ int *complete,
+ gss_buffer_t value,
+ gss_buffer_t display_value,
+ int *more) const
{
return false;
}
bool
-gss_eap_radius_attr_source::getAttribute(unsigned int attr,
- int *authenticated,
- int *complete,
- gss_buffer_t value,
- gss_buffer_t display_value,
- int *more) const
+gss_eap_radius_attr_provider::getAttribute(unsigned int attr,
+ int *authenticated,
+ int *complete,
+ gss_buffer_t value,
+ gss_buffer_t display_value,
+ int *more) const
{
return false;
}
gss_any_t
-gss_eap_radius_attr_source::mapToAny(int authenticated,
+gss_eap_radius_attr_provider::mapToAny(int authenticated,
gss_buffer_t type_id) const
{
return (gss_any_t)NULL;
}
void
-gss_eap_radius_attr_source::releaseAnyNameMapping(gss_buffer_t type_id,
- gss_any_t input) const
+gss_eap_radius_attr_provider::releaseAnyNameMapping(gss_buffer_t type_id,
+ gss_any_t input) const
{
}
void
-gss_eap_radius_attr_source::exportToBuffer(gss_buffer_t buffer) const
+gss_eap_radius_attr_provider::exportToBuffer(gss_buffer_t buffer) const
{
}
bool
-gss_eap_radius_attr_source::initFromBuffer(const gss_eap_attr_ctx *ctx,
- const gss_buffer_t buffer)
+gss_eap_radius_attr_provider::initFromBuffer(const gss_eap_attr_ctx *ctx,
+ const gss_buffer_t buffer)
{
- if (!gss_eap_attr_source::initFromBuffer(ctx, buffer))
+ if (!gss_eap_attr_provider::initFromBuffer(ctx, buffer))
return false;
return false;
}
bool
-gss_eap_radius_attr_source::init(void)
+gss_eap_radius_attr_provider::init(void)
{
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_RADIUS,
+ gss_eap_radius_attr_provider::createAttrContext);
return true;
}
void
-gss_eap_radius_attr_source::finalize(void)
+gss_eap_radius_attr_provider::finalize(void)
{
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_RADIUS, NULL);
}
-gss_eap_attr_source *
-gss_eap_radius_attr_source::createAttrContext(void)
+gss_eap_attr_provider *
+gss_eap_radius_attr_provider::createAttrContext(void)
{
- return new gss_eap_radius_attr_source;
+ return new gss_eap_radius_attr_provider;
}
#ifndef _UTIL_RADIUS_H_
#define _UTIL_RADIUS_H_ 1
-struct gss_eap_radius_attr_source : gss_eap_attr_source {
+struct gss_eap_radius_attr_provider : gss_eap_attr_provider {
public:
- gss_eap_radius_attr_source(void) {}
- ~gss_eap_radius_attr_source(void);
+ gss_eap_radius_attr_provider(void) {}
+ ~gss_eap_radius_attr_provider(void);
bool initFromExistingContext(const gss_eap_attr_ctx *source,
- const gss_eap_attr_source *ctx);
+ 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);
static bool init();
static void finalize();
- static gss_eap_attr_source *createAttrContext(void);
+ static gss_eap_attr_provider *createAttrContext(void);
private:
};
};
/*
- * gss_eap_saml_assertion_source is for retrieving the underlying
+ * gss_eap_saml_assertion_provider is for retrieving the underlying
* assertion.
*/
bool
-gss_eap_saml_assertion_source::initFromExistingContext(const gss_eap_attr_ctx *manager,
- const gss_eap_attr_source *ctx)
+gss_eap_saml_assertion_provider::initFromExistingContext(const gss_eap_attr_ctx *manager,
+ const gss_eap_attr_provider *ctx)
{
/* Then we may be creating from an existing attribute context */
- const gss_eap_saml_assertion_source *saml;
+ const gss_eap_saml_assertion_provider *saml;
assert(m_assertion == NULL);
- if (!gss_eap_attr_source::initFromExistingContext(manager, ctx))
+ if (!gss_eap_attr_provider::initFromExistingContext(manager, ctx))
return false;
- saml = static_cast<const gss_eap_saml_assertion_source *>(ctx);
+ saml = static_cast<const gss_eap_saml_assertion_provider *>(ctx);
setAssertion(saml->getAssertion());
return true;
}
bool
-gss_eap_saml_assertion_source::initFromGssContext(const gss_eap_attr_ctx *manager,
- const gss_cred_id_t gssCred,
- const gss_ctx_id_t gssCtx)
+gss_eap_saml_assertion_provider::initFromGssContext(const gss_eap_attr_ctx *manager,
+ const gss_cred_id_t gssCred,
+ const gss_ctx_id_t gssCtx)
{
- const gss_eap_radius_attr_source *radius;
+ const gss_eap_radius_attr_provider *radius;
gss_buffer_desc value = GSS_C_EMPTY_BUFFER;
int authenticated, complete, more = -1;
OM_uint32 minor;
assert(m_assertion == NULL);
- if (!gss_eap_attr_source::initFromGssContext(manager, gssCred, gssCtx))
+ if (!gss_eap_attr_provider::initFromGssContext(manager, gssCred, gssCtx))
return false;
- radius = static_cast<const gss_eap_radius_attr_source *>
+ radius = static_cast<const gss_eap_radius_attr_provider *>
(m_manager->getProvider(ATTR_TYPE_RADIUS));
if (radius != NULL &&
radius->getAttribute(512 /* XXX */, &authenticated, &complete,
return true;
}
-gss_eap_saml_assertion_source::~gss_eap_saml_assertion_source(void)
+gss_eap_saml_assertion_provider::~gss_eap_saml_assertion_provider(void)
{
delete m_assertion;
}
void
-gss_eap_saml_assertion_source::setAssertion(const saml2::Assertion *assertion)
+gss_eap_saml_assertion_provider::setAssertion(const saml2::Assertion *assertion)
{
delete m_assertion;
}
saml2::Assertion *
-gss_eap_saml_assertion_source::parseAssertion(const gss_buffer_t buffer)
+gss_eap_saml_assertion_provider::parseAssertion(const gss_buffer_t buffer)
{
string str((char *)buffer->value, buffer->length);
istringstream istream(str);
}
bool
-gss_eap_saml_assertion_source::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute,
- void *data) const
+gss_eap_saml_assertion_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute,
+ void *data) const
{
/* just add the prefix */
return addAttribute(this, GSS_C_NO_BUFFER, data);
}
void
-gss_eap_saml_assertion_source::setAttribute(int complete,
- const gss_buffer_t attr,
- const gss_buffer_t value)
+gss_eap_saml_assertion_provider::setAttribute(int complete,
+ const gss_buffer_t attr,
+ const gss_buffer_t value)
{
if (attr == GSS_C_NO_BUFFER || attr->length == 0) {
saml2::Assertion *assertion = parseAssertion(value);
}
void
-gss_eap_saml_assertion_source::deleteAttribute(const gss_buffer_t value)
+gss_eap_saml_assertion_provider::deleteAttribute(const gss_buffer_t value)
{
delete m_assertion;
m_assertion = NULL;
}
bool
-gss_eap_saml_assertion_source::getAttribute(const gss_buffer_t attr,
- int *authenticated,
- int *complete,
- gss_buffer_t value,
- gss_buffer_t display_value,
- int *more) const
+gss_eap_saml_assertion_provider::getAttribute(const gss_buffer_t attr,
+ int *authenticated,
+ int *complete,
+ gss_buffer_t value,
+ gss_buffer_t display_value,
+ int *more) const
{
string str;
}
gss_any_t
-gss_eap_saml_assertion_source::mapToAny(int authenticated,
- gss_buffer_t type_id) const
+gss_eap_saml_assertion_provider::mapToAny(int authenticated,
+ gss_buffer_t type_id) const
{
return (gss_any_t)m_assertion;
}
void
-gss_eap_saml_assertion_source::releaseAnyNameMapping(gss_buffer_t type_id,
- gss_any_t input) const
+gss_eap_saml_assertion_provider::releaseAnyNameMapping(gss_buffer_t type_id,
+ gss_any_t input) const
{
delete ((saml2::Assertion *)input);
}
void
-gss_eap_saml_assertion_source::exportToBuffer(gss_buffer_t buffer) const
+gss_eap_saml_assertion_provider::exportToBuffer(gss_buffer_t buffer) const
{
ostringstream sink;
string str;
}
bool
-gss_eap_saml_assertion_source::initFromBuffer(const gss_eap_attr_ctx *ctx,
- const gss_buffer_t buffer)
+gss_eap_saml_assertion_provider::initFromBuffer(const gss_eap_attr_ctx *ctx,
+ const gss_buffer_t buffer)
{
- if (!gss_eap_attr_source::initFromBuffer(ctx, buffer))
+ if (!gss_eap_attr_provider::initFromBuffer(ctx, buffer))
return false;
assert(m_assertion == NULL);
}
bool
-gss_eap_saml_assertion_source::init(void)
+gss_eap_saml_assertion_provider::init(void)
{
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_SAML_ASSERTION,
+ gss_eap_saml_assertion_provider::createAttrContext);
return true;
}
void
-gss_eap_saml_assertion_source::finalize(void)
+gss_eap_saml_assertion_provider::finalize(void)
{
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_SAML_ASSERTION, NULL);
}
-gss_eap_attr_source *
-gss_eap_saml_assertion_source::createAttrContext(void)
+gss_eap_attr_provider *
+gss_eap_saml_assertion_provider::createAttrContext(void)
{
- return new gss_eap_saml_assertion_source;
+ return new gss_eap_saml_assertion_provider;
}
/*
- * gss_eap_saml_attr_source is for retrieving the underlying attributes.
+ * gss_eap_saml_attr_provider is for retrieving the underlying attributes.
*/
const saml2::Assertion *
-gss_eap_saml_attr_source::getAssertion(void) const
+gss_eap_saml_attr_provider::getAssertion(void) const
{
- const gss_eap_saml_assertion_source *saml;
+ const gss_eap_saml_assertion_provider *saml;
- saml = static_cast<const gss_eap_saml_assertion_source *>
+ saml = static_cast<const gss_eap_saml_assertion_provider *>
(m_manager->getProvider(ATTR_TYPE_SAML_ASSERTION));
if (saml != NULL)
return saml->getAssertion();
return NULL;
}
-gss_eap_saml_attr_source::~gss_eap_saml_attr_source(void)
+gss_eap_saml_attr_provider::~gss_eap_saml_attr_provider(void)
{
/* Nothing to do, we're just a wrapper around the assertion provider. */
}
bool
-gss_eap_saml_attr_source::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute,
- void *data) const
+gss_eap_saml_attr_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute,
+ void *data) const
{
const saml2::Assertion *assertion = getAssertion();
}
void
-gss_eap_saml_attr_source::setAttribute(int complete,
- const gss_buffer_t attr,
- const gss_buffer_t value)
+gss_eap_saml_attr_provider::setAttribute(int complete,
+ const gss_buffer_t attr,
+ const gss_buffer_t value)
{
}
void
-gss_eap_saml_attr_source::deleteAttribute(const gss_buffer_t value)
+gss_eap_saml_attr_provider::deleteAttribute(const gss_buffer_t value)
{
}
const saml2::Attribute *
-gss_eap_saml_attr_source::getAttribute(const gss_buffer_t attr) const
+gss_eap_saml_attr_provider::getAttribute(const gss_buffer_t attr) const
{
const saml2::Assertion *assertion = getAssertion();
saml2::AttributeStatement *statement;
}
bool
-gss_eap_saml_attr_source::getAttribute(const gss_buffer_t attr,
- int *authenticated,
- int *complete,
- gss_buffer_t value,
- gss_buffer_t display_value,
- int *more) const
+gss_eap_saml_attr_provider::getAttribute(const gss_buffer_t attr,
+ int *authenticated,
+ int *complete,
+ gss_buffer_t value,
+ gss_buffer_t display_value,
+ int *more) const
{
const saml2::Attribute *a;
const saml2::AttributeValue *av;
}
gss_any_t
-gss_eap_saml_attr_source::mapToAny(int authenticated,
- gss_buffer_t type_id) const
+gss_eap_saml_attr_provider::mapToAny(int authenticated,
+ gss_buffer_t type_id) const
{
return (gss_any_t)NULL;
}
void
-gss_eap_saml_attr_source::releaseAnyNameMapping(gss_buffer_t type_id,
- gss_any_t input) const
+gss_eap_saml_attr_provider::releaseAnyNameMapping(gss_buffer_t type_id,
+ gss_any_t input) const
{
}
void
-gss_eap_saml_attr_source::exportToBuffer(gss_buffer_t buffer) const
+gss_eap_saml_attr_provider::exportToBuffer(gss_buffer_t buffer) const
{
buffer->length = 0;
buffer->value = NULL;
}
bool
-gss_eap_saml_attr_source::initFromBuffer(const gss_eap_attr_ctx *ctx,
- const gss_buffer_t buffer)
+gss_eap_saml_attr_provider::initFromBuffer(const gss_eap_attr_ctx *ctx,
+ const gss_buffer_t buffer)
{
return true;
}
bool
-gss_eap_saml_attr_source::init(void)
+gss_eap_saml_attr_provider::init(void)
{
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_SAML,
+ gss_eap_saml_attr_provider::createAttrContext);
return true;
}
void
-gss_eap_saml_attr_source::finalize(void)
+gss_eap_saml_attr_provider::finalize(void)
{
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_SAML, NULL);
}
-gss_eap_attr_source *
-gss_eap_saml_attr_source::createAttrContext(void)
+gss_eap_attr_provider *
+gss_eap_saml_attr_provider::createAttrContext(void)
{
- return new gss_eap_saml_attr_source;
+ return new gss_eap_saml_attr_provider;
}
};
};
-struct gss_eap_saml_assertion_source : gss_eap_attr_source {
+struct gss_eap_saml_assertion_provider : gss_eap_attr_provider {
public:
- gss_eap_saml_assertion_source(void) {}
- ~gss_eap_saml_assertion_source(void);
+ gss_eap_saml_assertion_provider(void) {}
+ ~gss_eap_saml_assertion_provider(void);
bool initFromExistingContext(const gss_eap_attr_ctx *source,
- const gss_eap_attr_source *ctx);
+ 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);
static bool init();
static void finalize();
- static gss_eap_attr_source *createAttrContext(void);
+ static gss_eap_attr_provider *createAttrContext(void);
private:
static opensaml::saml2::Assertion *
opensaml::saml2::Assertion *m_assertion;
};
-struct gss_eap_saml_attr_source : gss_eap_attr_source {
+struct gss_eap_saml_attr_provider : gss_eap_attr_provider {
public:
- gss_eap_saml_attr_source(void) {}
- ~gss_eap_saml_attr_source(void);
+ gss_eap_saml_attr_provider(void) {}
+ ~gss_eap_saml_attr_provider(void);
bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const;
void setAttribute(int complete,
static bool init();
static void finalize();
- static gss_eap_attr_source *createAttrContext(void);
+ static gss_eap_attr_provider *createAttrContext(void);
private:
};
using namespace std;
bool
-gss_eap_shib_attr_source::initFromExistingContext(const gss_eap_attr_ctx *manager,
- const gss_eap_attr_source *ctx)
+gss_eap_shib_attr_provider::initFromExistingContext(const gss_eap_attr_ctx *manager,
+ const gss_eap_attr_provider *ctx)
{
- const gss_eap_shib_attr_source *shib;
+ const gss_eap_shib_attr_provider *shib;
- if (!gss_eap_attr_source::initFromExistingContext(manager, ctx))
+ if (!gss_eap_attr_provider::initFromExistingContext(manager, ctx))
return false;
- shib = static_cast<const gss_eap_shib_attr_source *>(ctx);
+ shib = static_cast<const gss_eap_shib_attr_provider *>(ctx);
if (shib != NULL)
m_attributes = duplicateAttributes(shib->getAttributes());
}
bool
-addRadiusAttribute(const gss_eap_attr_source *provider,
+addRadiusAttribute(const gss_eap_attr_provider *provider,
const gss_buffer_t attribute,
void *data)
{
- const gss_eap_shib_attr_source *shib;
- const gss_eap_radius_attr_source *radius;
+ const gss_eap_shib_attr_provider *shib;
+ const gss_eap_radius_attr_provider *radius;
int authenticated, complete, more = -1;
vector <string> attributeIds(1);
SimpleAttribute *a;
- radius = static_cast<const gss_eap_radius_attr_source *>(provider);
- shib = static_cast<const gss_eap_shib_attr_source *>(data);
+ radius = static_cast<const gss_eap_radius_attr_provider *>(provider);
+ shib = static_cast<const gss_eap_shib_attr_provider *>(data);
assert(radius != NULL && shib != NULL);
}
bool
-gss_eap_shib_attr_source::initFromGssContext(const gss_eap_attr_ctx *manager,
- const gss_cred_id_t gssCred,
- const gss_ctx_id_t gssCtx)
+gss_eap_shib_attr_provider::initFromGssContext(const gss_eap_attr_ctx *manager,
+ const gss_cred_id_t gssCred,
+ const gss_ctx_id_t gssCtx)
{
- const gss_eap_saml_assertion_source *saml;
- const gss_eap_radius_attr_source *radius;
+ 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;
OM_uint32 minor;
- if (!gss_eap_attr_source::initFromGssContext(manager, gssCred, gssCtx))
+ if (!gss_eap_attr_provider::initFromGssContext(manager, gssCred, gssCtx))
return false;
- saml = static_cast<const gss_eap_saml_assertion_source *>
+ saml = static_cast<const gss_eap_saml_assertion_provider *>
(manager->getProvider(ATTR_TYPE_SAML_ASSERTION));
- radius = static_cast<const gss_eap_radius_attr_source *>
+ radius = static_cast<const gss_eap_radius_attr_provider *>
(manager->getProvider(ATTR_TYPE_RADIUS));
if (gssCred != GSS_C_NO_CREDENTIAL &&
return true;
}
-gss_eap_shib_attr_source::~gss_eap_shib_attr_source(void)
+gss_eap_shib_attr_provider::~gss_eap_shib_attr_provider(void)
{
for_each(m_attributes.begin(),
m_attributes.end(),
}
int
-gss_eap_shib_attr_source::getAttributeIndex(const gss_buffer_t attr) const
+gss_eap_shib_attr_provider::getAttributeIndex(const gss_buffer_t attr) const
{
int i = 0;
}
void
-gss_eap_shib_attr_source::setAttribute(int complete,
- const gss_buffer_t attr,
- const gss_buffer_t value)
+gss_eap_shib_attr_provider::setAttribute(int complete,
+ const gss_buffer_t attr,
+ const gss_buffer_t value)
{
string attrStr((char *)attr->value, attr->length);
vector <string> ids(1);
}
void
-gss_eap_shib_attr_source::deleteAttribute(const gss_buffer_t attr)
+gss_eap_shib_attr_provider::deleteAttribute(const gss_buffer_t attr)
{
int i;
}
bool
-gss_eap_shib_attr_source::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute,
- void *data) const
+gss_eap_shib_attr_provider::getAttributeTypes(gss_eap_attr_enumeration_cb addAttribute,
+ void *data) const
{
for (vector<Attribute*>::const_iterator a = m_attributes.begin();
a != m_attributes.end();
}
const Attribute *
-gss_eap_shib_attr_source::getAttribute(const gss_buffer_t attr) const
+gss_eap_shib_attr_provider::getAttribute(const gss_buffer_t attr) const
{
const Attribute *ret = NULL;
}
bool
-gss_eap_shib_attr_source::getAttribute(const gss_buffer_t attr,
- int *authenticated,
- int *complete,
- gss_buffer_t value,
- gss_buffer_t display_value,
- int *more) const
+gss_eap_shib_attr_provider::getAttribute(const gss_buffer_t attr,
+ int *authenticated,
+ int *complete,
+ gss_buffer_t value,
+ gss_buffer_t display_value,
+ int *more) const
{
const Attribute *shibAttr = NULL;
gss_buffer_desc buf;
}
gss_any_t
-gss_eap_shib_attr_source::mapToAny(int authenticated,
- gss_buffer_t type_id) const
+gss_eap_shib_attr_provider::mapToAny(int authenticated,
+ gss_buffer_t type_id) const
{
gss_any_t output;
}
void
-gss_eap_shib_attr_source::releaseAnyNameMapping(gss_buffer_t type_id,
- gss_any_t input) const
+gss_eap_shib_attr_provider::releaseAnyNameMapping(gss_buffer_t type_id,
+ gss_any_t input) const
{
vector <Attribute *> *v = ((vector <Attribute *> *)input);
delete v;
}
void
-gss_eap_shib_attr_source::exportToBuffer(gss_buffer_t buffer) const
+gss_eap_shib_attr_provider::exportToBuffer(gss_buffer_t buffer) const
{
buffer->length = 0;
buffer->value = NULL;
}
bool
-gss_eap_shib_attr_source::initFromBuffer(const gss_eap_attr_ctx *ctx,
- const gss_buffer_t buffer)
+gss_eap_shib_attr_provider::initFromBuffer(const gss_eap_attr_ctx *ctx,
+ const gss_buffer_t buffer)
{
- if (!gss_eap_attr_source::initFromBuffer(ctx, buffer))
+ if (!gss_eap_attr_provider::initFromBuffer(ctx, buffer))
return false;
return true;
}
bool
-gss_eap_shib_attr_source::init(void)
+gss_eap_shib_attr_provider::init(void)
{
- return ShibbolethResolver::init();
+ if (!ShibbolethResolver::init())
+ return false;
+
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_LOCAL,
+ gss_eap_shib_attr_provider::createAttrContext);
+
+ return true;
}
void
-gss_eap_shib_attr_source::finalize(void)
+gss_eap_shib_attr_provider::finalize(void)
{
ShibbolethResolver::term();
+ gss_eap_attr_ctx::registerProvider(ATTR_TYPE_LOCAL, NULL);
}
-gss_eap_attr_source *
-gss_eap_shib_attr_source::createAttrContext(void)
+gss_eap_attr_provider *
+gss_eap_shib_attr_provider::createAttrContext(void)
{
- return new gss_eap_shib_attr_source;
+ return new gss_eap_shib_attr_provider;
}
Attribute *
-gss_eap_shib_attr_source::duplicateAttribute(const Attribute *src)
+gss_eap_shib_attr_provider::duplicateAttribute(const Attribute *src)
{
Attribute *attribute;
}
vector <Attribute *>
-gss_eap_shib_attr_source::duplicateAttributes(const vector <Attribute *>src)
+gss_eap_shib_attr_provider::duplicateAttributes(const vector <Attribute *>src)
{
vector <Attribute *> dst;
class ShibbolethResolver;
};
-struct gss_eap_shib_attr_source : gss_eap_attr_source {
+struct gss_eap_shib_attr_provider : gss_eap_attr_provider {
public:
- gss_eap_shib_attr_source(void) {}
- ~gss_eap_shib_attr_source(void);
+ gss_eap_shib_attr_provider(void) {}
+ ~gss_eap_shib_attr_provider(void);
bool initFromExistingContext(const gss_eap_attr_ctx *source,
- const gss_eap_attr_source *ctx);
+ 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);
static bool init();
static void finalize();
- static gss_eap_attr_source *createAttrContext(void);
+ static gss_eap_attr_provider *createAttrContext(void);
private:
static shibsp::Attribute *
}
friend bool
- addRadiusAttribute(const gss_eap_attr_source *provider,
+ addRadiusAttribute(const gss_eap_attr_provider *source,
const gss_buffer_t attribute,
void *data);