}
int
-cachedb_setup(struct module_env* env, int id)
+cachedb_init(struct module_env* env, int id)
{
struct cachedb_env* cachedb_env = (struct cachedb_env*)calloc(1,
sizeof(struct cachedb_env));
}
void
-cachedb_desetup(struct module_env* env, int id)
+cachedb_deinit(struct module_env* env, int id)
{
struct cachedb_env* cachedb_env;
if(!env || !env->modinfo[id])
*/
static struct module_func_block cachedb_block = {
"cachedb",
- &module_dummy_init, &module_dummy_init, &cachedb_setup, &cachedb_desetup, &cachedb_operate,
+ &cachedb_init, &cachedb_deinit, NULL, NULL, &cachedb_operate,
&cachedb_inform_super, &cachedb_clear, &cachedb_get_mem
};
#define CACHEDB_HASHSIZE 256 /* bit hash */
/** Init the cachedb module */
-int cachedb_setup(struct module_env* env, int id);
+int cachedb_init(struct module_env* env, int id);
/** Deinit the cachedb module */
-void cachedb_desetup(struct module_env* env, int id);
+void cachedb_deinit(struct module_env* env, int id);
/** Operate on an event on a query (in qstate). */
void cachedb_operate(struct module_qstate* qstate, enum module_ev event,
int id, struct outbound_entry* outbound);
int
daemon_privileged(struct daemon* daemon)
{
- if(!daemon_open_shared_ports(daemon))
- fatal_exit("could not open ports");
-
daemon->env->cfg = daemon->cfg;
daemon->env->alloc = &daemon->superalloc;
daemon->env->worker = NULL;
- if(!modstack_init(&daemon->mods, daemon->cfg->module_conf,
+ if(!modstack_startup(&daemon->mods, daemon->cfg->module_conf,
daemon->env)) {
- fatal_exit("failed to init modules");
+ fatal_exit("failed to startup modules");
}
return 1;
}
daemon->env->alloc = &daemon->superalloc;
daemon->env->worker = NULL;
daemon->env->need_to_validate = 0; /* set by module init below */
- if(!modstack_setup(&daemon->mods, daemon->cfg->module_conf,
+ if(daemon->mods.num != 0)
+ modstack_deinit(&daemon->mods, daemon->env);
+ if(!modstack_call_init(&daemon->mods, daemon->cfg->module_conf,
daemon->env)) {
fatal_exit("failed to setup modules");
}
daemon->views = NULL;
if(daemon->env->auth_zones)
auth_zones_cleanup(daemon->env->auth_zones);
- /* key cache is cleared by module desetup during next daemon_fork() */
+ /* key cache is cleared by module deinit during next daemon_fork() */
daemon_remote_clear(daemon->rc);
for(i=0; i<daemon->num; i++)
worker_delete(daemon->workers[i]);
size_t i;
if(!daemon)
return;
- modstack_desetup(&daemon->mods, daemon->env);
+ modstack_deinit(&daemon->mods, daemon->env);
+ modstack_destartup(&daemon->mods, daemon->env);
daemon_remote_delete(daemon->rc);
for(i = 0; i < daemon->num_ports; i++)
listening_ports_free(daemon->ports[i]);
*/
struct daemon* daemon_init(void);
+/**
+ * Open shared listening ports (if needed).
+ * The cfg member pointer must have been set for the daemon.
+ * @param daemon: the daemon.
+ * @return: false on error.
+ */
+int daemon_open_shared_ports(struct daemon* daemon);
+
/**
* Do daemon setup that needs privileges
* like opening privileged ports or opening device files.
#endif
#ifdef HAVE_GETPWNAM
struct passwd *pwd = NULL;
+#endif
+ if(!daemon_privileged(daemon))
+ fatal_exit("could not do privileged setup");
+#ifdef HAVE_GETPWNAM
if(cfg->username && cfg->username[0]) {
if((pwd = getpwnam(cfg->username)) == NULL)
fatal_exit("user '%s' does not exist.", cfg->username);
config_lookup_uid(cfg);
/* prepare */
+ if(!daemon_open_shared_ports(daemon))
+ fatal_exit("could not open ports");
if(!done_setup) {
- if(!daemon_privileged(daemon))
- fatal_exit("could not do privileged setup");
perform_setup(daemon, cfg, debug_mode, &cfgfile, need_pidfile);
done_setup = 1;
} else {
* \param id This instance's ID number.
*/
int
-dns64_setup(struct module_env* env, int id)
+dns64_init(struct module_env* env, int id)
{
struct dns64_env* dns64_env =
(struct dns64_env*)calloc(1, sizeof(struct dns64_env));
* \param id This instance's ID number.
*/
void
-dns64_desetup(struct module_env* env, int id)
+dns64_deinit(struct module_env* env, int id)
{
struct dns64_env* dns64_env;
if (!env)
*/
static struct module_func_block dns64_block = {
"dns64",
- &module_dummy_init, &module_dummy_init, &dns64_setup, &dns64_desetup,
- &dns64_operate, &dns64_inform_super, &dns64_clear, &dns64_get_mem
+ &dns64_init, &dns64_deinit, NULL, NULL, &dns64_operate,
+ &dns64_inform_super, &dns64_clear, &dns64_get_mem
};
/**
struct module_func_block *dns64_get_funcblock(void);
/** dns64 init */
-int dns64_setup(struct module_env* env, int id);
+int dns64_init(struct module_env* env, int id);
/** dns64 deinit */
-void dns64_desetup(struct module_env* env, int id);
+void dns64_deinit(struct module_env* env, int id);
/** dns64 operate on a query */
void dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
*/
static struct module_func_block dynlibmod_block = {
"dynlib",
- &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate, &dynlibmod_inform_super,
- &dynlibmod_clear, &dynlibmod_get_mem
+ &dynlibmod_init, &dynlibmod_deinit, NULL, NULL, &dynlibmod_operate,
+ &dynlibmod_inform_super, &dynlibmod_clear, &dynlibmod_get_mem
};
struct module_func_block* dynlibmod_get_funcblock(void)
}
int
-subnetmod_setup(struct module_env *env, int id)
+subnetmod_init(struct module_env *env, int id)
{
struct subnet_env *sn_env = (struct subnet_env*)calloc(1,
sizeof(struct subnet_env));
}
void
-subnetmod_desetup(struct module_env *env, int id)
+subnetmod_deinit(struct module_env *env, int id)
{
struct subnet_env *sn_env;
if(!env || !env->modinfo[id])
*/
static struct module_func_block subnetmod_block = {
"subnetcache",
- &module_dummy_init, &module_dummy_init, &subnetmod_setup,
- &subnetmod_desetup, &subnetmod_operate, &subnetmod_inform_super,
- &subnetmod_clear, &subnetmod_get_mem
+ &subnetmod_init, &subnetmod_deinit, NULL, NULL, &subnetmod_operate,
+ &subnetmod_inform_super, &subnetmod_clear, &subnetmod_get_mem
};
struct module_func_block*
struct module_func_block* subnetmod_get_funcblock(void);
/** subnet module init */
-int subnetmod_setup(struct module_env* env, int id);
+int subnetmod_init(struct module_env* env, int id);
/** subnet module deinit */
-void subnetmod_desetup(struct module_env* env, int id);
+void subnetmod_deinit(struct module_env* env, int id);
/** subnet module operate on a query */
void subnetmod_operate(struct module_qstate* qstate, enum module_ev event,
}
int
-ipsecmod_setup(struct module_env* env, int id)
+ipsecmod_init(struct module_env* env, int id)
{
struct ipsecmod_env* ipsecmod_env = (struct ipsecmod_env*)calloc(1,
sizeof(struct ipsecmod_env));
}
void
-ipsecmod_desetup(struct module_env* env, int id)
+ipsecmod_deinit(struct module_env* env, int id)
{
struct ipsecmod_env* ipsecmod_env;
if(!env || !env->modinfo[id])
*/
static struct module_func_block ipsecmod_block = {
"ipsecmod",
- &module_dummy_init, &module_dummy_init, &ipsecmod_setup,
- &ipsecmod_desetup, &ipsecmod_operate, &ipsecmod_inform_super,
- &ipsecmod_clear, &ipsecmod_get_mem
+ &ipsecmod_init, &ipsecmod_deinit, NULL, NULL, &ipsecmod_operate,
+ &ipsecmod_inform_super, &ipsecmod_clear, &ipsecmod_get_mem
};
struct module_func_block*
};
/** Init the ipsecmod module */
-int ipsecmod_setup(struct module_env* env, int id);
+int ipsecmod_init(struct module_env* env, int id);
/** Deinit the ipsecmod module */
-void ipsecmod_desetup(struct module_env* env, int id);
+void ipsecmod_deinit(struct module_env* env, int id);
/** Operate on an event on a query (in qstate). */
void ipsecmod_operate(struct module_qstate* qstate, enum module_ev event,
int id, struct outbound_entry* outbound);
return 0;
}
-int ipset_init(struct module_env* env, int id) {
+int ipset_startup(struct module_env* env, int id) {
struct ipset_env *ipset_env;
- ipset_env = (struct ipset_env *)malloc(sizeof(struct ipset_env));
+ ipset_env = (struct ipset_env *)calloc(1, sizeof(struct ipset_env));
if (!ipset_env) {
log_err("malloc failure");
return 0;
return 1;
}
-int ipset_deinit(struct module_env* env, int id) {
+void ipset_destartup(struct module_env* env, int id) {
struct ipset_env *ipset_env = env->modinfo[id];
#ifdef HAVE_NET_PFVAR_H
close((filter_dev)ipset_env->dev);
#endif
free(ipset_env);
env->modinfo[id] = NULL;
- return 1;
}
-int ipset_setup(struct module_env* env, int id) {
+int ipset_init(struct module_env* env, int id) {
struct ipset_env *ipset_env = env->modinfo[id];
ipset_env->name_v4 = env->cfg->ipset_name_v4;
return 1;
}
-void ipset_desetup(struct module_env *env, int id) {
+void ipset_deinit(struct module_env *env, int id) {
filter_dev dev;
struct ipset_env *ipset_env;
*/
static struct module_func_block ipset_block = {
"ipset",
- &ipset_init, &ipset_deinit, &ipset_setup, &ipset_desetup,
+ &ipset_init, &ipset_deinit, &ipset_startup, &ipset_destartup,
&ipset_operate, &ipset_inform_super, &ipset_clear, &ipset_get_mem
};
int dummy;
};
+/** Startup the ipset module */
+int ipset_startup(struct module_env* env, int id);
+/** Destartup the ipset module */
+void ipset_destartup(struct module_env* env, int id);
/** Init the ipset module */
int ipset_init(struct module_env* env, int id);
/** Deinit the ipset module */
-int ipset_deinit(struct module_env* env, int id);
-/** Setup the ipset module */
-int ipset_setup(struct module_env* env, int id);
-/** Desetup the ipset module */
-void ipset_desetup(struct module_env* env, int id);
+void ipset_deinit(struct module_env* env, int id);
/** Operate on an event on a query (in qstate). */
void ipset_operate(struct module_qstate* qstate, enum module_ev event,
int id, struct outbound_entry* outbound);
static void target_count_increase_nx(struct iter_qstate* iq, int num);
int
-iter_setup(struct module_env* env, int id)
+iter_init(struct module_env* env, int id)
{
struct iter_env* iter_env = (struct iter_env*)calloc(1,
sizeof(struct iter_env));
}
void
-iter_desetup(struct module_env* env, int id)
+iter_deinit(struct module_env* env, int id)
{
struct iter_env* iter_env;
if(!env || !env->modinfo[id])
*/
static struct module_func_block iter_block = {
"iterator",
- &module_dummy_init, &module_dummy_init, &iter_setup, &iter_desetup,
- &iter_operate, &iter_inform_super, &iter_clear, &iter_get_mem
+ &iter_init, &iter_deinit, NULL, NULL, &iter_operate,
+ &iter_inform_super, &iter_clear, &iter_get_mem
};
struct module_func_block*
int iter_state_is_responsestate(enum iter_state s);
/** iterator init */
-int iter_setup(struct module_env* env, int id);
+int iter_init(struct module_env* env, int id);
/** iterator deinit */
-void iter_desetup(struct module_env* env, int id);
+void iter_deinit(struct module_env* env, int id);
/** iterator operate on a query */
void iter_operate(struct module_qstate* qstate, enum module_ev event, int id,
#include "iterator/iter_fwd.h"
#include "iterator/iter_hints.h"
+/** If the modules have started, once. */
+int modstack_started = 0;
+
int
context_finalize(struct ub_ctx* ctx)
{
ctx->pipe_pid = getpid();
cfg_apply_local_port_policy(cfg, 65536);
config_apply(cfg);
- if(!modstack_init(&ctx->mods, cfg->module_conf, ctx->env))
- return UB_INITFAIL;
- if(!modstack_setup(&ctx->mods, cfg->module_conf, ctx->env))
+ if(!modstack_started) {
+ modstack_started = 1;
+ if(!modstack_startup(&ctx->mods, cfg->module_conf, ctx->env))
+ return UB_INITFAIL;
+ }
+ if(!modstack_call_init(&ctx->mods, cfg->module_conf, ctx->env))
return UB_INITFAIL;
listen_setup_locks();
log_edns_known_options(VERB_ALGO, ctx->env);
struct ctx_query* context_deserialize_cancel(struct ub_ctx* ctx,
uint8_t* p, uint32_t len);
+/** If the modules have started. */
+extern int modstack_started;
+
#endif /* LIBUNBOUND_CONTEXT_H */
int e = errno;
ub_randfree(ctx->seed_rnd);
config_delete(ctx->env->cfg);
- modstack_desetup(&ctx->mods, ctx->env);
+ modstack_deinit(&ctx->mods, ctx->env);
+ modstack_destartup(&ctx->mods, ctx->env);
listen_desetup_locks();
edns_known_options_delete(ctx->env);
edns_strings_delete(ctx->env->edns_strings);
tube_delete(ctx->qq_pipe);
ub_randfree(ctx->seed_rnd);
config_delete(ctx->env->cfg);
- modstack_desetup(&ctx->mods, ctx->env);
+ modstack_deinit(&ctx->mods, ctx->env);
+ modstack_destartup(&ctx->mods, ctx->env);
listen_desetup_locks();
edns_known_options_delete(ctx->env);
edns_strings_delete(ctx->env->edns_strings);
}
libworker_delete_event(ctx->event_worker);
- modstack_desetup(&ctx->mods, ctx->env);
modstack_deinit(&ctx->mods, ctx->env);
+ modstack_destartup(&ctx->mods, ctx->env);
a = ctx->alloc_list;
while(a) {
na = a->super;
*/
static struct module_func_block pythonmod_block = {
"python",
- &module_dummy_init, &module_dummy_init, &pythonmod_init, &pythonmod_deinit, &pythonmod_operate, &pythonmod_inform_super,
- &pythonmod_clear, &pythonmod_get_mem
+ &pythonmod_init, &pythonmod_deinit, NULL, NULL, &pythonmod_operate,
+ &pythonmod_inform_super, &pythonmod_clear, &pythonmod_get_mem
};
struct module_func_block* pythonmod_get_funcblock(void)
}
int
-respip_setup(struct module_env* env, int id)
+respip_init(struct module_env* env, int id)
{
(void)env;
(void)id;
}
void
-respip_desetup(struct module_env* env, int id)
+respip_deinit(struct module_env* env, int id)
{
(void)env;
(void)id;
*/
static struct module_func_block respip_block = {
"respip",
- &module_dummy_init, &module_dummy_init, &respip_setup, &respip_desetup, &respip_operate,
+ &respip_init, &respip_deinit, NULL, NULL, &respip_operate,
&respip_inform_super, &respip_clear, &respip_get_mem
};
struct module_func_block* respip_get_funcblock(void);
/** response-ip init */
-int respip_setup(struct module_env* env, int id);
+int respip_init(struct module_env* env, int id);
/** response-ip deinit */
-void respip_desetup(struct module_env* env, int id);
+void respip_deinit(struct module_env* env, int id);
/** response-ip operate on a query */
void respip_operate(struct module_qstate* qstate, enum module_ev event, int id,
}
int
-modstack_init(struct module_stack* stack, const char* module_conf,
+modstack_startup(struct module_stack* stack, const char* module_conf,
struct module_env* env)
{
int i;
return 0;
}
for(i=0; i<stack->num; i++) {
- verbose(VERB_OPS, "init module %d: %s",
+ if(stack->mod[i]->startup == NULL)
+ continue;
+ verbose(VERB_OPS, "startup module %d: %s",
i, stack->mod[i]->name);
- fptr_ok(fptr_whitelist_mod_init(stack->mod[i]->init));
- if(!(*stack->mod[i]->init)(env, i)) {
- log_err("module init for module %s failed",
+ fptr_ok(fptr_whitelist_mod_startup(stack->mod[i]->startup));
+ if(!(*stack->mod[i]->startup)(env, i)) {
+ log_err("module startup for module %s failed",
stack->mod[i]->name);
return 0;
}
}
int
-modstack_setup(struct module_stack* stack, const char* module_conf,
+modstack_call_init(struct module_stack* stack, const char* module_conf,
struct module_env* env)
{
int i;
return 0;
}
module_conf += strlen(stack->mod[i]->name);
- verbose(VERB_OPS, "setup module %d: %s",
+ verbose(VERB_OPS, "init module %d: %s",
i, stack->mod[i]->name);
- fptr_ok(fptr_whitelist_mod_setup(stack->mod[i]->setup));
- if(!(*stack->mod[i]->setup)(env, i)) {
- log_err("module setup for module %s failed",
+ fptr_ok(fptr_whitelist_mod_init(stack->mod[i]->init));
+ if(!(*stack->mod[i]->init)(env, i)) {
+ log_err("module init for module %s failed",
stack->mod[i]->name);
return 0;
}
}
void
-modstack_desetup(struct module_stack* stack, struct module_env* env)
+modstack_deinit(struct module_stack* stack, struct module_env* env)
{
int i;
for(i=0; i<stack->num; i++) {
- fptr_ok(fptr_whitelist_mod_desetup(stack->mod[i]->desetup));
- (*stack->mod[i]->desetup)(env, i);
+ fptr_ok(fptr_whitelist_mod_deinit(stack->mod[i]->deinit));
+ (*stack->mod[i]->deinit)(env, i);
}
}
void
-modstack_deinit(struct module_stack* stack, struct module_env* env)
+modstack_destartup(struct module_stack* stack, struct module_env* env)
{
int i;
for(i=0; i<stack->num; i++) {
- fptr_ok(fptr_whitelist_mod_deinit(stack->mod[i]->deinit));
- (*stack->mod[i]->deinit)(env, i);
+ if(stack->mod[i]->destartup == NULL)
+ continue;
+ fptr_ok(fptr_whitelist_mod_destartup(stack->mod[i]->destartup));
+ (*stack->mod[i]->destartup)(env, i);
}
stack->num = 0;
free(stack->mod);
* @param module_conf: string what modules to initialize
* @param env: module environment which is inited by the modules.
* environment should have a superalloc, cfg,
- * env.need_to_validate is set by the modules.
* @return on false a module init failed.
*/
-int modstack_init(struct module_stack* stack, const char* module_conf,
+int modstack_startup(struct module_stack* stack, const char* module_conf,
struct module_env* env);
/**
const char** module_list_avail(void);
/**
- * Setup modules. Calls module_setup().
+ * Init modules. Calls module_init().
* @param stack: It is modstack_setupped().
* @param module_conf: module ordering to check against the ordering in stack.
- * fails on changed ordering.
+ * fails on changed ordering.
* @param env: module environment which is inited by the modules.
* environment should have a superalloc, cfg,
* env.need_to_validate is set by the modules.
* @return on false a module init failed.
*/
-int modstack_setup(struct module_stack* stack, const char* module_conf,
+int modstack_call_init(struct module_stack* stack, const char* module_conf,
struct module_env* env);
/**
- * Desetup the modules
+ * Deinint the modules
* @param stack: made empty.
* @param env: module env for module deinit() calls.
*/
-void modstack_desetup(struct module_stack* stack, struct module_env* env);
+void modstack_deinit(struct module_stack* stack, struct module_env* env);
/**
- * Deinit the modules, deinit, delete.
+ * Destartup the modules, close, delete.
* @param stack: made empty.
- * @param env: module env for module deinit() calls.
+ * @param env: module env for module destartup() calls.
*/
-void modstack_deinit(struct module_stack* stack, struct module_env* env);
+void modstack_destartup(struct module_stack* stack, struct module_env* env);
/**
* Find index of module by name.
fatal_exit("out of memory");
if(!edns_known_options_init(&env))
fatal_exit("out of memory");
- if(!(*fb->setup)(&env, 0))
- fatal_exit("bad config for %s module", fb->name);
- if(!(*fb->setup)(&env, 0))
- fatal_exit("bad config for %s module", fb->name);
- (*fb->desetup)(&env, 0);
+ if(fb->startup && !(*fb->startup)(&env, 0))
+ fatal_exit("bad config during startup for %s module", fb->name);
+ if(!(*fb->init)(&env, 0))
+ fatal_exit("bad config during init for %s module", fb->name);
(*fb->deinit)(&env, 0);
+ if(fb->destartup)
+ (*fb->destartup)(&env, 0);
sldns_buffer_free(env.scratch_buffer);
regional_destroy(env.scratch);
edns_known_options_delete(&env);
env.auth_zones = auth_zones_create();
if(!env.auth_zones)
fatal_exit("out of memory");
- modstack_init(&mods);
- if(!modstack_setup(&mods, env.cfg->module_conf, &env))
- fatal_exit("could not modstack_setup");
+ memset(&mods, 0, sizeof(mods));
+ if(!modstack_startup(&mods, env.cfg->module_conf, &env))
+ fatal_exit("could not modstack_startup");
+ if(!modstack_call_init(&mods, env.cfg->module_conf, &env))
+ fatal_exit("could not modstack_call_init");
env.mesh = mesh_create(&mods, &env);
if(!env.mesh)
fatal_exit("out of memory");
/* desetup test harness */
mesh_delete(env.mesh);
- modstack_desetup(&mods, &env);
+ modstack_deinit(&mods, &env);
+ modstack_destartup(&mods, &env);
auth_zones_delete(env.auth_zones);
anchors_delete(env.anchors);
config_delete(env.cfg);
int
fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id))
{
- if(fptr == &module_dummy_init) return 1;
-#ifdef USE_IPSET
- else if(fptr == &ipset_init) return 1;
-#endif
- return 0;
-}
-
-int
-fptr_whitelist_mod_deinit(int (*fptr)(struct module_env* env, int id))
-{
- if(fptr == &module_dummy_init) return 1;
-#ifdef USE_IPSET
- else if(fptr == &ipset_deinit) return 1;
-#endif
- return 0;
-}
-
-int
-fptr_whitelist_mod_setup(int (*fptr)(struct module_env* env, int id))
-{
- if(fptr == &iter_setup) return 1;
- else if(fptr == &val_setup) return 1;
- else if(fptr == &dns64_setup) return 1;
- else if(fptr == &respip_setup) return 1;
+ if(fptr == &iter_init) return 1;
+ else if(fptr == &val_init) return 1;
+ else if(fptr == &dns64_init) return 1;
+ else if(fptr == &respip_init) return 1;
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_init) return 1;
#endif
else if(fptr == &dynlibmod_init) return 1;
#endif
#ifdef USE_CACHEDB
- else if(fptr == &cachedb_setup) return 1;
+ else if(fptr == &cachedb_init) return 1;
#endif
#ifdef USE_IPSECMOD
- else if(fptr == &ipsecmod_setup) return 1;
+ else if(fptr == &ipsecmod_init) return 1;
#endif
#ifdef CLIENT_SUBNET
- else if(fptr == &subnetmod_setup) return 1;
+ else if(fptr == &subnetmod_init) return 1;
#endif
#ifdef USE_IPSET
- else if(fptr == &ipset_setup) return 1;
+ else if(fptr == &ipset_init) return 1;
#endif
return 0;
+
}
-int
-fptr_whitelist_mod_desetup(void (*fptr)(struct module_env* env, int id))
+int
+fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id))
{
- if(fptr == &iter_desetup) return 1;
- else if(fptr == &val_desetup) return 1;
- else if(fptr == &dns64_desetup) return 1;
- else if(fptr == &respip_desetup) return 1;
+ if(fptr == &iter_deinit) return 1;
+ else if(fptr == &val_deinit) return 1;
+ else if(fptr == &dns64_deinit) return 1;
+ else if(fptr == &respip_deinit) return 1;
#ifdef WITH_PYTHONMODULE
else if(fptr == &pythonmod_deinit) return 1;
#endif
else if(fptr == &dynlibmod_deinit) return 1;
#endif
#ifdef USE_CACHEDB
- else if(fptr == &cachedb_desetup) return 1;
+ else if(fptr == &cachedb_deinit) return 1;
#endif
#ifdef USE_IPSECMOD
- else if(fptr == &ipsecmod_desetup) return 1;
+ else if(fptr == &ipsecmod_deinit) return 1;
#endif
#ifdef CLIENT_SUBNET
- else if(fptr == &subnetmod_desetup) return 1;
+ else if(fptr == &subnetmod_deinit) return 1;
+#endif
+#ifdef USE_IPSET
+ else if(fptr == &ipset_deinit) return 1;
#endif
+ return 0;
+}
+
+int
+fptr_whitelist_mod_startup(int (*fptr)(struct module_env* env, int id))
+{
+#ifdef USE_IPSET
+ if(fptr == &ipset_startup) return 1;
+#endif
+ return 0;
+}
+
+int
+fptr_whitelist_mod_destartup(void (*fptr)(struct module_env* env, int id))
+{
#ifdef USE_IPSET
- else if(fptr == &ipset_desetup) return 1;
+ if(fptr == &ipset_destartup) return 1;
#endif
return 0;
}
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_mod_deinit(int (*fptr)(struct module_env* env, int id));
+int fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id));
/**
- * Check function pointer whitelist for module setup call values.
+ * Check function pointer whitelist for module startup call values.
*
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_mod_setup(int (*fptr)(struct module_env* env, int id));
+int fptr_whitelist_mod_startup(int (*fptr)(struct module_env* env, int id));
/**
- * Check function pointer whitelist for module desetup call values.
+ * Check function pointer whitelist for module destartup call values.
*
* @param fptr: function pointer to check.
* @return false if not in whitelist.
*/
-int fptr_whitelist_mod_desetup(void (*fptr)(struct module_env* env, int id));
+int fptr_whitelist_mod_destartup(void (*fptr)(struct module_env* env, int id));
/**
* Check function pointer whitelist for module operate call values.
super->was_ratelimited = qstate->was_ratelimited;
}
}
-
-int module_dummy_init(struct module_env* env, int id)
-{
- return 1;
-}
const char* name;
/**
- * initialise the module. This is called only once at startup.
- * Privileged operations like opening device files may be done here.
+ * Initialise the module. Called when restarting or reloading the
+ * daemon.
+ * This is the place to apply settings from the config file.
+ * @param env: module environment.
* @param id: module id number.
* return: 0 on error
*/
int (*init)(struct module_env* env, int id);
/**
- * deinitialise the module. This is called only once before shutdown to
- * free resources allocated during init().
- * Closing privileged ports or files must be done here.
+ * Deinitialise the module, undo stuff done during init().
+ * Called before reloading the daemon.
+ * @param env: module environment.
* @param id: module id number.
- * return: 0 on error
*/
- int (*deinit)(struct module_env* env, int id);
+ void (*deinit)(struct module_env* env, int id);
/**
- * setup the module. Called when restarting or reloading the
- * daemon.
- * This is the place to apply settings from the config file.
+ * Set up the module for start. This is called only once at startup.
+ * Privileged operations like opening device files may be done here.
+ * The function ptr can be NULL, if it is not used.
* @param env: module environment.
* @param id: module id number.
* return: 0 on error
*/
- int (*setup)(struct module_env* env, int id);
+ int (*startup)(struct module_env* env, int id);
/**
- * de-setup, undo stuff done during setup().
- * Called before reloading the daemon.
+ * Close down the module for stop. This is called only once before
+ * shutdown to free resources allocated during startup().
+ * Closing privileged ports or files must be done here.
+ * The function ptr can be NULL, if it is not used.
* @param env: module environment.
* @param id: module id number.
*/
- void (*desetup)(struct module_env* env, int id);
+ void (*destartup)(struct module_env* env, int id);
/**
* accept a new query, or work further on existing query.
void copy_state_to_super(struct module_qstate* qstate, int id,
struct module_qstate* super);
-int module_dummy_init(struct module_env* env, int id);
-
#endif /* UTIL_MODULE_H */
void ecdsa_evp_workaround_init(void);
#endif
int
-val_setup(struct module_env* env, int id)
+val_init(struct module_env* env, int id)
{
struct val_env* val_env = (struct val_env*)calloc(1,
sizeof(struct val_env));
}
void
-val_desetup(struct module_env* env, int id)
+val_deinit(struct module_env* env, int id)
{
struct val_env* val_env;
if(!env || !env->modinfo[id])
*/
static struct module_func_block val_block = {
"validator",
- &module_dummy_init, &module_dummy_init, &val_setup, &val_desetup,
- &val_operate, &val_inform_super, &val_clear, &val_get_mem
+ &val_init, &val_deinit, NULL, NULL, &val_operate, &val_inform_super,
+ &val_clear, &val_get_mem
};
struct module_func_block*
const char* val_state_to_string(enum val_state state);
/** validator init */
-int val_setup(struct module_env* env, int id);
+int val_init(struct module_env* env, int id);
/** validator deinit */
-void val_desetup(struct module_env* env, int id);
+void val_deinit(struct module_env* env, int id);
/** validator operate on a query */
void val_operate(struct module_qstate* qstate, enum module_ev event, int id,