- vp2 = (VALUE_PAIR *)GSSEAP_CALLOC(1, sizeof(*vp2));
- if (vp2 == NULL) {
- rc_avpair_free(dst);
- return NULL;
- }
- memcpy(vp2, vp, sizeof(*vp));
- vp2->next = NULL;
- *pDst = vp2;
- pDst = &vp2->next;
+static void
+gssEapFree(void *ptr)
+{
+ GSSEAP_FREE(ptr);
+}
+
+static void *
+gssEapRealloc(void *ptr, size_t size)
+{
+ return GSSEAP_REALLOC(ptr, size);
+}
+
+static struct rs_error *
+radiusAllocHandle(const char *configFile,
+ rs_handle **pHandle)
+{
+ rs_handle *rh;
+ struct rs_alloc_scheme ralloc;
+
+ *pHandle = NULL;
+
+ if (configFile == NULL || configFile[0] == '\0')
+ configFile = RS_CONFIG_FILE;
+
+ if (rs_context_create(&rh, RS_DICT_FILE) != 0)
+ return NULL;
+
+ ralloc.calloc = gssEapCalloc;
+ ralloc.malloc = gssEapMalloc;
+ ralloc.free = gssEapFree;
+ ralloc.realloc = gssEapRealloc;
+
+ rs_context_set_alloc_scheme(rh, &ralloc);
+
+ if (rs_context_read_config(rh, configFile) != 0) {
+ rs_context_destroy(rh);
+ return rs_err_ctx_pop(rh);