Refactor attribute context so it's not a subclass of provider
authorLuke Howard <lukeh@padl.com>
Sat, 18 Sep 2010 16:51:01 +0000 (18:51 +0200)
committerLuke Howard <lukeh@padl.com>
Sat, 18 Sep 2010 16:51:01 +0000 (18:51 +0200)
mech_eap/util_attr.cpp
mech_eap/util_attr.h

index 681dc5f..5414749 100644 (file)
@@ -102,18 +102,14 @@ gss_eap_attr_ctx::attributeTypeToPrefix(unsigned int type)
 }
 
 bool
-gss_eap_attr_ctx::initFromExistingContext(const gss_eap_attr_ctx *manager,
-                                          const gss_eap_attr_provider *provider)
+gss_eap_attr_ctx::initFromExistingContext(const gss_eap_attr_ctx *manager)
 {
-    if (!gss_eap_attr_provider::initFromExistingContext(this, provider))
-        return false;
-
     for (unsigned int i = 0; i < ATTR_TYPE_MAX; i++) {
         gss_eap_attr_provider *provider;
 
         provider = m_providers[i];
         if (provider != NULL) {
-            if (!provider->initFromExistingContext(this, provider))
+            if (!provider->initFromExistingContext(this, manager->m_providers[i]))
                 return false;
         }
     }
@@ -122,13 +118,9 @@ gss_eap_attr_ctx::initFromExistingContext(const gss_eap_attr_ctx *manager,
 }
 
 bool
-gss_eap_attr_ctx::initFromGssContext(const gss_eap_attr_ctx *manager,
-                                     const gss_cred_id_t cred,
+gss_eap_attr_ctx::initFromGssContext(const gss_cred_id_t cred,
                                      const gss_ctx_id_t 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_provider *provider;
 
@@ -331,8 +323,7 @@ gss_eap_attr_ctx::exportToBuffer(gss_buffer_t buffer) const
 }
 
 bool
-gss_eap_attr_ctx::initFromBuffer(const gss_eap_attr_ctx *manager,
-                                 const gss_buffer_t buffer)
+gss_eap_attr_ctx::initFromBuffer(const gss_buffer_t buffer)
 {
     unsigned int i;
     bool ret;
@@ -354,7 +345,6 @@ gss_eap_attr_ctx::initFromBuffer(const gss_eap_attr_ctx *manager,
     return ret;
 }
 
-
 /*
  * C wrappers
  */
@@ -586,7 +576,7 @@ gssEapImportAttrContext(OM_uint32 *minor,
         try {
             ctx = new gss_eap_attr_ctx();
 
-            if (!ctx->initFromBuffer(NULL, buffer)) {
+            if (!ctx->initFromBuffer(buffer)) {
                 delete ctx;
                 return GSS_S_DEFECTIVE_TOKEN;
             }
@@ -612,7 +602,7 @@ gssEapDuplicateAttrContext(OM_uint32 *minor,
     try {
         if (in->attrCtx != NULL) {
             ctx = new gss_eap_attr_ctx();
-            if (!ctx->initFromExistingContext(NULL, in->attrCtx)) {
+            if (!ctx->initFromExistingContext(in->attrCtx)) {
                 delete ctx;
                 return GSS_S_FAILURE;
             }
@@ -709,8 +699,10 @@ gssEapCreateAttrContext(gss_cred_id_t gssCred,
 {
     gss_eap_attr_ctx *ctx;
 
+    assert(gssCtx != GSS_C_NO_CONTEXT);
+
     ctx = new gss_eap_attr_ctx();
-    if (!ctx->initFromGssContext(NULL, gssCred, gssCtx)) {
+    if (!ctx->initFromGssContext(gssCred, gssCtx)) {
         delete ctx;
         return NULL;
     }
index f7687b7..90d56c8 100644 (file)
 #ifdef __cplusplus
 #include <string>
 
+struct gss_eap_attr_provider;
 struct gss_eap_attr_ctx;
 
+typedef bool
+(*gss_eap_attr_enumeration_cb)(const gss_eap_attr_provider *source,
+                               const gss_buffer_t attribute,
+                               void *data);
+
 struct gss_eap_attr_provider
 {
 public:
@@ -70,11 +76,6 @@ public:
         return initWithManager(manager);
     }
 
-    typedef bool
-    gss_eap_attr_enumeration_cb(const gss_eap_attr_provider *source,
-                                const gss_buffer_t attribute,
-                                void *data);
-
     virtual bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const
     {
         return false;
@@ -119,16 +120,14 @@ private:
 
 typedef gss_eap_attr_provider *(*gss_eap_attr_create_provider)(void);
 
-struct gss_eap_attr_ctx : gss_eap_attr_provider
+struct gss_eap_attr_ctx
 {
 public:
     gss_eap_attr_ctx(void);
     ~gss_eap_attr_ctx(void);
 
-    bool initFromExistingContext(const gss_eap_attr_ctx *manager,
-                                 const gss_eap_attr_provider *ctx);
-    bool initFromGssContext(const gss_eap_attr_ctx *manager,
-                            const gss_cred_id_t cred,
+    bool initFromExistingContext(const gss_eap_attr_ctx *manager);
+    bool initFromGssContext(const gss_cred_id_t cred,
                             const gss_ctx_id_t ctx);
 
     bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const;
@@ -150,8 +149,7 @@ public:
                                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 initFromBuffer(const gss_buffer_t buffer);
 
     static unsigned int
     attributePrefixToType(const gss_buffer_t prefix);