X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_attr.h;h=01f8e2f5fb599afcbd03d4d4cb33f33734b844c8;hb=163856b1a70d7773c46d4ea5495b85c4dce0f089;hp=8c4360eeb47eb460ca66a7214d4d910242e458b8;hpb=5668197e1b90f26ebb0fcc6acb30c70bf8109212;p=mech_eap.git diff --git a/util_attr.h b/util_attr.h index 8c4360e..01f8e2f 100644 --- a/util_attr.h +++ b/util_attr.h @@ -30,11 +30,21 @@ * SUCH DAMAGE. */ +/* + * Attribute provider interface. + */ + #ifndef _UTIL_ATTR_H_ #define _UTIL_ATTR_H_ 1 +#ifdef HAVE_HEIMDAL_VERSION +/* Removed in draft-ietf-kitten-gssapi-naming-exts-08 */ +typedef struct gss_any *gss_any_t; +#endif + #ifdef __cplusplus #include +#include struct gss_eap_attr_provider; struct gss_eap_attr_ctx; @@ -51,6 +61,8 @@ typedef bool #define ATTR_TYPE_MIN ATTR_TYPE_RADIUS #define ATTR_TYPE_MAX ATTR_TYPE_LOCAL +#define ATTR_FLAG_DISABLE_LOCAL 0x00000001 + /* * Attribute provider: this represents a source of attributes derived * from the security context. @@ -85,10 +97,10 @@ public: return false; } - virtual void setAttribute(int complete, + virtual bool setAttribute(int complete, const gss_buffer_t attr, - const gss_buffer_t value) {} - virtual void deleteAttribute(const gss_buffer_t value) {} + 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, @@ -110,8 +122,11 @@ public: virtual time_t getExpiryTime(void) const { return 0; } - static bool init() { return true; } - static void finalize() {} + virtual OM_uint32 mapException(OM_uint32 *minor, std::exception &e) const + { return GSS_S_CONTINUE_NEEDED; } + + static bool init(void) { return true; } + static void finalize(void) {} static gss_eap_attr_provider *createAttrContext(void) { return NULL; } @@ -143,10 +158,10 @@ public: bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const; bool getAttributeTypes(gss_buffer_set_t *attrs); - void setAttribute(int complete, + bool setAttribute(int complete, const gss_buffer_t attr, const gss_buffer_t value); - void deleteAttribute(const gss_buffer_t value); + bool deleteAttribute(const gss_buffer_t value); bool getAttribute(const gss_buffer_t attr, int *authenticated, int *complete, @@ -202,14 +217,19 @@ public: 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); + gss_eap_attr_provider *getPrimaryProvider(void) const; /* make non-copyable */ gss_eap_attr_ctx(const gss_eap_attr_ctx&); gss_eap_attr_ctx& operator=(const gss_eap_attr_ctx&); + uint32_t m_flags; gss_eap_attr_provider *m_providers[ATTR_TYPE_MAX + 1]; }; @@ -221,9 +241,6 @@ private: #ifdef __cplusplus -#include -#include - static inline void duplicateBuffer(gss_buffer_desc &src, gss_buffer_t dst) { @@ -258,9 +275,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, @@ -324,9 +344,6 @@ gssEapReleaseAttrContext(OM_uint32 *minor, gss_name_t name); OM_uint32 -gssEapAttrProvidersInit(OM_uint32 *minor); - -OM_uint32 gssEapAttrProvidersFinalize(OM_uint32 *minor); #ifdef __cplusplus