Home | History | Annotate | Line # | Download | only in daemon
      1 /*
      2  * daemon/daemon.c - collection of workers that handles requests.
      3  *
      4  * Copyright (c) 2007, NLnet Labs. All rights reserved.
      5  *
      6  * This software is open source.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  *
     12  * Redistributions of source code must retain the above copyright notice,
     13  * this list of conditions and the following disclaimer.
     14  *
     15  * Redistributions in binary form must reproduce the above copyright notice,
     16  * this list of conditions and the following disclaimer in the documentation
     17  * and/or other materials provided with the distribution.
     18  *
     19  * Neither the name of the NLNET LABS nor the names of its contributors may
     20  * be used to endorse or promote products derived from this software without
     21  * specific prior written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     27  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
     29  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     30  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     31  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     34  */
     35 
     36 /**
     37  * \file
     38  *
     39  * The daemon consists of global settings and a number of workers.
     40  */
     41 
     42 #include "config.h"
     43 #ifdef HAVE_OPENSSL_ERR_H
     44 #include <openssl/err.h>
     45 #endif
     46 
     47 #ifdef HAVE_OPENSSL_RAND_H
     48 #include <openssl/rand.h>
     49 #endif
     50 
     51 #ifdef HAVE_OPENSSL_CONF_H
     52 #include <openssl/conf.h>
     53 #endif
     54 
     55 #ifdef HAVE_OPENSSL_ENGINE_H
     56 #include <openssl/engine.h>
     57 #endif
     58 
     59 #ifdef HAVE_TIME_H
     60 #include <time.h>
     61 #endif
     62 #include <sys/time.h>
     63 
     64 #ifdef HAVE_NSS
     65 /* nss3 */
     66 #include "nss.h"
     67 #endif
     68 
     69 #include "daemon/daemon.h"
     70 #include "daemon/worker.h"
     71 #include "daemon/remote.h"
     72 #include "daemon/acl_list.h"
     73 #include "util/log.h"
     74 #include "util/config_file.h"
     75 #include "util/data/msgreply.h"
     76 #include "util/shm_side/shm_main.h"
     77 #include "util/storage/lookup3.h"
     78 #include "util/storage/slabhash.h"
     79 #include "util/tcp_conn_limit.h"
     80 #include "util/edns.h"
     81 #include "services/listen_dnsport.h"
     82 #include "services/outside_network.h"
     83 #include "services/cache/rrset.h"
     84 #include "services/cache/infra.h"
     85 #include "services/localzone.h"
     86 #include "services/view.h"
     87 #include "services/modstack.h"
     88 #include "services/authzone.h"
     89 #include "util/module.h"
     90 #include "util/random.h"
     91 #include "util/tube.h"
     92 #include "util/net_help.h"
     93 #include "sldns/keyraw.h"
     94 #include "respip/respip.h"
     95 #include "iterator/iter_fwd.h"
     96 #include "iterator/iter_hints.h"
     97 #include <signal.h>
     98 
     99 #ifdef HAVE_SYSTEMD
    100 #include <systemd/sd-daemon.h>
    101 #endif
    102 #ifdef HAVE_NETDB_H
    103 #include <netdb.h>
    104 #endif
    105 #ifdef USE_CACHEDB
    106 #include "cachedb/cachedb.h"
    107 #endif
    108 
    109 /** How many quit requests happened. */
    110 static int sig_record_quit = 0;
    111 /** How many reload requests happened. */
    112 static int sig_record_reload = 0;
    113 
    114 #if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS
    115 /** cleaner ssl memory freeup */
    116 static void* comp_meth = NULL;
    117 #endif
    118 /** remove buffers for parsing and init */
    119 int ub_c_lex_destroy(void);
    120 
    121 /** used when no other sighandling happens, so we don't die
    122   * when multiple signals in quick succession are sent to us.
    123   * @param sig: signal number.
    124   * @return signal handler return type (void or int).
    125   */
    126 static RETSIGTYPE record_sigh(int sig)
    127 {
    128 #ifdef LIBEVENT_SIGNAL_PROBLEM
    129 	/* cannot log, verbose here because locks may be held */
    130 	/* quit on signal, no cleanup and statistics,
    131 	   because installed libevent version is not threadsafe */
    132 	exit(0);
    133 #endif
    134 	switch(sig)
    135 	{
    136 		case SIGTERM:
    137 #ifdef SIGQUIT
    138 		case SIGQUIT:
    139 #endif
    140 #ifdef SIGBREAK
    141 		case SIGBREAK:
    142 #endif
    143 		case SIGINT:
    144 			sig_record_quit++;
    145 			break;
    146 #ifdef SIGHUP
    147 		case SIGHUP:
    148 			sig_record_reload++;
    149 			break;
    150 #endif
    151 #ifdef SIGPIPE
    152 		case SIGPIPE:
    153 			break;
    154 #endif
    155 		default:
    156 			/* ignoring signal */
    157 			break;
    158 	}
    159 }
    160 
    161 /**
    162  * Signal handling during the time when netevent is disabled.
    163  * Stores signals to replay later.
    164  */
    165 static void
    166 signal_handling_record(void)
    167 {
    168 	if( signal(SIGTERM, record_sigh) == SIG_ERR ||
    169 #ifdef SIGQUIT
    170 		signal(SIGQUIT, record_sigh) == SIG_ERR ||
    171 #endif
    172 #ifdef SIGBREAK
    173 		signal(SIGBREAK, record_sigh) == SIG_ERR ||
    174 #endif
    175 #ifdef SIGHUP
    176 		signal(SIGHUP, record_sigh) == SIG_ERR ||
    177 #endif
    178 #ifdef SIGPIPE
    179 		signal(SIGPIPE, SIG_IGN) == SIG_ERR ||
    180 #endif
    181 		signal(SIGINT, record_sigh) == SIG_ERR
    182 		)
    183 		log_err("install sighandler: %s", strerror(errno));
    184 }
    185 
    186 /**
    187  * Replay old signals.
    188  * @param wrk: worker that handles signals.
    189  */
    190 static void
    191 signal_handling_playback(struct worker* wrk)
    192 {
    193 #ifdef SIGHUP
    194 	if(sig_record_reload)
    195 		worker_sighandler(SIGHUP, wrk);
    196 #endif
    197 	if(sig_record_quit)
    198 		worker_sighandler(SIGTERM, wrk);
    199 	sig_record_quit = 0;
    200 	sig_record_reload = 0;
    201 }
    202 
    203 #ifdef HAVE_SSL
    204 /* setup a listening ssl context, fatal_exit() on any failure */
    205 static void
    206 setup_listen_sslctx(void** ctx, int is_dot, int is_doh,
    207 	struct config_file* cfg, char* chroot)
    208 {
    209 	char* key = cfg->ssl_service_key;
    210 	char* pem = cfg->ssl_service_pem;
    211 	if(chroot && strncmp(key, chroot, strlen(chroot)) == 0)
    212 		key += strlen(chroot);
    213 	if(chroot && pem && strncmp(pem, chroot, strlen(chroot)) == 0)
    214 		pem += strlen(chroot);
    215 	if(!(*ctx = listen_sslctx_create(key, pem, NULL,
    216 		cfg->tls_ciphers, cfg->tls_ciphersuites,
    217 		(cfg->tls_session_ticket_keys.first &&
    218 		cfg->tls_session_ticket_keys.first->str[0] != 0),
    219 		is_dot, is_doh, cfg->tls_protocols))) {
    220 		log_err("could not set up listen SSL_CTX");
    221 		*ctx = NULL;
    222 	}
    223 }
    224 #endif /* HAVE_SSL */
    225 
    226 #ifdef HAVE_SSL
    227 void* daemon_setup_listen_dot_sslctx(struct daemon* daemon,
    228 	struct config_file* cfg)
    229 {
    230 	void* ctx;
    231 	(void)setup_listen_sslctx(&ctx, 1, 0, cfg, daemon->chroot);
    232 	return ctx;
    233 }
    234 #endif /* HAVE_SSL */
    235 
    236 #ifdef HAVE_SSL
    237 #ifdef HAVE_NGHTTP2_NGHTTP2_H
    238 void* daemon_setup_listen_doh_sslctx(struct daemon* daemon,
    239 	struct config_file* cfg)
    240 {
    241 	void* ctx;
    242 	(void)setup_listen_sslctx(&ctx, 0, 1, cfg, daemon->chroot);
    243 	return ctx;
    244 }
    245 #endif /* HAVE_NGHTTP2_NGHTTP2_H */
    246 #endif /* HAVE_SSL */
    247 
    248 #ifdef HAVE_SSL
    249 #ifdef HAVE_NGTCP2
    250 void* daemon_setup_listen_quic_sslctx(struct daemon* daemon,
    251 	struct config_file* cfg)
    252 {
    253 	void* ctx;
    254 	char* chroot = daemon->chroot;
    255 	char* key = cfg->ssl_service_key;
    256 	char* pem = cfg->ssl_service_pem;
    257 	if(chroot && strncmp(key, chroot, strlen(chroot)) == 0)
    258 		key += strlen(chroot);
    259 	if(chroot && pem && strncmp(pem, chroot, strlen(chroot)) == 0)
    260 		pem += strlen(chroot);
    261 
    262 	if(!(ctx = quic_sslctx_create(key, pem, NULL))) {
    263 		log_err("could not set up quic SSL_CTX");
    264 		return NULL;
    265 	}
    266 	return ctx;
    267 }
    268 #endif /* HAVE_NGTCP2 */
    269 #endif /* HAVE_SSL */
    270 
    271 #ifdef HAVE_SSL
    272 void* daemon_setup_connect_dot_sslctx(struct daemon* daemon,
    273 	struct config_file* cfg)
    274 {
    275 	void* ctx;
    276 	char* bundle, *chroot = daemon->chroot;
    277 	bundle = cfg->tls_cert_bundle;
    278 	if(chroot && bundle && strncmp(bundle, chroot, strlen(chroot)) == 0)
    279 		bundle += strlen(chroot);
    280 
    281 	if(!(ctx = connect_sslctx_create(NULL, NULL, bundle,
    282 		cfg->tls_win_cert))) {
    283 		log_err("could not set up connect SSL_CTX");
    284 		return NULL;
    285 	}
    286 	return ctx;
    287 }
    288 #endif /* HAVE_SSL */
    289 
    290 /* setups the needed ssl contexts, fatal_exit() on any failure */
    291 void
    292 daemon_setup_sslctxs(struct daemon* daemon, struct config_file* cfg)
    293 {
    294 #ifdef HAVE_SSL
    295 	char* chroot = daemon->chroot;
    296 	if(cfg->ssl_service_key && cfg->ssl_service_key[0]) {
    297 		char* key = cfg->ssl_service_key;
    298 		char* pem = cfg->ssl_service_pem;
    299 		if(chroot && strncmp(key, chroot, strlen(chroot)) == 0)
    300 			key += strlen(chroot);
    301 		if(chroot && pem && strncmp(pem, chroot, strlen(chroot)) == 0)
    302 			pem += strlen(chroot);
    303 
    304 		/* setup the session keys; the callback to use them will be
    305 		 * attached to each sslctx separately */
    306 		if(cfg->tls_session_ticket_keys.first &&
    307 			cfg->tls_session_ticket_keys.first->str[0] != 0) {
    308 			if(!listen_sslctx_setup_ticket_keys(
    309 				cfg->tls_session_ticket_keys.first, chroot)) {
    310 				fatal_exit("could not set session ticket SSL_CTX");
    311 			}
    312 		}
    313 		daemon->listen_dot_sslctx = daemon_setup_listen_dot_sslctx(
    314 			daemon, cfg);
    315 		if(!daemon->listen_dot_sslctx)
    316 			fatal_exit("Could not set up listen dot sslctx");
    317 #ifdef HAVE_NGHTTP2_NGHTTP2_H
    318 		if(cfg_has_https(cfg)) {
    319 			daemon->listen_doh_sslctx =
    320 				daemon_setup_listen_doh_sslctx(daemon, cfg);
    321 			if(!daemon->listen_doh_sslctx)
    322 				fatal_exit("Could not set up listen doh sslctx");
    323 		}
    324 #endif
    325 #ifdef HAVE_NGTCP2
    326 		if(cfg_has_quic(cfg)) {
    327 			daemon->listen_quic_sslctx =
    328 				daemon_setup_listen_quic_sslctx(daemon, cfg);
    329 			if(!daemon->listen_quic_sslctx)
    330 				fatal_exit("Could not set up listen quic sslctx");
    331 		}
    332 #endif /* HAVE_NGTCP2 */
    333 
    334 		/* Store the file name and mtime to detect changes later. */
    335 		daemon->ssl_service_key = strdup(cfg->ssl_service_key);
    336 		if(!daemon->ssl_service_key)
    337 			fatal_exit("could not setup ssl ctx: out of memory");
    338 		if(cfg->ssl_service_pem) {
    339 			daemon->ssl_service_pem = strdup(cfg->ssl_service_pem);
    340 			if(!daemon->ssl_service_pem)
    341 				fatal_exit("could not setup ssl ctx: out of memory");
    342 		} else {
    343 			daemon->ssl_service_pem = NULL;
    344 		}
    345 		if(!file_get_mtime(key,
    346 			&daemon->mtime_ssl_service_key,
    347 			&daemon->mtime_ns_ssl_service_key, NULL))
    348 			log_err("Could not stat(%s): %s",
    349 				key, strerror(errno));
    350 		if(pem) {
    351 			if(!file_get_mtime(pem,
    352 				&daemon->mtime_ssl_service_pem,
    353 				&daemon->mtime_ns_ssl_service_pem, NULL))
    354 				log_err("Could not stat(%s): %s",
    355 					pem, strerror(errno));
    356 		} else {
    357 			daemon->mtime_ssl_service_pem = 0;
    358 			daemon->mtime_ns_ssl_service_pem = 0;
    359 		}
    360 	}
    361 	daemon->connect_dot_sslctx = daemon_setup_connect_dot_sslctx(
    362 		daemon, cfg);
    363 	if(!daemon->connect_dot_sslctx)
    364 		fatal_exit("could not setup connect dot sslctx");
    365 #else /* HAVE_SSL */
    366 	(void)daemon;(void)cfg;
    367 #endif /* HAVE_SSL */
    368 }
    369 
    370 /** Delete the ssl ctxs */
    371 static void
    372 daemon_delete_sslctxs(struct daemon* daemon)
    373 {
    374 #ifdef HAVE_SSL
    375 	listen_sslctx_delete_ticket_keys();
    376 	SSL_CTX_free((SSL_CTX*)daemon->listen_dot_sslctx);
    377 	daemon->listen_dot_sslctx = NULL;
    378 	SSL_CTX_free((SSL_CTX*)daemon->listen_doh_sslctx);
    379 	daemon->listen_doh_sslctx = NULL;
    380 	SSL_CTX_free((SSL_CTX*)daemon->connect_dot_sslctx);
    381 	daemon->connect_dot_sslctx = NULL;
    382 	free(daemon->ssl_service_key);
    383 	daemon->ssl_service_key = NULL;
    384 	free(daemon->ssl_service_pem);
    385 	daemon->ssl_service_pem = NULL;
    386 #else
    387 	(void)daemon;
    388 #endif
    389 #ifdef HAVE_NGTCP2
    390 	SSL_CTX_free((SSL_CTX*)daemon->listen_quic_sslctx);
    391 	daemon->listen_quic_sslctx = NULL;
    392 #endif
    393 }
    394 
    395 int
    396 ssl_cert_changed(struct daemon* daemon, struct config_file* cfg)
    397 {
    398 	time_t mtime = 0;
    399 	long ns = 0;
    400 	char* chroot = daemon->chroot;
    401 	char* key = cfg->ssl_service_key;
    402 	char* pem = cfg->ssl_service_pem;
    403 	log_assert(daemon->ssl_service_key && cfg->ssl_service_key);
    404 	if(chroot && strncmp(key, chroot, strlen(chroot)) == 0)
    405 		key += strlen(chroot);
    406 	if(chroot && pem && strncmp(pem, chroot, strlen(chroot)) == 0)
    407 		pem += strlen(chroot);
    408 
    409 	if(strcmp(daemon->ssl_service_key, cfg->ssl_service_key) != 0)
    410 		return 1;
    411 	if(daemon->ssl_service_pem && cfg->ssl_service_pem &&
    412 	   strcmp(daemon->ssl_service_pem, cfg->ssl_service_pem) != 0)
    413 		return 1;
    414 	if(!file_get_mtime(key, &mtime, &ns, NULL)) {
    415 		log_err("Could not stat(%s): %s",
    416 			key, strerror(errno));
    417 		/* It has probably changed, but file read is likely going to
    418 		 * fail. */
    419 		return 0;
    420 	}
    421 	if(mtime != daemon->mtime_ssl_service_key ||
    422 		ns != daemon->mtime_ns_ssl_service_key)
    423 		return 1;
    424 	if(pem) {
    425 		if(!file_get_mtime(pem, &mtime, &ns, NULL)) {
    426 			log_err("Could not stat(%s): %s",
    427 				pem, strerror(errno));
    428 			/* It has probably changed, but file read is likely going to
    429 			 * fail. */
    430 			return 0;
    431 		}
    432 		if(mtime != daemon->mtime_ssl_service_pem ||
    433 			ns != daemon->mtime_ns_ssl_service_pem)
    434 			return 1;
    435 	}
    436 	return 0;
    437 }
    438 
    439 /** Reload the sslctxs if they have changed */
    440 static void
    441 daemon_reload_sslctxs(struct daemon* daemon)
    442 {
    443 #ifdef HAVE_SSL
    444 	if(daemon->cfg->ssl_service_key && daemon->cfg->ssl_service_key[0]) {
    445 		/* See if changed */
    446 		if(!daemon->ssl_service_key ||
    447 			ssl_cert_changed(daemon,daemon->cfg)) {
    448 			verbose(VERB_ALGO, "Reloading certificates");
    449 			daemon_delete_sslctxs(daemon);
    450 			daemon_setup_sslctxs(daemon, daemon->cfg);
    451 		}
    452 	} else {
    453 		/* See if sslctxs are removed from config. */
    454 		if(daemon->ssl_service_key) {
    455 			verbose(VERB_ALGO, "Removing certificates");
    456 			daemon_delete_sslctxs(daemon);
    457 		}
    458 	}
    459 #else
    460 	(void)daemon;
    461 #endif
    462 }
    463 
    464 struct daemon*
    465 daemon_init(void)
    466 {
    467 	struct daemon* daemon = (struct daemon*)calloc(1,
    468 		sizeof(struct daemon));
    469 #ifdef USE_WINSOCK
    470 	int r;
    471 	WSADATA wsa_data;
    472 #endif
    473 	if(!daemon)
    474 		return NULL;
    475 #ifdef USE_WINSOCK
    476 	r = WSAStartup(MAKEWORD(2,2), &wsa_data);
    477 	if(r != 0) {
    478 		fatal_exit("could not init winsock. WSAStartup: %s",
    479 			wsa_strerror(r));
    480 	}
    481 #endif /* USE_WINSOCK */
    482 	signal_handling_record();
    483 #ifdef HAVE_SSL
    484 #  ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS
    485 	ERR_load_crypto_strings();
    486 #  endif
    487 #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL)
    488 	ERR_load_SSL_strings();
    489 #endif
    490 #  ifdef USE_GOST
    491 	(void)sldns_key_EVP_load_gost_id();
    492 #  endif
    493 #  if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO)
    494 #    ifndef S_SPLINT_S
    495 	OpenSSL_add_all_algorithms();
    496 #    endif
    497 #  else
    498 	OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS
    499 		| OPENSSL_INIT_ADD_ALL_DIGESTS
    500 		| OPENSSL_INIT_LOAD_CRYPTO_STRINGS
    501 #    if defined(OPENSSL_INIT_NO_LOAD_CONFIG) && defined(UB_ON_WINDOWS)
    502 		| OPENSSL_INIT_NO_LOAD_CONFIG
    503 #    endif
    504 		, NULL);
    505 #  endif
    506 #  if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS
    507 	/* grab the COMP method ptr because openssl leaks it */
    508 	comp_meth = (void*)SSL_COMP_get_compression_methods();
    509 #  endif
    510 #  if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL)
    511 	(void)SSL_library_init();
    512 #  else
    513 	(void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS
    514 #    if defined(OPENSSL_INIT_NO_LOAD_CONFIG) && defined(UB_ON_WINDOWS)
    515 		| OPENSSL_INIT_NO_LOAD_CONFIG
    516 #    endif
    517 		, NULL);
    518 #  endif
    519 #  if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
    520 	if(!ub_openssl_lock_init())
    521 		fatal_exit("could not init openssl locks");
    522 #  endif
    523 #elif defined(HAVE_NSS)
    524 	if(NSS_NoDB_Init(NULL) != SECSuccess)
    525 		fatal_exit("could not init NSS");
    526 #endif /* HAVE_SSL or HAVE_NSS */
    527 #ifdef HAVE_TZSET
    528 	/* init timezone info while we are not chrooted yet */
    529 	tzset();
    530 #endif
    531 	daemon->need_to_exit = 0;
    532 	modstack_init(&daemon->mods);
    533 	if(!(daemon->env = (struct module_env*)calloc(1,
    534 		sizeof(*daemon->env)))) {
    535 		free(daemon);
    536 		return NULL;
    537 	}
    538 	daemon->env->modstack = &daemon->mods;
    539 	/* init edns_known_options */
    540 	if(!edns_known_options_init(daemon->env)) {
    541 		free(daemon->env);
    542 		free(daemon);
    543 		return NULL;
    544 	}
    545 	alloc_init(&daemon->superalloc, NULL, 0);
    546 	daemon->acl = acl_list_create();
    547 	if(!daemon->acl) {
    548 		edns_known_options_delete(daemon->env);
    549 		free(daemon->env);
    550 		free(daemon);
    551 		return NULL;
    552 	}
    553 	daemon->acl_interface = acl_list_create();
    554 	if(!daemon->acl_interface) {
    555 		acl_list_delete(daemon->acl);
    556 		edns_known_options_delete(daemon->env);
    557 		free(daemon->env);
    558 		free(daemon);
    559 		return NULL;
    560 	}
    561 	daemon->tcl = tcl_list_create();
    562 	if(!daemon->tcl) {
    563 		acl_list_delete(daemon->acl_interface);
    564 		acl_list_delete(daemon->acl);
    565 		edns_known_options_delete(daemon->env);
    566 		free(daemon->env);
    567 		free(daemon);
    568 		return NULL;
    569 	}
    570 	listen_setup_locks();
    571 	if(gettimeofday(&daemon->time_boot, NULL) < 0)
    572 		log_err("gettimeofday: %s", strerror(errno));
    573 	daemon->time_last_stat = daemon->time_boot;
    574 	if((daemon->env->auth_zones = auth_zones_create()) == 0) {
    575 		acl_list_delete(daemon->acl_interface);
    576 		acl_list_delete(daemon->acl);
    577 		tcl_list_delete(daemon->tcl);
    578 		edns_known_options_delete(daemon->env);
    579 		free(daemon->env);
    580 		free(daemon);
    581 		return NULL;
    582 	}
    583 	if(!(daemon->env->edns_strings = edns_strings_create())) {
    584 		auth_zones_delete(daemon->env->auth_zones);
    585 		acl_list_delete(daemon->acl_interface);
    586 		acl_list_delete(daemon->acl);
    587 		tcl_list_delete(daemon->tcl);
    588 		edns_known_options_delete(daemon->env);
    589 		free(daemon->env);
    590 		free(daemon);
    591 		return NULL;
    592 	}
    593 	return daemon;
    594 }
    595 
    596 int setup_acl_for_ports(struct acl_list* list, struct listen_port* port_list)
    597 {
    598 	struct acl_addr* acl_node;
    599 	for(; port_list; port_list=port_list->next) {
    600 		if(!port_list->socket) {
    601 			/* This is mainly for testbound where port_list is
    602 			 * empty. */
    603 			continue;
    604 		}
    605 		if(!(acl_node = acl_interface_insert(list,
    606 			(struct sockaddr_storage*)port_list->socket->addr,
    607 			port_list->socket->addrlen,
    608 			acl_refuse))) {
    609 			return 0;
    610 		}
    611 		port_list->socket->acl = acl_node;
    612 	}
    613 	return 1;
    614 }
    615 
    616 int
    617 daemon_open_shared_ports(struct daemon* daemon)
    618 {
    619 	log_assert(daemon);
    620 	if(daemon->cfg->port != daemon->listening_port) {
    621 		char** resif = NULL;
    622 		int num_resif = 0;
    623 		size_t i;
    624 		struct listen_port* p0;
    625 		daemon->reuseport = 0;
    626 		/* free and close old ports */
    627 		if(daemon->ports != NULL) {
    628 			for(i=0; i<daemon->num_ports; i++)
    629 				listening_ports_free(daemon->ports[i]);
    630 			free(daemon->ports);
    631 			daemon->ports = NULL;
    632 		}
    633 		/* clean acl_interface */
    634 		acl_interface_init(daemon->acl_interface);
    635 		if(!resolve_interface_names(daemon->cfg->ifs,
    636 			daemon->cfg->num_ifs, NULL, &resif, &num_resif))
    637 			return 0;
    638 		/* see if we want to reuseport */
    639 #ifdef SO_REUSEPORT
    640 		if(daemon->cfg->so_reuseport && daemon->cfg->num_threads > 0)
    641 			daemon->reuseport = 1;
    642 #endif
    643 		/* try to use reuseport */
    644 		p0 = listening_ports_open(daemon->cfg, resif, num_resif,
    645 			&daemon->reuseport);
    646 		if(!p0) {
    647 			listening_ports_free(p0);
    648 			config_del_strarray(resif, num_resif);
    649 			return 0;
    650 		}
    651 		if(daemon->reuseport) {
    652 			/* reuseport was successful, allocate for it */
    653 			daemon->num_ports = (size_t)daemon->cfg->num_threads;
    654 		} else {
    655 			/* do the normal, singleportslist thing,
    656 			 * reuseport not enabled or did not work */
    657 			daemon->num_ports = 1;
    658 		}
    659 		if(!(daemon->ports = (struct listen_port**)calloc(
    660 			daemon->num_ports, sizeof(*daemon->ports)))) {
    661 			listening_ports_free(p0);
    662 			config_del_strarray(resif, num_resif);
    663 			return 0;
    664 		}
    665 		daemon->ports[0] = p0;
    666 		if(!setup_acl_for_ports(daemon->acl_interface,
    667 		    daemon->ports[0])) {
    668 			listening_ports_free(p0);
    669 			config_del_strarray(resif, num_resif);
    670 			return 0;
    671 		}
    672 		if(daemon->reuseport) {
    673 			/* continue to use reuseport */
    674 			for(i=1; i<daemon->num_ports; i++) {
    675 				if(!(daemon->ports[i]=
    676 					listening_ports_open(daemon->cfg,
    677 						resif, num_resif,
    678 						&daemon->reuseport))
    679 					|| !daemon->reuseport ) {
    680 					for(i=0; i<daemon->num_ports; i++)
    681 						listening_ports_free(daemon->ports[i]);
    682 					free(daemon->ports);
    683 					daemon->ports = NULL;
    684 					config_del_strarray(resif, num_resif);
    685 					return 0;
    686 				}
    687 				if(!setup_acl_for_ports(daemon->acl_interface,
    688 					daemon->ports[i])) {
    689 					for(i=0; i<daemon->num_ports; i++)
    690 						listening_ports_free(daemon->ports[i]);
    691 					free(daemon->ports);
    692 					daemon->ports = NULL;
    693 					config_del_strarray(resif, num_resif);
    694 					return 0;
    695 				}
    696 			}
    697 		}
    698 		config_del_strarray(resif, num_resif);
    699 		daemon->listening_port = daemon->cfg->port;
    700 	}
    701 	if(!daemon->cfg->remote_control_enable && daemon->rc_port) {
    702 		listening_ports_free(daemon->rc_ports);
    703 		daemon->rc_ports = NULL;
    704 		daemon->rc_port = 0;
    705 	}
    706 	if(daemon->cfg->remote_control_enable &&
    707 		daemon->cfg->control_port != daemon->rc_port) {
    708 		listening_ports_free(daemon->rc_ports);
    709 		if(!(daemon->rc_ports=daemon_remote_open_ports(daemon->cfg)))
    710 			return 0;
    711 		daemon->rc_port = daemon->cfg->control_port;
    712 	}
    713 	return 1;
    714 }
    715 
    716 int
    717 daemon_privileged(struct daemon* daemon)
    718 {
    719 	daemon->env->cfg = daemon->cfg;
    720 	daemon->env->alloc = &daemon->superalloc;
    721 	daemon->env->worker = NULL;
    722 	if(!modstack_call_startup(&daemon->mods, daemon->cfg->module_conf,
    723 		daemon->env)) {
    724 		fatal_exit("failed to startup modules");
    725 	}
    726 	return 1;
    727 }
    728 
    729 /**
    730  * Setup modules. setup module stack.
    731  * @param daemon: the daemon
    732  */
    733 static void daemon_setup_modules(struct daemon* daemon)
    734 {
    735 	daemon->env->cfg = daemon->cfg;
    736 	daemon->env->alloc = &daemon->superalloc;
    737 	daemon->env->worker = NULL;
    738 	if(daemon->mods_inited) {
    739 		modstack_call_deinit(&daemon->mods, daemon->env);
    740 	}
    741 	daemon->env->need_to_validate = 0; /* set by module init below */
    742 	if(!modstack_call_init(&daemon->mods, daemon->cfg->module_conf,
    743 		daemon->env)) {
    744 		fatal_exit("failed to init modules");
    745 	}
    746 	daemon->mods_inited = 1;
    747 	log_edns_known_options(VERB_ALGO, daemon->env);
    748 }
    749 
    750 /**
    751  * Obtain allowed port numbers, concatenate the list, and shuffle them
    752  * (ready to be handed out to threads).
    753  * @param daemon: the daemon. Uses rand and cfg.
    754  * @param shufport: the portlist output.
    755  * @return number of ports available.
    756  */
    757 static int daemon_get_shufport(struct daemon* daemon, int* shufport)
    758 {
    759 	int i, n, k, temp;
    760 	int avail = 0;
    761 	for(i=0; i<65536; i++) {
    762 		if(daemon->cfg->outgoing_avail_ports[i]) {
    763 			shufport[avail++] = daemon->cfg->
    764 				outgoing_avail_ports[i];
    765 		}
    766 	}
    767 	if(avail == 0)
    768 		fatal_exit("no ports are permitted for UDP, add "
    769 			"with outgoing-port-permit");
    770         /* Knuth shuffle */
    771 	n = avail;
    772 	while(--n > 0) {
    773 		k = ub_random_max(daemon->rand, n+1); /* 0<= k<= n */
    774 		temp = shufport[k];
    775 		shufport[k] = shufport[n];
    776 		shufport[n] = temp;
    777 	}
    778 	return avail;
    779 }
    780 
    781 /**
    782  * Clear and delete per-worker alloc caches, and free memory maintained in
    783  * superalloc.
    784  * The rrset and message caches must be empty at the time of call.
    785  * @param daemon: the daemon that maintains the alloc caches to be cleared.
    786  */
    787 static void
    788 daemon_clear_allocs(struct daemon* daemon)
    789 {
    790 	int i;
    791 
    792 	/* daemon->num may be different during reloads (after configuration
    793 	 * read). Use old_num which has the correct value used to setup the
    794 	 * worker_allocs */
    795 	for(i=0; i<daemon->old_num; i++) {
    796 		alloc_clear(daemon->worker_allocs[i]);
    797 		free(daemon->worker_allocs[i]);
    798 	}
    799 	free(daemon->worker_allocs);
    800 	daemon->worker_allocs = NULL;
    801 
    802 	alloc_clear_special(&daemon->superalloc);
    803 }
    804 
    805 /**
    806  * Allocate empty worker structures. With backptr and thread-number,
    807  * from 0..numthread initialised. Used as user arguments to new threads.
    808  * Creates the daemon random generator if it does not exist yet.
    809  * The random generator stays existing between reloads with a unique state.
    810  * @param daemon: the daemon with (new) config settings.
    811  */
    812 static void
    813 daemon_create_workers(struct daemon* daemon)
    814 {
    815 	int i, numport;
    816 	int* shufport;
    817 	log_assert(daemon && daemon->cfg);
    818 	if(!daemon->rand) {
    819 		daemon->rand = ub_initstate(NULL);
    820 		if(!daemon->rand)
    821 			fatal_exit("could not init random generator");
    822 		hash_set_raninit((uint32_t)ub_random(daemon->rand));
    823 	}
    824 	shufport = (int*)calloc(65536, sizeof(int));
    825 	if(!shufport)
    826 		fatal_exit("out of memory during daemon init");
    827 	numport = daemon_get_shufport(daemon, shufport);
    828 	verbose(VERB_ALGO, "total of %d outgoing ports available", numport);
    829 	if(!(daemon->shared_ports = shared_ports_create(daemon->cfg->out_ifs,
    830 		daemon->cfg->num_out_ifs, daemon->cfg->do_ip4,
    831 		daemon->cfg->do_ip6, shufport, numport)))
    832 		fatal_exit("could not setup shared ports: out of memory");
    833 
    834 #ifdef HAVE_NGTCP2
    835 	if (cfg_has_quic(daemon->cfg)) {
    836 		daemon->doq_table = doq_table_create(daemon->cfg, daemon->rand);
    837 		if(!daemon->doq_table)
    838 			fatal_exit("could not create doq_table: out of memory");
    839 	}
    840 #endif
    841 
    842 	daemon->num = (daemon->cfg->num_threads?daemon->cfg->num_threads:1);
    843 	if(daemon->reuseport && (int)daemon->num < (int)daemon->num_ports) {
    844 		log_warn("cannot reduce num-threads to %d because so-reuseport "
    845 			"so continuing with %d threads.", (int)daemon->num,
    846 			(int)daemon->num_ports);
    847 		daemon->num = (int)daemon->num_ports;
    848 	}
    849 	daemon->workers = (struct worker**)calloc((size_t)daemon->num,
    850 		sizeof(struct worker*));
    851 	if(!daemon->workers)
    852 		fatal_exit("out of memory during daemon init");
    853 	if(daemon->cfg->dnstap) {
    854 #ifdef USE_DNSTAP
    855 		daemon->dtenv = dt_create(daemon->cfg);
    856 		if (!daemon->dtenv)
    857 			fatal_exit("dt_create failed");
    858 #else
    859 		fatal_exit("dnstap enabled in config but not built with dnstap support");
    860 #endif
    861 	}
    862 	for(i=0; i<daemon->num; i++) {
    863 		if(!(daemon->workers[i] = worker_create(daemon, i)))
    864 			fatal_exit("could not create worker");
    865 	}
    866 	/* create per-worker alloc caches if not reusing existing ones. */
    867 	if(!daemon->worker_allocs) {
    868 		daemon->worker_allocs = (struct alloc_cache**)calloc(
    869 			(size_t)daemon->num, sizeof(struct alloc_cache*));
    870 		if(!daemon->worker_allocs)
    871 			fatal_exit("could not allocate worker allocs");
    872 		for(i=0; i<daemon->num; i++) {
    873 			struct alloc_cache* alloc = calloc(1,
    874 				sizeof(struct alloc_cache));
    875 			if (!alloc)
    876 				fatal_exit("could not allocate worker alloc");
    877 			alloc_init(alloc, &daemon->superalloc, i);
    878 			daemon->worker_allocs[i] = alloc;
    879 		}
    880 	}
    881 	free(shufport);
    882 }
    883 
    884 #ifdef THREADS_DISABLED
    885 /**
    886  * Close all pipes except for the numbered thread.
    887  * @param daemon: daemon to close pipes in.
    888  * @param thr: thread number 0..num-1 of thread to skip.
    889  */
    890 static void close_other_pipes(struct daemon* daemon, int thr)
    891 {
    892 	int i;
    893 	for(i=0; i<daemon->num; i++)
    894 		if(i!=thr) {
    895 			if(i==0) {
    896 				/* only close read part, need to write stats */
    897 				tube_close_read(daemon->workers[i]->cmd);
    898 			} else {
    899 				/* complete close channel to others */
    900 				tube_delete(daemon->workers[i]->cmd);
    901 				daemon->workers[i]->cmd = NULL;
    902 			}
    903 		}
    904 }
    905 #endif /* THREADS_DISABLED */
    906 
    907 /**
    908  * Function to set the thread local log ID.
    909  * Either the internal thread number, or the LWP ID on Linux based on
    910  * configuration.
    911  */
    912 static void
    913 set_log_thread_id(struct worker* worker, struct config_file* cfg)
    914 {
    915 	(void)cfg;
    916 	log_assert(worker);
    917 #if defined(HAVE_GETTID) && !defined(THREADS_DISABLED)
    918 	worker->thread_tid = gettid();
    919 	if(cfg->log_thread_id)
    920 		log_thread_set(&worker->thread_tid);
    921 	else
    922 #endif
    923 		log_thread_set(&worker->thread_num);
    924 }
    925 
    926 /**
    927  * Function to start one thread.
    928  * @param arg: user argument.
    929  * @return: void* user return value could be used for thread_join results.
    930  */
    931 static void*
    932 thread_start(void* arg)
    933 {
    934 	struct worker* worker = (struct worker*)arg;
    935 	int port_num = 0;
    936 	set_log_thread_id(worker, worker->daemon->cfg);
    937 	{
    938 		char name[16]; /* seems to be the safest size between
    939 				  different OSes */
    940 		snprintf(name, sizeof(name), "unbound/%u", worker->thread_num);
    941 		/* worker->thr_id can be written to after the thread was made
    942 		 * by the creating thread, so this uses pthread_self. */
    943 		ub_thread_setname(ub_thread_self(), name);
    944 	}
    945 	ub_thread_blocksigs();
    946 #ifdef THREADS_DISABLED
    947 	/* close pipe ends used by main */
    948 	tube_close_write(worker->cmd);
    949 	close_other_pipes(worker->daemon, worker->thread_num);
    950 #endif
    951 #ifdef SO_REUSEPORT
    952 	if(worker->daemon->cfg->so_reuseport)
    953 		port_num = worker->thread_num % worker->daemon->num_ports;
    954 	else
    955 		port_num = 0;
    956 #endif
    957 	if(!worker_init(worker, worker->daemon->cfg,
    958 			worker->daemon->ports[port_num], 0)) {
    959 		fatal_exit("Could not initialize thread");
    960 	}
    961 
    962 	worker_work(worker);
    963 	return NULL;
    964 }
    965 
    966 /**
    967  * Fork and init the other threads. Main thread returns for special handling.
    968  * @param daemon: the daemon with other threads to fork.
    969  */
    970 static void
    971 daemon_start_others(struct daemon* daemon)
    972 {
    973 	int i;
    974 	log_assert(daemon);
    975 	verbose(VERB_ALGO, "start threads");
    976 	/* skip i=0, is this thread */
    977 	for(i=1; i<daemon->num; i++) {
    978 		ub_thread_create(&daemon->workers[i]->thr_id,
    979 			thread_start, daemon->workers[i]);
    980 #ifdef THREADS_DISABLED
    981 		/* close pipe end of child */
    982 		tube_close_read(daemon->workers[i]->cmd);
    983 #endif /* no threads */
    984 	}
    985 }
    986 
    987 /**
    988  * Stop the other threads.
    989  * @param daemon: the daemon with other threads.
    990  */
    991 static void
    992 daemon_stop_others(struct daemon* daemon)
    993 {
    994 	int i;
    995 	log_assert(daemon);
    996 	verbose(VERB_ALGO, "stop threads");
    997 	/* skip i=0, is this thread */
    998 	/* use i=0 buffer for sending cmds; because we are #0 */
    999 	for(i=1; i<daemon->num; i++) {
   1000 		worker_send_cmd(daemon->workers[i], worker_cmd_quit);
   1001 	}
   1002 	/* wait for them to quit */
   1003 	for(i=1; i<daemon->num; i++) {
   1004 		/* join it to make sure its dead */
   1005 		verbose(VERB_ALGO, "join %d", i);
   1006 		ub_thread_join(daemon->workers[i]->thr_id);
   1007 		verbose(VERB_ALGO, "join success %d", i);
   1008 	}
   1009 }
   1010 
   1011 void
   1012 daemon_fork(struct daemon* daemon)
   1013 {
   1014 	int have_view_respip_cfg = 0;
   1015 #ifdef HAVE_SYSTEMD
   1016 	int ret;
   1017 #endif
   1018 
   1019 	log_assert(daemon);
   1020 	daemon_reload_sslctxs(daemon);
   1021 	if(!(daemon->env->views = views_create()))
   1022 		fatal_exit("Could not create views: out of memory");
   1023 	/* create individual views and their localzone/data trees */
   1024 	if(!views_apply_cfg(daemon->env->views, daemon->cfg))
   1025 		fatal_exit("Could not set up views");
   1026 
   1027 	if(!acl_list_apply_cfg(daemon->acl, daemon->cfg, daemon->env->views))
   1028 		fatal_exit("Could not setup access control list");
   1029 	if(!acl_interface_apply_cfg(daemon->acl_interface, daemon->cfg,
   1030 		daemon->env->views))
   1031 		fatal_exit("Could not setup interface control list");
   1032 	if(!tcl_list_apply_cfg(daemon->tcl, daemon->cfg))
   1033 		fatal_exit("Could not setup TCP connection limits");
   1034 	if(daemon->cfg->dnscrypt) {
   1035 #ifdef USE_DNSCRYPT
   1036 		daemon->dnscenv = dnsc_create();
   1037 		if (!daemon->dnscenv)
   1038 			fatal_exit("dnsc_create failed");
   1039 		dnsc_apply_cfg(daemon->dnscenv, daemon->cfg);
   1040 #else
   1041 		fatal_exit("dnscrypt enabled in config but unbound was not built with "
   1042 				   "dnscrypt support");
   1043 #endif
   1044 	}
   1045 	if(daemon->cfg->cookie_secret_file &&
   1046 		daemon->cfg->cookie_secret_file[0]) {
   1047 		if(!(daemon->cookie_secrets = cookie_secrets_create()))
   1048 			fatal_exit("Could not create cookie_secrets: out of memory");
   1049 		if(!cookie_secrets_apply_cfg(daemon->cookie_secrets,
   1050 			daemon->cfg->cookie_secret_file))
   1051 			fatal_exit("Could not setup cookie_secrets");
   1052 	}
   1053 	/* create global local_zones */
   1054 	if(!(daemon->local_zones = local_zones_create()))
   1055 		fatal_exit("Could not create local zones: out of memory");
   1056 	if(!local_zones_apply_cfg(daemon->local_zones, daemon->cfg))
   1057 		fatal_exit("Could not set up local zones");
   1058 	if(!(daemon->env->fwds = forwards_create()) ||
   1059 		!forwards_apply_cfg(daemon->env->fwds, daemon->cfg))
   1060 		fatal_exit("Could not set forward zones");
   1061 	if(!(daemon->env->hints = hints_create()) ||
   1062 		!hints_apply_cfg(daemon->env->hints, daemon->cfg))
   1063 		fatal_exit("Could not set root or stub hints");
   1064 
   1065 	/* process raw response-ip configuration data */
   1066 	if(!(daemon->env->respip_set = respip_set_create()))
   1067 		fatal_exit("Could not create response IP set");
   1068 	if(!respip_global_apply_cfg(daemon->env->respip_set, daemon->cfg))
   1069 		fatal_exit("Could not set up response IP set");
   1070 	if(!respip_views_apply_cfg(daemon->env->views, daemon->cfg,
   1071 		&have_view_respip_cfg))
   1072 		fatal_exit("Could not set up per-view response IP sets");
   1073 	daemon->use_response_ip = !respip_set_is_empty(
   1074 		daemon->env->respip_set) || have_view_respip_cfg;
   1075 
   1076 	/* setup modules */
   1077 	daemon_setup_modules(daemon);
   1078 
   1079 	/* read auth zonefiles */
   1080 	if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1,
   1081 		&daemon->use_rpz, daemon->env, &daemon->mods))
   1082 		fatal_exit("auth_zones could not be setup");
   1083 
   1084 	/* Set-up EDNS strings */
   1085 	if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg))
   1086 		fatal_exit("Could not set up EDNS strings");
   1087 
   1088 #ifdef USE_CACHEDB
   1089 	daemon->env->cachedb_enabled = cachedb_is_enabled(&daemon->mods,
   1090 		daemon->env);
   1091 #endif
   1092 	/* response-ip-xxx options don't work as expected without the respip
   1093 	 * module.  To avoid run-time operational surprise we reject such
   1094 	 * configuration. */
   1095 	if(daemon->use_response_ip &&
   1096 		modstack_find(&daemon->mods, "respip") < 0)
   1097 		fatal_exit("response-ip options require respip module");
   1098 	/* RPZ response ip triggers don't work as expected without the respip
   1099 	 * module.  To avoid run-time operational surprise we reject such
   1100 	 * configuration. */
   1101 	if(daemon->use_rpz &&
   1102 		modstack_find(&daemon->mods, "respip") < 0)
   1103 		fatal_exit("RPZ requires the respip module");
   1104 
   1105 	/* first create all the worker structures, so we can pass
   1106 	 * them to the newly created threads.
   1107 	 */
   1108 	daemon_create_workers(daemon);
   1109 	/* Set it for the first (main) worker since it does not take part in
   1110 	 * the thread_start() procedure.
   1111 	 */
   1112 	set_log_thread_id(daemon->workers[0], daemon->cfg);
   1113 	/* If shm stats need an offset, calculate it */
   1114 	if(daemon->cfg->shm_enable && daemon->cfg->stat_interval > 0) {
   1115 		daemon->stat_time_specific = 1;
   1116 		daemon->stat_time_offset =
   1117 			((int)time(NULL))%daemon->cfg->stat_interval;
   1118 	}
   1119 
   1120 #if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
   1121 	/* in libev the first inited base gets signals */
   1122 	if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1)) {
   1123 		fatal_exit("Could not initialize main thread");
   1124 	}
   1125 #endif
   1126 
   1127 	/* Now create the threads and init the workers.
   1128 	 * By the way, this is thread #0 (the main thread).
   1129 	 */
   1130 	daemon_start_others(daemon);
   1131 
   1132 	/* Special handling for the main thread. This is the thread
   1133 	 * that handles signals and remote control.
   1134 	 */
   1135 #if !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP))
   1136 	/* libevent has the last inited base get signals (or any base) */
   1137 	if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1)) {
   1138 		fatal_exit("Could not initialize main thread");
   1139 	}
   1140 #endif
   1141 	signal_handling_playback(daemon->workers[0]);
   1142 
   1143 	if (!shm_main_init(daemon))
   1144 		log_warn("SHM has failed");
   1145 
   1146 	/* Start resolver service on main thread. */
   1147 #ifdef HAVE_SYSTEMD
   1148 	ret = sd_notify(0, "READY=1");
   1149 	if(ret <= 0 && getenv("NOTIFY_SOCKET"))
   1150 		fatal_exit("sd_notify failed %s: %s. Make sure that unbound has "
   1151 				"access/permission to use the socket presented by systemd.",
   1152 				getenv("NOTIFY_SOCKET"),
   1153 				(ret==0?"no $NOTIFY_SOCKET": strerror(-ret)));
   1154 #endif
   1155 	log_info("start of service (%s).", PACKAGE_STRING);
   1156 	worker_work(daemon->workers[0]);
   1157 #ifdef HAVE_SYSTEMD
   1158 	if (daemon->workers[0]->need_to_exit)
   1159 		sd_notify(0, "STOPPING=1");
   1160 	else
   1161 		sd_notify(0, "RELOADING=1");
   1162 #endif
   1163 	log_info("service stopped (%s).", PACKAGE_STRING);
   1164 
   1165 	/* we exited! a signal happened! Stop other threads */
   1166 	daemon_stop_others(daemon);
   1167 
   1168 	/* Shutdown SHM */
   1169 	shm_main_shutdown(daemon);
   1170 
   1171 	daemon->reuse_cache = daemon->workers[0]->reuse_cache;
   1172 	daemon->need_to_exit = daemon->workers[0]->need_to_exit;
   1173 }
   1174 
   1175 void
   1176 daemon_cleanup(struct daemon* daemon)
   1177 {
   1178 	int i;
   1179 	log_assert(daemon);
   1180 	/* before stopping main worker, handle signals ourselves, so we
   1181 	   don't die on multiple reload signals for example. */
   1182 	signal_handling_record();
   1183 	/* clean up caches because
   1184 	 * a) RRset IDs will be recycled after a reload, causing collisions
   1185 	 * b) validation config can change, thus rrset, msg, keycache clear
   1186 	 *
   1187 	 * If we are trying to keep the cache as long as possible, we should
   1188 	 * defer the cleanup until we know whether the new configuration allows
   1189 	 * the reuse.  (If we're exiting, cleanup should be done here). */
   1190 	if(!daemon->reuse_cache || daemon->need_to_exit) {
   1191 		slabhash_clear(&daemon->env->rrset_cache->table);
   1192 		slabhash_clear(daemon->env->msg_cache);
   1193 	}
   1194 	daemon->old_num = daemon->num; /* save the current num */
   1195 	forwards_delete(daemon->env->fwds);
   1196 	daemon->env->fwds = NULL;
   1197 	hints_delete(daemon->env->hints);
   1198 	daemon->env->hints = NULL;
   1199 	local_zones_delete(daemon->local_zones);
   1200 	daemon->local_zones = NULL;
   1201 	respip_set_delete(daemon->env->respip_set);
   1202 	daemon->env->respip_set = NULL;
   1203 	views_delete(daemon->env->views);
   1204 	daemon->env->views = NULL;
   1205 	if(daemon->env->auth_zones)
   1206 		auth_zones_cleanup(daemon->env->auth_zones);
   1207 	/* key cache is cleared by module deinit during next daemon_fork() */
   1208 	daemon_remote_clear(daemon->rc);
   1209 	if(daemon->fast_reload_thread)
   1210 		fast_reload_thread_stop(daemon->fast_reload_thread);
   1211 	if(daemon->fast_reload_printq_list)
   1212 		fast_reload_printq_list_delete(daemon->fast_reload_printq_list);
   1213 	for(i=0; i<daemon->num; i++)
   1214 		worker_delete(daemon->workers[i]);
   1215 	free(daemon->workers);
   1216 	daemon->workers = NULL;
   1217 	/* Unless we're trying to keep the cache, worker alloc_caches should be
   1218 	 * cleared and freed here. We do this after deleting workers to
   1219 	 * guarantee that the alloc caches are valid throughout the lifetime
   1220 	 * of workers. */
   1221 	if(!daemon->reuse_cache || daemon->need_to_exit)
   1222 		daemon_clear_allocs(daemon);
   1223 	daemon->num = 0;
   1224 	shared_ports_delete(daemon->shared_ports);
   1225 	daemon->shared_ports = NULL;
   1226 #ifdef USE_DNSTAP
   1227 	dt_delete(daemon->dtenv);
   1228 	daemon->dtenv = NULL;
   1229 #endif
   1230 #ifdef USE_DNSCRYPT
   1231 	dnsc_delete(daemon->dnscenv);
   1232 	daemon->dnscenv = NULL;
   1233 #endif
   1234 #ifdef HAVE_NGTCP2
   1235 	if (daemon->doq_table) {
   1236 		doq_table_delete(daemon->doq_table);
   1237 		daemon->doq_table = NULL;
   1238 	}
   1239 #endif
   1240 	daemon->cfg = NULL;
   1241 }
   1242 
   1243 void
   1244 daemon_delete(struct daemon* daemon)
   1245 {
   1246 	size_t i;
   1247 	if(!daemon)
   1248 		return;
   1249 	modstack_call_deinit(&daemon->mods, daemon->env);
   1250 	modstack_call_destartup(&daemon->mods, daemon->env);
   1251 	modstack_free(&daemon->mods);
   1252 	daemon_remote_delete(daemon->rc);
   1253 	for(i = 0; i < daemon->num_ports; i++)
   1254 		listening_ports_free(daemon->ports[i]);
   1255 	free(daemon->ports);
   1256 	listening_ports_free(daemon->rc_ports);
   1257 	if(daemon->env) {
   1258 		slabhash_delete(daemon->env->msg_cache);
   1259 		rrset_cache_delete(daemon->env->rrset_cache);
   1260 		infra_delete(daemon->env->infra_cache);
   1261 		edns_known_options_delete(daemon->env);
   1262 		edns_strings_delete(daemon->env->edns_strings);
   1263 		auth_zones_delete(daemon->env->auth_zones);
   1264 	}
   1265 	ub_randfree(daemon->rand);
   1266 	alloc_clear(&daemon->superalloc);
   1267 	acl_list_delete(daemon->acl);
   1268 	acl_list_delete(daemon->acl_interface);
   1269 	tcl_list_delete(daemon->tcl);
   1270 	cookie_secrets_delete(daemon->cookie_secrets);
   1271 	listen_desetup_locks();
   1272 	free(daemon->chroot);
   1273 	free(daemon->pidfile);
   1274 	free(daemon->cfgfile);
   1275 	free(daemon->env);
   1276 	daemon_delete_sslctxs(daemon);
   1277 	free(daemon);
   1278 	/* lex cleanup */
   1279 	ub_c_lex_destroy();
   1280 	/* libcrypto cleanup */
   1281 #ifdef HAVE_SSL
   1282 #  if defined(USE_GOST)
   1283 	sldns_key_EVP_unload_gost();
   1284 #  endif
   1285 #  if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS && HAVE_DECL_SK_SSL_COMP_POP_FREE
   1286 #    ifndef S_SPLINT_S
   1287 #      if OPENSSL_VERSION_NUMBER < 0x10100000
   1288 	sk_SSL_COMP_pop_free(comp_meth, (void(*)(SSL_COMP*))CRYPTO_free);
   1289 #      endif
   1290 #    endif
   1291 #  endif
   1292 #  ifdef HAVE_OPENSSL_CONFIG
   1293 	EVP_cleanup();
   1294 #  if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP)
   1295 	ENGINE_cleanup();
   1296 #  endif
   1297 	CONF_modules_free();
   1298 #  endif
   1299 #  ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
   1300 	CRYPTO_cleanup_all_ex_data(); /* safe, no more threads right now */
   1301 #  endif
   1302 #  ifdef HAVE_ERR_FREE_STRINGS
   1303 	ERR_free_strings();
   1304 #  endif
   1305 #  if OPENSSL_VERSION_NUMBER < 0x10100000
   1306 	RAND_cleanup();
   1307 #  endif
   1308 #  if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
   1309 	ub_openssl_lock_delete();
   1310 #  endif
   1311 #ifdef HAVE_OPENSSL_CLEANUP
   1312 	OPENSSL_cleanup();
   1313 #endif
   1314 #ifndef HAVE_ARC4RANDOM
   1315 	_ARC4_LOCK_DESTROY();
   1316 #endif
   1317 #elif defined(HAVE_NSS)
   1318 	NSS_Shutdown();
   1319 #endif /* HAVE_SSL or HAVE_NSS */
   1320 	checklock_stop();
   1321 #ifdef USE_WINSOCK
   1322 	if(WSACleanup() != 0) {
   1323 		log_err("Could not WSACleanup: %s",
   1324 			wsa_strerror(WSAGetLastError()));
   1325 	}
   1326 #endif
   1327 }
   1328 
   1329 void daemon_apply_cfg(struct daemon* daemon, struct config_file* cfg)
   1330 {
   1331 	int new_num = cfg->num_threads?cfg->num_threads:1;
   1332 
   1333         daemon->cfg = cfg;
   1334 	config_apply(cfg);
   1335 
   1336 	/* If this is a reload and we deferred the decision on whether to
   1337 	 * reuse the alloc, RRset, and message caches, then check to see if
   1338 	 * it's safe to keep the caches:
   1339 	 * - changing the number of threads is obviously incompatible with
   1340 	 *   keeping the per-thread alloc caches. It also means we have to
   1341 	 *   clear RRset and message caches. (note that 'new_num' may be
   1342 	 *   adjusted in daemon_create_workers, but for our purpose we can
   1343 	 *   simply compare it with 'old_num'; if they are equal here,
   1344 	 *   'new_num' won't be adjusted to a different value than 'old_num').
   1345 	 * - changing RRset cache size effectively clears any remaining cache
   1346 	 *   entries. We could keep their keys in alloc caches, but it would
   1347 	 *   be more consistent with the sense of the change to clear allocs
   1348 	 *   and free memory. To do so we also have to clear message cache.
   1349 	 * - only changing message cache size does not necessarily affect
   1350 	 *   RRset or alloc cache. But almost all new subsequent queries will
   1351 	 *   require recursive resolution anyway, so it doesn't help much to
   1352 	 *   just keep RRset and alloc caches. For simplicity we clear/free
   1353 	 *   the other two, too. */
   1354 	if(daemon->worker_allocs &&
   1355 		(new_num != daemon->old_num ||
   1356 		 !slabhash_is_size(daemon->env->msg_cache, cfg->msg_cache_size,
   1357 			cfg->msg_cache_slabs) ||
   1358 		 !slabhash_is_size(&daemon->env->rrset_cache->table,
   1359 			cfg->rrset_cache_size, cfg->rrset_cache_slabs)))
   1360 	{
   1361 		log_warn("cannot reuse caches due to critical config change");
   1362 		slabhash_clear(&daemon->env->rrset_cache->table);
   1363 		slabhash_clear(daemon->env->msg_cache);
   1364 		daemon_clear_allocs(daemon);
   1365 	}
   1366 
   1367 	if(!slabhash_is_size(daemon->env->msg_cache, cfg->msg_cache_size,
   1368 	   	cfg->msg_cache_slabs)) {
   1369 		slabhash_delete(daemon->env->msg_cache);
   1370 		daemon->env->msg_cache = slabhash_create(cfg->msg_cache_slabs,
   1371 			HASH_DEFAULT_STARTARRAY, cfg->msg_cache_size,
   1372 			msgreply_sizefunc, query_info_compare,
   1373 			query_entry_delete, reply_info_delete, NULL);
   1374 		if(!daemon->env->msg_cache) {
   1375 			fatal_exit("malloc failure updating config settings");
   1376 		}
   1377 	}
   1378 	if((daemon->env->rrset_cache = rrset_cache_adjust(
   1379 		daemon->env->rrset_cache, cfg, &daemon->superalloc)) == 0)
   1380 		fatal_exit("malloc failure updating config settings");
   1381 	if((daemon->env->infra_cache = infra_adjust(daemon->env->infra_cache,
   1382 		cfg))==0)
   1383 		fatal_exit("malloc failure updating config settings");
   1384 }
   1385