Lines Matching defs:view

1 /*	$NetBSD: view.c,v 1.17 2025/01/26 16:25:26 christos Exp $	*/
66 #include <dns/view.h>
94 dns_view_t *view = NULL;
106 view = isc_mem_get(mctx, sizeof(*view));
107 *view = (dns_view_t){
130 isc_refcount_init(&view->references, 1);
131 isc_refcount_init(&view->weakrefs, 1);
133 dns_fixedname_init(&view->redirectfixed);
135 ISC_LIST_INIT(view->dlz_searched);
136 ISC_LIST_INIT(view->dlz_unsearched);
137 ISC_LIST_INIT(view->dns64);
139 ISC_LINK_INIT(view, link);
141 isc_mem_attach(mctx, &view->mctx);
144 dns_dispatchmgr_attach(dispatchmgr, &view->dispatchmgr);
147 isc_mutex_init(&view->lock);
149 dns_zt_create(mctx, view, &view->zonetable);
151 dns_fwdtable_create(mctx, view, &view->fwdtable);
153 dns_tsigkeyring_create(view->mctx, &view->dynamickeys);
155 view->failcache = dns_badcache_new(view->mctx, loopmgr);
157 isc_mutex_init(&view->new_zone_lock);
159 result = dns_order_create(view->mctx, &view->order);
164 result = dns_peerlist_new(view->mctx, &view->peers);
169 dns_aclenv_create(view->mctx, &view->aclenv);
171 dns_nametree_create(view->mctx, DNS_NAMETREE_COUNT, "sfd", &view->sfd);
173 view->magic = DNS_VIEW_MAGIC;
174 *viewp = view;
179 if (view->order != NULL) {
180 dns_order_detach(&view->order);
184 isc_mutex_destroy(&view->new_zone_lock);
185 dns_badcache_destroy(&view->failcache);
187 if (view->dynamickeys != NULL) {
188 dns_tsigkeyring_detach(&view->dynamickeys);
191 isc_refcount_decrementz(&view->weakrefs);
192 isc_refcount_destroy(&view->weakrefs);
194 isc_refcount_decrementz(&view->references);
195 isc_refcount_destroy(&view->references);
197 dns_fwdtable_destroy(&view->fwdtable);
198 dns_zt_detach(&view->zonetable);
200 isc_mutex_destroy(&view->lock);
202 if (view->nta_file != NULL) {
203 isc_mem_free(mctx, view->nta_file);
206 isc_mem_free(mctx, view->name);
207 isc_mem_putanddetach(&view->mctx, view, sizeof(*view));
213 destroy(dns_view_t *view) {
217 REQUIRE(!ISC_LINK_LINKED(view, link));
219 isc_refcount_destroy(&view->references);
220 isc_refcount_destroy(&view->weakrefs);
222 if (view->order != NULL) {
223 dns_order_detach(&view->order);
225 if (view->peers != NULL) {
226 dns_peerlist_detach(&view->peers);
229 if (view->dynamickeys != NULL) {
240 result = dns_tsigkeyring_dump(view->dynamickeys, fp);
244 NULL, view->name, "tsigkeys",
259 dns_tsigkeyring_detach(&view->dynamickeys);
261 if (view->transports != NULL) {
262 dns_transport_list_detach(&view->transports);
264 if (view->statickeys != NULL) {
265 dns_tsigkeyring_detach(&view->statickeys);
269 INSIST(view->adb == NULL);
270 INSIST(view->resolver == NULL);
271 INSIST(view->requestmgr == NULL);
273 dns_rrl_view_destroy(view);
274 if (view->rpzs != NULL) {
275 dns_rpz_zones_shutdown(view->rpzs);
276 dns_rpz_zones_detach(&view->rpzs);
278 if (view->catzs != NULL) {
279 dns_catz_zones_shutdown(view->catzs);
280 dns_catz_zones_detach(&view->catzs);
282 for (dlzdb = ISC_LIST_HEAD(view->dlz_searched); dlzdb != NULL;
283 dlzdb = ISC_LIST_HEAD(view->dlz_searched))
285 ISC_LIST_UNLINK(view->dlz_searched, dlzdb, link);
288 for (dlzdb = ISC_LIST_HEAD(view->dlz_unsearched); dlzdb != NULL;
289 dlzdb = ISC_LIST_HEAD(view->dlz_unsearched))
291 ISC_LIST_UNLINK(view->dlz_unsearched, dlzdb, link);
294 if (view->hints != NULL) {
295 dns_db_detach(&view->hints);
297 if (view->cachedb != NULL) {
298 dns_db_detach(&view->cachedb);
300 if (view->cache != NULL) {
301 dns_cache_detach(&view->cache);
303 if (view->nocasecompress != NULL) {
304 dns_acl_detach(&view->nocasecompress);
306 if (view->matchclients != NULL) {
307 dns_acl_detach(&view->matchclients);
309 if (view->matchdestinations != NULL) {
310 dns_acl_detach(&view->matchdestinations);
312 if (view->cacheacl != NULL) {
313 dns_acl_detach(&view->cacheacl);
315 if (view->cacheonacl != NULL) {
316 dns_acl_detach(&view->cacheonacl);
318 if (view->queryacl != NULL) {
319 dns_acl_detach(&view->queryacl);
321 if (view->queryonacl != NULL) {
322 dns_acl_detach(&view->queryonacl);
324 if (view->recursionacl != NULL) {
325 dns_acl_detach(&view->recursionacl);
327 if (view->recursiononacl != NULL) {
328 dns_acl_detach(&view->recursiononacl);
330 if (view->sortlist != NULL) {
331 dns_acl_detach(&view->sortlist);
333 if (view->transferacl != NULL) {
334 dns_acl_detach(&view->transferacl);
336 if (view->notifyacl != NULL) {
337 dns_acl_detach(&view->notifyacl);
339 if (view->updateacl != NULL) {
340 dns_acl_detach(&view->updateacl);
342 if (view->upfwdacl != NULL) {
343 dns_acl_detach(&view->upfwdacl);
345 if (view->denyansweracl != NULL) {
346 dns_acl_detach(&view->denyansweracl);
348 if (view->pad_acl != NULL) {
349 dns_acl_detach(&view->pad_acl);
351 if (view->proxyacl != NULL) {
352 dns_acl_detach(&view->proxyacl);
354 if (view->proxyonacl != NULL) {
355 dns_acl_detach(&view->proxyonacl);
357 if (view->answeracl_exclude != NULL) {
358 dns_nametree_detach(&view->answeracl_exclude);
360 if (view->denyanswernames != NULL) {
361 dns_nametree_detach(&view->denyanswernames);
363 if (view->answernames_exclude != NULL) {
364 dns_nametree_detach(&view->answernames_exclude);
366 if (view->sfd != NULL) {
367 dns_nametree_detach(&view->sfd);
369 if (view->secroots_priv != NULL) {
370 dns_keytable_detach(&view->secroots_priv);
372 if (view->ntatable_priv != NULL) {
373 dns_ntatable_detach(&view->ntatable_priv);
375 for (dns64 = ISC_LIST_HEAD(view->dns64); dns64 != NULL;
376 dns64 = ISC_LIST_HEAD(view->dns64))
378 dns_dns64_unlink(&view->dns64, dns64);
381 if (view->managed_keys != NULL) {
382 dns_zone_detach(&view->managed_keys);
384 if (view->redirect != NULL) {
385 dns_zone_detach(&view->redirect);
388 if (view->dtenv != NULL) {
389 dns_dt_detach(&view->dtenv);
392 dns_view_setnewzones(view, false, NULL, NULL, 0ULL);
393 if (view->new_zone_file != NULL) {
394 isc_mem_free(view->mctx, view->new_zone_file);
395 view->new_zone_file = NULL;
397 if (view->new_zone_dir != NULL) {
398 isc_mem_free(view->mctx, view->new_zone_dir);
399 view->new_zone_dir = NULL;
402 if (view->new_zone_dbenv != NULL) {
403 mdb_env_close((MDB_env *)view->new_zone_dbenv);
404 view->new_zone_dbenv = NULL;
406 if (view->new_zone_db != NULL) {
407 isc_mem_free(view->mctx, view->new_zone_db);
408 view->new_zone_db = NULL;
411 dns_fwdtable_destroy(&view->fwdtable);
412 dns_aclenv_detach(&view->aclenv);
413 if (view->failcache != NULL) {
414 dns_badcache_destroy(&view->failcache);
416 isc_mutex_destroy(&view->new_zone_lock);
417 isc_mutex_destroy(&view->lock);
418 isc_refcount_destroy(&view->references);
419 isc_refcount_destroy(&view->weakrefs);
420 isc_mem_free(view->mctx, view->nta_file);
421 isc_mem_free(view->mctx, view->name);
422 if (view->hooktable != NULL && view->hooktable_free != NULL) {
423 view->hooktable_free(view->mctx, &view->hooktable);
425 if (view->plugins != NULL && view->plugins_free != NULL) {
426 view->plugins_free(view->mctx, &view->plugins);
428 isc_mem_putanddetach(&view->mctx, view, sizeof(*view));
443 dns_view_t *view = NULL;
447 view = *viewp;
450 if (isc_refcount_decrement(&view->references) == 1) {
458 isc_refcount_destroy(&view->references);
461 if (view->resolver != NULL) {
462 dns_resolver_shutdown(view->resolver);
466 adb = rcu_dereference(view->adb);
472 if (view->requestmgr != NULL) {
473 dns_requestmgr_shutdown(view->requestmgr);
477 LOCK(&view->lock);
479 if (view->resolver != NULL) {
480 resolver = view->resolver;
481 view->resolver = NULL;
485 zonetable = rcu_xchg_pointer(&view->zonetable, NULL);
487 if (view->flush) {
491 adb = rcu_xchg_pointer(&view->adb, NULL);
492 dispatchmgr = rcu_xchg_pointer(&view->dispatchmgr, NULL);
495 if (view->requestmgr != NULL) {
496 requestmgr = view->requestmgr;
497 view->requestmgr = NULL;
499 if (view->managed_keys != NULL) {
500 mkzone = view->managed_keys;
501 view->managed_keys = NULL;
502 if (view->flush) {
506 if (view->redirect != NULL) {
507 rdzone = view->redirect;
508 view->redirect = NULL;
509 if (view->flush) {
513 if (view->catzs != NULL) {
514 dns_catz_zones_shutdown(view->catzs);
515 dns_catz_zones_detach(&view->catzs);
517 if (view->ntatable_priv != NULL) {
518 dns_ntatable_shutdown(view->ntatable_priv);
520 UNLOCK(&view->lock);
522 /* Detach outside view lock */
546 dns_view_weakdetach(&view);
558 dns_view_dialup(dns_view_t *view) {
561 REQUIRE(DNS_VIEW_VALID(view));
564 zonetable = rcu_dereference(view->zonetable);
583 dns_view_t *view = NULL;
587 view = *viewp;
590 REQUIRE(DNS_VIEW_VALID(view));
592 if (isc_refcount_decrement(&view->weakrefs) == 1) {
593 destroy(view);
598 dns_view_createresolver(dns_view_t *view, isc_nm_t *netmgr,
606 REQUIRE(DNS_VIEW_VALID(view));
607 REQUIRE(!view->frozen);
608 REQUIRE(view->resolver == NULL);
609 REQUIRE(view->dispatchmgr != NULL);
611 result = dns_resolver_create(view, loopmgr, netmgr, options,
613 &view->resolver);
620 dns_adb_create(mctx, view, &view->adb);
623 result = dns_requestmgr_create(view->mctx, loopmgr, view->dispatchmgr,
625 &view->requestmgr);
633 dns_adb_shutdown(view->adb);
634 dns_adb_detach(&view->adb);
636 dns_resolver_shutdown(view->resolver);
637 dns_resolver_detach(&view->resolver);
643 dns_view_setcache(dns_view_t *view, dns_cache_t *cache, bool shared) {
644 REQUIRE(DNS_VIEW_VALID(view));
645 REQUIRE(!view->frozen);
647 view->cacheshared = shared;
648 if (view->cache != NULL) {
649 dns_db_detach(&view->cachedb);
650 dns_cache_detach(&view->cache);
652 dns_cache_attach(cache, &view->cache);
653 dns_cache_attachdb(cache, &view->cachedb);
654 INSIST(DNS_DB_VALID(view->cachedb));
656 dns_cache_setmaxrrperset(view->cache, view->maxrrperset);
657 dns_cache_setmaxtypepername(view->cache, view->maxtypepername);
661 dns_view_iscacheshared(dns_view_t *view) {
662 REQUIRE(DNS_VIEW_VALID(view));
664 return view->cacheshared;
668 dns_view_sethints(dns_view_t *view, dns_db_t *hints) {
669 REQUIRE(DNS_VIEW_VALID(view));
670 REQUIRE(!view->frozen);
671 REQUIRE(view->hints == NULL);
674 dns_db_attach(hints, &view->hints);
678 dns_view_settransports(dns_view_t *view, dns_transport_list_t *list) {
679 REQUIRE(DNS_VIEW_VALID(view));
681 if (view->transports != NULL) {
682 dns_transport_list_detach(&view->transports);
684 dns_transport_list_attach(list, &view->transports);
688 dns_view_setkeyring(dns_view_t *view, dns_tsigkeyring_t *ring) {
689 REQUIRE(DNS_VIEW_VALID(view));
691 if (view->statickeys != NULL) {
692 dns_tsigkeyring_detach(&view->statickeys);
694 dns_tsigkeyring_attach(ring, &view->statickeys);
698 dns_view_setdynamickeyring(dns_view_t *view, dns_tsigkeyring_t *ring) {
699 REQUIRE(DNS_VIEW_VALID(view));
701 if (view->dynamickeys != NULL) {
702 dns_tsigkeyring_detach(&view->dynamickeys);
704 dns_tsigkeyring_attach(ring, &view->dynamickeys);
708 dns_view_getdynamickeyring(dns_view_t *view, dns_tsigkeyring_t **ringp) {
709 REQUIRE(DNS_VIEW_VALID(view));
711 if (view->dynamickeys != NULL) {
712 dns_tsigkeyring_attach(view->dynamickeys, ringp);
717 dns_view_restorekeyring(dns_view_t *view) {
722 REQUIRE(DNS_VIEW_VALID(view));
724 if (view->dynamickeys != NULL) {
725 result = isc_file_sanitize(NULL, view->name, "tsigkeys",
730 dns_tsigkeyring_restore(view->dynamickeys, fp);
738 dns_view_setdstport(dns_view_t *view, in_port_t dstport) {
739 REQUIRE(DNS_VIEW_VALID(view));
740 view->dstport = dstport;
744 dns_view_freeze(dns_view_t *view) {
745 REQUIRE(DNS_VIEW_VALID(view));
746 REQUIRE(!view->frozen);
748 if (view->resolver != NULL) {
749 INSIST(view->cachedb != NULL);
750 dns_resolver_freeze(view->resolver);
752 view->frozen = true;
756 dns_view_thaw(dns_view_t *view) {
757 REQUIRE(DNS_VIEW_VALID(view));
758 REQUIRE(view->frozen);
760 view->frozen = false;
764 dns_view_addzone(dns_view_t *view, dns_zone_t *zone) {
768 REQUIRE(DNS_VIEW_VALID(view));
769 REQUIRE(!view->frozen);
772 zonetable = rcu_dereference(view->zonetable);
784 dns_view_delzone(dns_view_t *view, dns_zone_t *zone) {
788 REQUIRE(DNS_VIEW_VALID(view));
791 zonetable = rcu_dereference(view->zonetable);
803 dns_view_findzone(dns_view_t *view, const dns_name_t *name,
808 REQUIRE(DNS_VIEW_VALID(view));
811 zonetable = rcu_dereference(view->zonetable);
823 dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type,
841 REQUIRE(DNS_VIEW_VALID(view));
842 REQUIRE(view->frozen);
858 zonetable = rcu_dereference(view->zonetable);
872 if (result != ISC_R_SUCCESS && view->cachedb != NULL) {
873 dns_db_attach(view->cachedb, &db);
882 } else if (result == ISC_R_NOTFOUND && view->cachedb != NULL) {
883 dns_db_attach(view->cachedb, &db);
911 if (view->cachedb != NULL && !is_staticstub_zone) {
917 * (see the function description in view.h).
920 dns_db_attach(view->cachedb, &db);
957 view->hints != NULL)
973 result = dns_db_find(view->hints, name, NULL, type, options,
982 result = dns_view_getresolver(view, &res);
985 dns_db_attach(view->hints, &db);
990 dns_db_attach(view->hints, &db);
1000 dns_db_detachnode(view->hints, &node);
1044 dns_view_simplefind(dns_view_t *view, const dns_name_t *name,
1052 result = dns_view_find(view, name, type, now, options, use_hints, false,
1090 dns_view_findzonecut(dns_view_t *view, const dns_name_t *name,
1104 REQUIRE(DNS_VIEW_VALID(view));
1105 REQUIRE(view->frozen);
1121 zonetable = rcu_dereference(view->zonetable);
1137 if (use_cache && view->cachedb != NULL) {
1141 dns_db_attach(view->cachedb, &db);
1142 } else if (use_hints && view->hints != NULL) {
1181 if (use_cache && view->cachedb != NULL && db != view->hints) {
1196 dns_db_attach(view->cachedb, &db);
1223 } else if (use_hints && view->hints != NULL) {
1264 result = dns_db_find(view->hints, dns_rootname, NULL,
1301 dns_view_t *view;
1305 for (view = ISC_LIST_HEAD(*list); view != NULL;
1306 view = ISC_LIST_NEXT(view, link))
1308 if (strcmp(view->name, name) == 0 && view->rdclass == rdclass) {
1312 if (view == NULL) {
1316 dns_view_attach(view, viewp);
1325 dns_view_t *view;
1332 for (view = ISC_LIST_HEAD(*list); view != NULL;
1333 view = ISC_LIST_NEXT(view, link))
1336 if (!allclasses && view->rdclass != rdclass) {
1340 zonetable = rcu_dereference(view->zonetable);
1366 dns_view_load(dns_view_t *view, bool stop, bool newonly) {
1370 REQUIRE(DNS_VIEW_VALID(view));
1373 zonetable = rcu_dereference(view->zonetable);
1384 dns_view_asyncload(dns_view_t *view, bool newonly, dns_zt_callback_t *callback,
1389 REQUIRE(DNS_VIEW_VALID(view));
1392 zonetable = rcu_dereference(view->zonetable);
1403 dns_view_gettsig(dns_view_t *view, const dns_name_t *keyname,
1408 result = dns_tsigkey_find(keyp, keyname, NULL, view->statickeys);
1411 view->dynamickeys);
1417 dns_view_gettransport(dns_view_t *view, const dns_transport_type_t type,
1419 REQUIRE(DNS_VIEW_VALID(view));
1423 view->transports);
1433 dns_view_getpeertsig(dns_view_t *view, const isc_netaddr_t *peeraddr,
1439 result = dns_peerlist_peerbyaddr(view->peers, peeraddr, &peer);
1449 result = dns_view_gettsig(view, keyname, keyp);
1454 dns_view_checksig(dns_view_t *view, isc_buffer_t *source, dns_message_t *msg) {
1455 REQUIRE(DNS_VIEW_VALID(view));
1458 return dns_tsig_verify(source, msg, view->statickeys,
1459 view->dynamickeys);
1463 dns_view_flushcache(dns_view_t *view, bool fixuponly) {
1467 REQUIRE(DNS_VIEW_VALID(view));
1469 if (view->cachedb == NULL) {
1473 result = dns_cache_flush(view->cache);
1478 dns_db_detach(&view->cachedb);
1479 dns_cache_attachdb(view->cache, &view->cachedb);
1480 if (view->failcache != NULL) {
1481 dns_badcache_flush(view->failcache);
1485 adb = rcu_dereference(view->adb);
1495 dns_view_flushname(dns_view_t *view, const dns_name_t *name) {
1496 return dns_view_flushnode(view, name, false);
1500 dns_view_flushnode(dns_view_t *view, const dns_name_t *name, bool tree) {
1504 REQUIRE(DNS_VIEW_VALID(view));
1508 adb = rcu_dereference(view->adb);
1513 if (view->failcache != NULL) {
1514 dns_badcache_flushtree(view->failcache, name);
1518 adb = rcu_dereference(view->adb);
1523 if (view->failcache != NULL) {
1524 dns_badcache_flushname(view->failcache, name);
1528 if (view->cache != NULL) {
1529 result = dns_cache_flushnode(view->cache, name, tree);
1536 dns_view_freezezones(dns_view_t *view, bool value) {
1540 REQUIRE(DNS_VIEW_VALID(view));
1543 zonetable = rcu_dereference(view->zonetable);
1545 result = dns_zt_freezezones(zonetable, view, value);
1555 dns_view_initntatable(dns_view_t *view, isc_loopmgr_t *loopmgr) {
1556 REQUIRE(DNS_VIEW_VALID(view));
1557 if (view->ntatable_priv != NULL) {
1558 dns_ntatable_detach(&view->ntatable_priv);
1560 dns_ntatable_create(view, loopmgr, &view->ntatable_priv);
1564 dns_view_getntatable(dns_view_t *view, dns_ntatable_t **ntp) {
1565 REQUIRE(DNS_VIEW_VALID(view));
1567 if (view->ntatable_priv == NULL) {
1570 dns_ntatable_attach(view->ntatable_priv, ntp);
1575 dns_view_initsecroots(dns_view_t *view) {
1576 REQUIRE(DNS_VIEW_VALID(view));
1577 if (view->secroots_priv != NULL) {
1578 dns_keytable_detach(&view->secroots_priv);
1580 dns_keytable_create(view, &view->secroots_priv);
1584 dns_view_getsecroots(dns_view_t *view, dns_keytable_t **ktp) {
1585 REQUIRE(DNS_VIEW_VALID(view));
1587 if (view->secroots_priv == NULL) {
1590 dns_keytable_attach(view->secroots_priv, ktp);
1595 dns_view_ntacovers(dns_view_t *view, isc_stdtime_t now, const dns_name_t *name,
1597 REQUIRE(DNS_VIEW_VALID(view));
1599 if (view->ntatable_priv == NULL) {
1603 return dns_ntatable_covered(view->ntatable_priv, now, name, anchor);
1607 dns_view_issecuredomain(dns_view_t *view, const dns_name_t *name,
1615 REQUIRE(DNS_VIEW_VALID(view));
1617 if (view->secroots_priv == NULL) {
1623 result = dns_keytable_issecuredomain(view->secroots_priv, name, anchor,
1632 if (checknta && secure && view->ntatable_priv != NULL &&
1633 dns_ntatable_covered(view->ntatable_priv, now, name, anchor))
1646 dns_view_untrust(dns_view_t *view, const dns_name_t *keyname,
1652 REQUIRE(DNS_VIEW_VALID(view));
1656 result = dns_view_getsecroots(view, &sr);
1684 dns_view_istrusted(dns_view_t *view, const dns_name_t *keyname,
1692 REQUIRE(DNS_VIEW_VALID(view));
1696 result = dns_view_getsecroots(view, &sr);
1815 dns_view_setnewzones(dns_view_t *view, bool allow, void *cfgctx,
1828 REQUIRE(DNS_VIEW_VALID(view));
1831 if (view->new_zone_file != NULL) {
1832 isc_mem_free(view->mctx, view->new_zone_file);
1833 view->new_zone_file = NULL;
1837 if (view->new_zone_dbenv != NULL) {
1838 mdb_env_close((MDB_env *)view->new_zone_dbenv);
1839 view->new_zone_dbenv = NULL;
1842 if (view->new_zone_db != NULL) {
1843 isc_mem_free(view->mctx, view->new_zone_db);
1844 view->new_zone_db = NULL;
1848 if (view->new_zone_config != NULL) {
1849 view->cfg_destroy(&view->new_zone_config);
1850 view->cfg_destroy = NULL;
1857 CHECK(nz_legacy(view->new_zone_dir, view->name, "nzf", buffer,
1860 view->new_zone_file = isc_mem_strdup(view->mctx, buffer);
1863 CHECK(nz_legacy(view->new_zone_dir, view->name, "nzd", buffer,
1866 view->new_zone_db = isc_mem_strdup(view->mctx, buffer);
1886 view->new_zone_mapsize = mapsize;
1889 status = mdb_env_open(env, view->new_zone_db, DNS_LMDB_FLAGS, 0600);
1894 view->new_zone_db, mdb_strerror(status));
1898 view->new_zone_dbenv = env;
1902 view->new_zone_config = cfgctx;
1903 view->cfg_destroy = cfg_destroy;
1907 if (view->new_zone_file != NULL) {
1908 isc_mem_free(view->mctx, view->new_zone_file);
1909 view->new_zone_file = NULL;
1913 if (view->new_zone_db != NULL) {
1914 isc_mem_free(view->mctx, view->new_zone_db);
1915 view->new_zone_db = NULL;
1921 view->new_zone_config = NULL;
1922 view->cfg_destroy = NULL;
1929 dns_view_setnewzonedir(dns_view_t *view, const char *dir) {
1930 REQUIRE(DNS_VIEW_VALID(view));
1932 if (view->new_zone_dir != NULL) {
1933 isc_mem_free(view->mctx, view->new_zone_dir);
1934 view->new_zone_dir = NULL;
1941 view->new_zone_dir = isc_mem_strdup(view->mctx, dir);
1945 dns_view_getnewzonedir(dns_view_t *view) {
1946 REQUIRE(DNS_VIEW_VALID(view));
1948 return view->new_zone_dir;
1952 dns_view_searchdlz(dns_view_t *view, const dns_name_t *name,
1967 REQUIRE(DNS_VIEW_VALID(view));
1977 for (dlzdb = ISC_LIST_HEAD(view->dlz_searched); dlzdb != NULL;
2004 view->rdclass, zonename, methods,
2038 dns_view_getfailttl(dns_view_t *view) {
2039 REQUIRE(DNS_VIEW_VALID(view));
2040 return view->fail_ttl;
2044 dns_view_setfailttl(dns_view_t *view, uint32_t fail_ttl) {
2045 REQUIRE(DNS_VIEW_VALID(view));
2046 view->fail_ttl = fail_ttl;
2050 dns_view_saventa(dns_view_t *view) {
2056 REQUIRE(DNS_VIEW_VALID(view));
2058 if (view->nta_lifetime == 0) {
2063 CHECK(isc_stdio_open(view->nta_file, "w", &fp));
2065 result = dns_view_getntatable(view, &ntatable);
2094 (void)isc_file_remove(view->nta_file);
2104 dns_view_loadnta(dns_view_t *view) {
2111 REQUIRE(DNS_VIEW_VALID(view));
2113 if (view->nta_lifetime == 0) {
2117 isc_lex_create(view->mctx, 1025, &lex);
2118 CHECK(isc_lex_openfile(lex, view->nta_file));
2119 CHECK(dns_view_getntatable(view, &ntatable));
2210 dns_view_setviewcommit(dns_view_t *view) {
2214 REQUIRE(DNS_VIEW_VALID(view));
2216 LOCK(&view->lock);
2218 if (view->redirect != NULL) {
2219 dns_zone_attach(view->redirect, &redirect);
2221 if (view->managed_keys != NULL) {
2222 dns_zone_attach(view->managed_keys, &managed_keys);
2225 UNLOCK(&view->lock);
2228 zonetable = rcu_dereference(view->zonetable);
2245 dns_view_setviewrevert(dns_view_t *view) {
2249 REQUIRE(DNS_VIEW_VALID(view));
2252 * dns_zt_setviewrevert() attempts to lock this view, so we must
2255 LOCK(&view->lock);
2256 if (view->redirect != NULL) {
2257 dns_zone_attach(view->redirect, &redirect);
2259 if (view->managed_keys != NULL) {
2260 dns_zone_attach(view->managed_keys, &managed_keys);
2262 UNLOCK(&view->lock);
2273 zonetable = rcu_dereference(view->zonetable);
2281 dns_view_staleanswerenabled(dns_view_t *view) {
2285 REQUIRE(DNS_VIEW_VALID(view));
2287 if (dns_db_getservestalettl(view->cachedb, &stale_ttl) != ISC_R_SUCCESS)
2292 if (view->staleanswersok == dns_stale_answer_yes) {
2294 } else if (view->staleanswersok == dns_stale_answer_conf) {
2295 result = view->staleanswersenable;
2303 dns_view_flushonshutdown(dns_view_t *view, bool flush) {
2304 REQUIRE(DNS_VIEW_VALID(view));
2306 view->flush = flush;
2310 dns_view_sfd_add(dns_view_t *view, const dns_name_t *name) {
2313 REQUIRE(DNS_VIEW_VALID(view));
2315 result = dns_nametree_add(view->sfd, name, 0);
2320 dns_view_sfd_del(dns_view_t *view, const dns_name_t *name) {
2321 REQUIRE(DNS_VIEW_VALID(view));
2323 dns_nametree_delete(view->sfd, name);
2327 dns_view_sfd_find(dns_view_t *view, const dns_name_t *name,
2329 REQUIRE(DNS_VIEW_VALID(view));
2331 if (!dns_nametree_covered(view->sfd, name, foundname, 0)) {
2337 dns_view_getresolver(dns_view_t *view, dns_resolver_t **resolverp) {
2339 REQUIRE(DNS_VIEW_VALID(view));
2341 LOCK(&view->lock);
2342 if (view->resolver != NULL) {
2343 dns_resolver_attach(view->resolver, resolverp);
2348 UNLOCK(&view->lock);
2353 dns_view_setmaxrrperset(dns_view_t *view, uint32_t value) {
2354 REQUIRE(DNS_VIEW_VALID(view));
2355 view->maxrrperset = value;
2356 if (view->cache != NULL) {
2357 dns_cache_setmaxrrperset(view->cache, value);
2362 dns_view_setmaxtypepername(dns_view_t *view, uint32_t value) {
2363 REQUIRE(DNS_VIEW_VALID(view));
2364 view->maxtypepername = value;
2365 if (view->cache != NULL) {
2366 dns_cache_setmaxtypepername(view->cache, value);
2371 dns_view_setudpsize(dns_view_t *view, uint16_t udpsize) {
2372 REQUIRE(DNS_VIEW_VALID(view));
2373 view->udpsize = udpsize;
2377 dns_view_getudpsize(dns_view_t *view) {
2378 REQUIRE(DNS_VIEW_VALID(view));
2379 return view->udpsize;
2383 dns_view_getdispatchmgr(dns_view_t *view) {
2384 REQUIRE(DNS_VIEW_VALID(view));
2387 dns_dispatchmgr_t *dispatchmgr = rcu_dereference(view->dispatchmgr);
2397 dns_view_addtrustedkey(dns_view_t *view, dns_rdatatype_t rdtype,
2407 REQUIRE(DNS_VIEW_VALID(view));
2408 REQUIRE(view->rdclass == dns_rdataclass_in);
2418 CHECK(dns_rdata_fromwire(&rdata, view->rdclass, rdtype, databuf,
2428 CHECK(dns_keytable_add(view->secroots_priv, false, false, name, &ds,
2436 dns_view_apply(dns_view_t *view, bool stop, isc_result_t *sub,
2441 REQUIRE(DNS_VIEW_VALID(view));
2444 zonetable = rcu_dereference(view->zonetable);
2455 dns_view_getadb(dns_view_t *view, dns_adb_t **adbp) {
2458 REQUIRE(DNS_VIEW_VALID(view));
2462 adb = rcu_dereference(view->adb);
2470 dns_view_setmaxrestarts(dns_view_t *view, uint8_t max_restarts) {
2471 REQUIRE(DNS_VIEW_VALID(view));
2474 view->max_restarts = max_restarts;