X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_attr.h;h=05da94772f0ca92281a6896c88e7489a0fca4a2f;hb=refs%2Fheads%2Fjson-name;hp=0358936aaa931240917905c1e6aea7a867dab614;hpb=e3131660cc16d1d896b4931cdab1cfc80425ccd1;p=mech_eap.orig diff --git a/util_attr.h b/util_attr.h index 0358936..05da947 100644 --- a/util_attr.h +++ b/util_attr.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,17 +30,25 @@ * SUCH DAMAGE. */ +/* + * Attribute provider interface. + */ + #ifndef _UTIL_ATTR_H_ #define _UTIL_ATTR_H_ 1 #ifdef __cplusplus #include +#include + +using namespace gss_eap; struct gss_eap_attr_provider; struct gss_eap_attr_ctx; typedef bool -(*gss_eap_attr_enumeration_cb)(const gss_eap_attr_provider *source, +(*gss_eap_attr_enumeration_cb)(const gss_eap_attr_ctx *ctx, + const gss_eap_attr_provider *source, const gss_buffer_t attribute, void *data); @@ -70,48 +78,89 @@ public: } virtual bool initFromExistingContext(const gss_eap_attr_ctx *manager, - const gss_eap_attr_provider *ctx) + const gss_eap_attr_provider *ctx GSSEAP_UNUSED) { return initWithManager(manager); } virtual bool initFromGssContext(const gss_eap_attr_ctx *manager, - const gss_cred_id_t cred, - const gss_ctx_id_t ctx) + const gss_cred_id_t cred GSSEAP_UNUSED, + const gss_ctx_id_t ctx GSSEAP_UNUSED) { return initWithManager(manager); } - virtual bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const + virtual bool getAttributeTypes(gss_eap_attr_enumeration_cb GSSEAP_UNUSED, + void *data GSSEAP_UNUSED) const + { + return false; + } + + virtual bool setAttribute(int complete GSSEAP_UNUSED, + const gss_buffer_t attr GSSEAP_UNUSED, + const gss_buffer_t value GSSEAP_UNUSED) + { + return false; + } + + virtual bool deleteAttribute(const gss_buffer_t value GSSEAP_UNUSED) { return false; } - virtual bool setAttribute(int complete, - const gss_buffer_t attr, - const gss_buffer_t value) { return false; } - virtual bool deleteAttribute(const gss_buffer_t value) { return false; } - virtual bool getAttribute(const gss_buffer_t attr, - int *authenticated, - int *complete, - gss_buffer_t value, - gss_buffer_t display_value, - int *more) const { return false; } - - virtual gss_any_t mapToAny(int authenticated, - gss_buffer_t type_id) const { return NULL; } - virtual void releaseAnyNameMapping(gss_buffer_t type_id, - gss_any_t input) const {} - - virtual void exportToBuffer(gss_buffer_t buffer) const {} - virtual bool initFromBuffer(const gss_eap_attr_ctx *manager, - const gss_buffer_t buffer) + virtual bool getAttribute(const gss_buffer_t attr GSSEAP_UNUSED, + int *authenticated GSSEAP_UNUSED, + int *complete GSSEAP_UNUSED, + gss_buffer_t value GSSEAP_UNUSED, + gss_buffer_t display_value GSSEAP_UNUSED, + int *more GSSEAP_UNUSED) const + { + return false; + } + + virtual gss_any_t mapToAny(int authenticated GSSEAP_UNUSED, + gss_buffer_t type_id GSSEAP_UNUSED) const + { + return NULL; + } + + virtual void releaseAnyNameMapping(gss_buffer_t type_id GSSEAP_UNUSED, + gss_any_t input GSSEAP_UNUSED) const + { + } + + /* prefix to be prepended to attributes emitted by gss_get_name_attribute */ + virtual const char *prefix(void) const + { + return NULL; + } + + /* optional key for storing JSON dictionary */ + virtual const char *name(void) const + { + return NULL; + } + + virtual bool initWithJsonObject(const gss_eap_attr_ctx *manager, + JSONObject &object GSSEAP_UNUSED) { return initWithManager(manager); } + + virtual JSONObject jsonRepresentation(void) const + { + return JSONObject::null(); + } + virtual time_t getExpiryTime(void) const { return 0; } + virtual OM_uint32 mapException(OM_uint32 *minor GSSEAP_UNUSED, + std::exception &e GSSEAP_UNUSED) const + { + return GSS_S_CONTINUE_NEEDED; + } + static bool init(void) { return true; } static void finalize(void) {} @@ -163,12 +212,9 @@ public: void exportToBuffer(gss_buffer_t buffer) const; bool initFromBuffer(const gss_buffer_t buffer); - static unsigned int - attributePrefixToType(const gss_buffer_t prefix); - - static const gss_buffer_t - attributeTypeToPrefix(unsigned int type); - + static std::string + composeAttributeName(const gss_buffer_t prefix, + const gss_buffer_t suffix); static void decomposeAttributeName(const gss_buffer_t attribute, gss_buffer_t prefix, @@ -177,38 +223,40 @@ public: composeAttributeName(const gss_buffer_t prefix, const gss_buffer_t suffix, gss_buffer_t attribute); - static void + + std::string + composeAttributeName(unsigned int type, + const gss_buffer_t suffix); + void decomposeAttributeName(const gss_buffer_t attribute, unsigned int *type, - gss_buffer_t suffix); - static void + gss_buffer_t suffix) const; + void composeAttributeName(unsigned int type, const gss_buffer_t suffix, - gss_buffer_t attribute); - - static std::string - composeAttributeName(const gss_buffer_t prefix, - const gss_buffer_t suffix); - static std::string - composeAttributeName(unsigned int type, - const gss_buffer_t suffix); + gss_buffer_t attribute) 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, - const char *prefix, gss_eap_attr_create_provider factory); static void unregisterProvider(unsigned int type); time_t getExpiryTime(void) const; + OM_uint32 mapException(OM_uint32 *minor, std::exception &e) const; private: bool providerEnabled(unsigned int type) const; void releaseProvider(unsigned int type); + unsigned int attributePrefixToType(const gss_buffer_t prefix) const; + gss_buffer_desc attributeTypeToPrefix(unsigned int type) const; + + bool initWithJsonObject(JSONObject &object); + JSONObject jsonRepresentation(void) const; + gss_eap_attr_provider *getPrimaryProvider(void) const; /* make non-copyable */ @@ -227,9 +275,6 @@ private: #ifdef __cplusplus -#include -#include - static inline void duplicateBuffer(gss_buffer_desc &src, gss_buffer_t dst) { @@ -264,9 +309,12 @@ extern "C" { * obtain the name mutex. */ -struct gss_eap_attr_ctx * -gssEapCreateAttrContext(gss_cred_id_t acceptorCred, - gss_ctx_id_t acceptorCtx); +OM_uint32 +gssEapCreateAttrContext(OM_uint32 *minor, + gss_cred_id_t acceptorCred, + gss_ctx_id_t acceptorCtx, + struct gss_eap_attr_ctx **pAttrCtx, + time_t *pExpiryTime); OM_uint32 gssEapInquireName(OM_uint32 *minor,