diff options
Diffstat (limited to 'daemon/daemon.c')
| -rw-r--r-- | daemon/daemon.c | 26 | 
1 files changed, 22 insertions, 4 deletions
diff --git a/daemon/daemon.c b/daemon/daemon.c index 193608d40e05..f0ee329db903 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -91,6 +91,8 @@  #include "util/net_help.h"  #include "sldns/keyraw.h"  #include "respip/respip.h" +#include "iterator/iter_fwd.h" +#include "iterator/iter_hints.h"  #include <signal.h>  #ifdef HAVE_SYSTEMD @@ -99,6 +101,9 @@  #ifdef HAVE_NETDB_H  #include <netdb.h>  #endif +#ifdef USE_CACHEDB +#include "cachedb/cachedb.h" +#endif  /** How many quit requests happened. */  static int sig_record_quit = 0; @@ -260,6 +265,7 @@ daemon_init(void)  		free(daemon);  		return NULL;  	} +	daemon->env->modstack = &daemon->mods;  	/* init edns_known_options */  	if(!edns_known_options_init(daemon->env)) {  		free(daemon->env); @@ -321,17 +327,15 @@ static int setup_acl_for_ports(struct acl_list* list,  	struct listen_port* port_list)  {  	struct acl_addr* acl_node; -	struct addrinfo* addr;  	for(; port_list; port_list=port_list->next) {  		if(!port_list->socket) {  			/* This is mainly for testbound where port_list is  			 * empty. */  			continue;  		} -		addr = port_list->socket->addr;  		if(!(acl_node = acl_interface_insert(list, -			(struct sockaddr_storage*)addr->ai_addr, -			(socklen_t)addr->ai_addrlen, +			(struct sockaddr_storage*)port_list->socket->addr, +			port_list->socket->addrlen,  			acl_refuse))) {  			return 0;  		} @@ -716,6 +720,12 @@ daemon_fork(struct daemon* daemon)  		fatal_exit("Could not create local zones: out of memory");  	if(!local_zones_apply_cfg(daemon->local_zones, daemon->cfg))  		fatal_exit("Could not set up local zones"); +	if(!(daemon->env->fwds = forwards_create()) || +		!forwards_apply_cfg(daemon->env->fwds, daemon->cfg)) +		fatal_exit("Could not set forward zones"); +	if(!(daemon->env->hints = hints_create()) || +		!hints_apply_cfg(daemon->env->hints, daemon->cfg)) +		fatal_exit("Could not set root or stub hints");  	/* process raw response-ip configuration data */  	if(!(daemon->respip_set = respip_set_create())) @@ -740,6 +750,10 @@ daemon_fork(struct daemon* daemon)  	if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg))  		fatal_exit("Could not set up EDNS strings"); +#ifdef USE_CACHEDB +	daemon->env->cachedb_enabled = cachedb_is_enabled(&daemon->mods, +		daemon->env); +#endif  	/* response-ip-xxx options don't work as expected without the respip  	 * module.  To avoid run-time operational surprise we reject such  	 * configuration. */ @@ -832,6 +846,10 @@ daemon_cleanup(struct daemon* daemon)  		slabhash_clear(daemon->env->msg_cache);  	}  	daemon->old_num = daemon->num; /* save the current num */ +	forwards_delete(daemon->env->fwds); +	daemon->env->fwds = NULL; +	hints_delete(daemon->env->hints); +	daemon->env->hints = NULL;  	local_zones_delete(daemon->local_zones);  	daemon->local_zones = NULL;  	respip_set_delete(daemon->respip_set);  | 
