static int rlm_sql_detach(void *instance) { rlm_sql_t *inst = instance; paircompare_unregister(PW_SQL_GROUP, sql_groupcmp); if (inst->config) { if (inst->pool) sql_poolfree(inst); if (inst->config->xlat_name) { xlat_unregister(inst->config->xlat_name, sql_xlat, instance); } } if (inst->handle) { #if 0 /* * FIXME: Call the modules 'destroy' function? */ lt_dlclose(inst->handle); /* ignore any errors */ #endif } return 0; }
static int rlm_sql_detach(void *instance) { SQL_INST *inst = instance; paircompare_unregister(PW_SQL_GROUP, sql_groupcmp); if (inst->config) { int i; if (inst->pool) sql_poolfree(inst); if (inst->config->xlat_name) { xlat_unregister(inst->config->xlat_name,(RAD_XLAT_FUNC)sql_xlat, instance); free(inst->config->xlat_name); } /* * Free up dynamically allocated string pointers. */ for (i = 0; module_config[i].name != NULL; i++) { char **p; if (module_config[i].type != PW_TYPE_STRING_PTR) { continue; } /* * Treat 'config' as an opaque array of bytes, * and take the offset into it. There's a * (char*) pointer at that offset, and we want * to point to it. */ p = (char **) (((char *)inst->config) + module_config[i].offset); if (!*p) { /* nothing allocated */ continue; } free(*p); *p = NULL; } /* * Catch multiple instances of the module. */ if (allowed_chars == inst->config->allowed_chars) { allowed_chars = NULL; } free(inst->config); inst->config = NULL; } if (inst->handle) { #if 0 /* * FIXME: Call the modules 'destroy' function? */ lt_dlclose(inst->handle); /* ignore any errors */ #endif } free(inst); return 0; }
static int mod_detach(void *instance) { rlm_sql_t *inst = instance; if (inst->config) { if (inst->pool) sql_poolfree(inst); } if (inst->handle) { #if 0 /* * FIXME: Call the modules 'destroy' function? */ dlclose(inst->handle); /* ignore any errors */ #endif } return 0; }