plug leaks in 898862478f9adecfc5580814cf1296464c448b1b
[mech_eap.orig] / util_attr.h
index 90a8c91..e3f3567 100644 (file)
 #include <string>
 #include <new>
 
+using namespace gss_eap_util;
+
 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);
 
@@ -74,13 +77,13 @@ public:
         return true;
     }
 
-    virtual bool initFromExistingContext(const gss_eap_attr_ctx *manager,
+    virtual bool initWithExistingContext(const gss_eap_attr_ctx *manager,
                                          const gss_eap_attr_provider *ctx GSSEAP_UNUSED)
     {
         return initWithManager(manager);
     }
 
-    virtual bool initFromGssContext(const gss_eap_attr_ctx *manager,
+    virtual bool initWithGssContext(const gss_eap_attr_ctx *manager,
                                     const gss_cred_id_t cred GSSEAP_UNUSED,
                                     const gss_ctx_id_t ctx GSSEAP_UNUSED)
     {
@@ -120,21 +123,36 @@ public:
     {
         return NULL;
     }
+
     virtual void releaseAnyNameMapping(gss_buffer_t type_id GSSEAP_UNUSED,
                                        gss_any_t input GSSEAP_UNUSED) const
     {
     }
 
-    virtual void exportToBuffer(gss_buffer_t buffer 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 initFromBuffer(const gss_eap_attr_ctx *manager,
-                                const gss_buffer_t buffer GSSEAP_UNUSED)
+    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,
@@ -169,8 +187,8 @@ public:
     gss_eap_attr_ctx(void);
     ~gss_eap_attr_ctx(void);
 
-    bool initFromExistingContext(const gss_eap_attr_ctx *manager);
-    bool initFromGssContext(const gss_cred_id_t cred,
+    bool initWithExistingContext(const gss_eap_attr_ctx *manager);
+    bool initWithGssContext(const gss_cred_id_t cred,
                             const gss_ctx_id_t ctx);
 
     bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const;
@@ -192,14 +210,11 @@ public:
                                gss_any_t input) const;
 
     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);
+    bool initWithBuffer(const gss_buffer_t buffer);
 
+    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,
@@ -208,28 +223,23 @@ 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);
@@ -241,6 +251,12 @@ 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 */
@@ -265,7 +281,7 @@ duplicateBuffer(gss_buffer_desc &src, gss_buffer_t dst)
     OM_uint32 minor;
 
     if (GSS_ERROR(duplicateBuffer(&minor, &src, dst)))
-        throw new std::bad_alloc();
+        throw std::bad_alloc();
 }
 
 static inline void