static int mod_detach(void *instance) { rlm_python_t *inst = instance; int ret; ret = do_python(NULL, inst->detach.function, "detach"); mod_instance_clear(inst); return ret; }
static int mod_detach(void *instance) { rlm_python_t *inst = instance; int ret; /* * Master should still have no thread state */ ret = do_python(inst, NULL, inst->detach.function, "detach", false); mod_instance_clear(inst); return ret; }
/* * Do any per-module initialization that is separate to each * configured instance of the module. e.g. set up connections * to external databases, read configuration files, set up * dictionary entries, etc. * * If configuration information is given in the config section * that must be referenced in later calls, store a handle to it * in *instance otherwise put a null pointer there. * */ static int mod_instantiate(UNUSED CONF_SECTION *conf, void *instance) { rlm_python_t *inst = instance; if (mod_init(inst) != 0) { return -1; } #define A(x) if (mod_load_function(&inst->x) < 0) goto failed A(instantiate); A(authenticate); A(authorize); A(preacct); A(accounting); A(checksimul); A(pre_proxy); A(post_proxy); A(post_auth); #ifdef WITH_COA A(recv_coa); A(send_coa); #endif A(detach); #undef A /* * Call the instantiate function. No request. Use the * return value. */ return do_python(inst, NULL, inst->instantiate.function, "instantiate", false); failed: Pyx_BLOCK_THREADS mod_error(); Pyx_UNBLOCK_THREADS mod_instance_clear(inst); return -1; }