bind9/lib/dns
Ondřej Surý 0c007d8659
Rename view->hints to view->rootdb and rearm priming
With the parent-centric resolver, dns_view_bestzonecut() consults the
delegation DB (view->deleg) rather than the main cache for the closest
zonecut.  Root is never the target of a referral, so it never lands in
delegdb; bestzonecut therefore falls through to the hints lookup on
every query whose closest ancestor is root.  prime_done() only called
dns_root_checkhints(), which logs discrepancies but does not update
any store bestzonecut looks at, so the fresh root NS records obtained
by priming were never used and priming kept re-firing.

Rename view->hints to view->rootdb and refresh it when a priming
fetch completes: the '.' NS rdataset is replaced with the fetched
one, and for each listed nameserver the matching A/AAAA glue is
copied from the response's ADDITIONAL section.  Only glue for names
that actually appear as NS targets is accepted, so a hostile response
cannot inject unrelated records.  Glue the response did not carry is
left untouched, so the hints-file records loaded at startup remain as
a fallback.

Each view gets its own rootdb: the previous shared
named_g_server->in_roothints is gone, and configure_view() calls
dns_rootns_create() per view when the class-IN defaults are needed.
That keeps the priming writer one-per-DB, so concurrent priming in
different views cannot race on the same zone-DB version.

The rootdb refresh runs synchronously from the resolver response path,
so records go straight from the wire into rootdb with no cache round
trip and no dependency on DNSSEC validation state.  A new
DNS_FETCHOPT_PRIMING option marks the priming fetch; prime_done()
itself is now pure cleanup.

Track the rootdb freshness window in view->rootdb_expires and trigger
re-priming lazily from dns_view_find() and bestzonecut_rootdb() only
when the window has elapsed.  Stale records are still served while the
fresh priming fetch is in flight.

Drop dns_root_checkhints() and its helpers; the rootdb is now the
authoritative source the resolver consults.
2026-04-16 13:39:18 +02:00
..
include Rename view->hints to view->rootdb and rearm priming 2026-04-16 13:39:18 +02:00
rdata Change NSEC3 and NSEC3PARAM struct fields to use isc_region_t 2026-04-02 16:53:18 +02:00
.gitignore Add support for User Statically Defined Tracing (USDT) probes 2023-08-21 18:39:53 +02:00
acl.c switch to RETERR where it wasn't being used 2025-12-03 13:45:43 -08:00
acl_p.h Move the library init and shutdown to executables 2025-02-22 16:19:00 +01:00
adb.c enforce dns_adb_createaddrinfofind() invariant 2026-04-08 17:26:49 +02:00
badcache.c Apply the changes from updated set_if_not_null semantic patch 2025-10-08 17:44:50 +02:00
byaddr.c Share reverse (ARPA) domain names 2025-10-01 12:16:05 +02:00
cache.c Remove the dead dns_expire_ttl code path and deletettl stats counter 2026-03-30 21:46:44 +02:00
callbacks.c Convert all categories and modules into static lists 2024-08-20 12:50:39 +00:00
catz.c Treat '%' and '$' as special characters for catalog member zone names 2026-04-16 11:37:02 +00:00
client.c Add switch to disable cookie checking in delv 2026-03-26 11:18:26 +11:00
clientinfo.c refactor dns_clientinfo_init(); use separate function to set ECS 2023-02-07 23:48:22 -08:00
compress.c remove the 'name_coff' parameter in dns_name_towire() 2025-02-25 12:53:25 -08:00
db.c Remove node and db pointer from dns_rdataset_t.vec 2026-03-31 16:22:56 +02:00
db_p.h Remove node and db pointer from dns_rdataset_t.vec 2026-03-31 16:22:56 +02:00
dbiterator.c Implement dns_dbiterator_seek3 2025-12-10 14:18:52 +01:00
deleg.c rename DNS_DBFIND_NOEXACT to DNS_DBFIND_ABOVE 2026-04-16 11:28:13 +02:00
diff.c Refactor setsigningtime 2026-03-31 16:22:56 +02:00
dispatch.c Include disptype and transport in dispatch hash key 2026-04-14 17:48:24 +02:00
dlz.c Move zone set/get properties to own source file 2026-04-02 15:50:07 +02:00
dlz_p.h Move the library init and shutdown to executables 2025-02-22 16:19:00 +01:00
dns64.c switch to RETERR where it wasn't being used 2025-12-03 13:45:43 -08:00
dnssec.c Update dns_dnssec_sync(update|delete) return code 2025-12-19 14:08:15 +01:00
dnstap.c Take 'env' reference before async calling perform_reopen() 2026-03-18 16:10:07 +00:00
ds.c switch isc_md_type_t to a proper enum 2026-02-02 11:12:55 +03:00
dst_api.c switch isc_md_type_t to a proper enum 2026-02-02 11:12:55 +03:00
dst_internal.h Separate isc_hmac between pre and post OpenSSL 3.0 2026-02-02 11:50:14 +03:00
dst_openssl.h move openssl error reporting to isc/ossl_wrap 2026-02-02 11:50:14 +03:00
dst_parse.c Use isc__zero_or_more when calling isc_base64_tobuffer 2026-01-28 00:25:04 +11:00
dst_parse.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
dyndb.c Move zonemgr to own source file 2026-04-08 14:24:17 +02:00
dyndb_p.h Move the library init and shutdown to executables 2025-02-22 16:19:00 +01:00
ecs.c Remove redundant parentheses from the return statement 2024-11-19 12:27:22 +01:00
ede.c add dns_message API to add EDNS options 2025-11-21 11:13:18 -08:00
fixedname.c Simplify dns_name_init() 2025-02-25 12:17:34 +01:00
forward.c Fix formatting after refactor 2025-12-10 11:28:10 +01:00
gen.c Silence "may be truncated" warnings 2025-08-04 15:38:17 +02:00
geoip2.c Remove redundant parentheses from the return statement 2024-11-19 12:27:22 +01:00
gssapi_link.c Deprecate max-rsa-exponent-size, always use 4096 instead 2025-05-21 00:50:08 +02:00
gssapictx.c Release gnamebuf also on the error path 2026-02-06 18:33:44 +01:00
hmac_link.c don't transform errors in hmac_sign 2026-02-02 11:50:14 +03:00
ipkeylist.c Simplify dns_name_init() 2025-02-25 12:17:34 +01:00
iptable.c switch to RETERR where it wasn't being used 2025-12-03 13:45:43 -08:00
journal.c use a standard CLEANUP macro 2025-12-03 13:45:43 -08:00
kasp.c Refactor dns_kasp_attach/detach 2026-01-23 09:59:52 +00:00
key.c Cleanup the DST cryptographic API 2025-05-20 09:52:35 +02:00
keydata.c Remove redundant parentheses from the return statement 2024-11-19 12:27:22 +01:00
keymgr.c Fix setting retire in dns_keymgr_key_init 2026-03-05 10:14:45 +00:00
keystore.c Fix log level bug in keystore 2026-02-25 11:34:07 +01:00
keytable.c Fix rwlock type mismatch in delete_ds() error path 2026-03-17 16:05:11 +01:00
lib.c Replace lock keyfile hashmap with lock pool 2026-03-06 12:31:24 +01:00
master.c Dispatch async work jobs from the correct loop 2026-03-14 06:32:54 +01:00
masterdump.c Dispatch async work jobs from the correct loop 2026-03-14 06:32:54 +01:00
meson.build Move zonemgr to own source file 2026-04-08 14:24:17 +02:00
message.c Apply the dns_rdataset_cleanup patch through the codebase 2025-12-17 15:19:55 +01:00
name.c dns_name_totext() can now resize dynamic buffers 2025-12-09 12:26:30 -08:00
nametree.c Fix formatting after refactor 2025-12-10 11:28:10 +01:00
ncache.c dns_rdataset_* const parameters 2026-01-30 19:33:42 +01:00
notify.c Remove unneccesary functions 2026-04-02 15:50:09 +02:00
nsec.c Lower case the NSEC next owner name when signing 2026-01-23 11:52:59 +00:00
nsec3.c Change NSEC3 and NSEC3PARAM struct fields to use isc_region_t 2026-04-02 16:53:18 +02:00
nta.c Revert NTA flush on expire 2026-03-30 18:27:35 +00:00
openssl_link.c use a standard CLEANUP macro 2025-12-03 13:45:43 -08:00
openssl_shim.h Move the dst__openssl_toresult to isc_tls unit 2024-08-08 11:59:41 +02:00
opensslecdsa_link.c expose isc__crypto_md in isc/ossl_wrap.h 2026-02-02 11:50:14 +03:00
openssleddsa_link.c cleanup unused header in isc/md.h 2026-02-02 11:50:14 +03:00
opensslrsa_link.c expose isc__crypto_md in isc/ossl_wrap.h 2026-02-02 11:50:14 +03:00
order.c Use ControlStatementsExceptControlMacros for SpaceBeforeParens 2025-08-19 07:58:33 +02:00
peer.c switch to RETERR where it wasn't being used 2025-12-03 13:45:43 -08:00
private.c Apply the dns_rdataset_cleanup patch through the codebase 2025-12-17 15:19:55 +01:00
probes-dns.d Use unique names for probes.d files 2025-09-24 13:18:13 +02:00
qp.c Fix formatting after refactor 2025-12-10 11:28:10 +01:00
qp_p.h Fix formatting after refactor 2025-12-10 11:28:10 +01:00
qpcache.c Remove the dead dns_expire_ttl code path and deletettl stats counter 2026-03-30 21:46:44 +02:00
qpcache_p.h Remove the heap memory context from QPcache 2026-03-30 21:46:44 +02:00
qpzone.c Fix wrong NSEC proof for empty non-terminals after IXFR 2026-04-03 06:33:31 +02:00
qpzone_p.h Replace per-zone lock buckets with global buckets 2025-07-09 15:27:38 +02:00
rcode.c standardize CHECK and RETERR macros 2025-12-03 13:26:28 -08:00
rdata.c use a standard CLEANUP macro 2025-12-03 13:45:43 -08:00
rdatalist.c dns_rdataset_* const parameters 2026-01-30 19:33:42 +01:00
rdataset.c dns_rdataset_* const parameters 2026-01-30 19:33:42 +01:00
rdatasetiter.c add DNS_DBITERATOR_FOREACH and DNS_RDATASETITER_FOREACH 2025-05-27 21:08:09 -07:00
rdataslab.c Remove TTL-based cleaning from the QPcache 2026-03-30 21:46:44 +02:00
rdataslab_p.h Use ISC_UxxTOyy_BE macros for {peek,get,put}_uint16 macros 2025-08-18 12:36:47 +02:00
rdatavec.c Fix benign race condition 2026-03-31 16:25:33 +02:00
rdatavec_p.h Fix formatting 2025-12-10 12:18:34 +01:00
remote.c simplify code around isc_mem_put() and isc_mem_free() 2025-05-28 17:22:32 -07:00
request.c Use sequential per-dispatch message IDs for TCP 2026-04-14 17:48:21 +02:00
resconf.c use a standard CLEANUP macro 2025-12-03 13:45:43 -08:00
resolver.c Rename view->hints to view->rootdb and rearm priming 2026-04-16 13:39:18 +02:00
result.c clean up result codes that are never used 2025-01-23 15:54:57 -08:00
rootns.c Rename view->hints to view->rootdb and rearm priming 2026-04-16 13:39:18 +02:00
rpz.c Fix a bug in rpz.c:del_name() 2026-03-14 13:01:55 +01:00
rriterator.c Apply the dns_rdataset_cleanup patch through the codebase 2025-12-17 15:19:55 +01:00
rrl.c Move zone set/get properties to own source file 2026-04-02 15:50:07 +02:00
sdlz.c dns_rdataset_* const parameters 2026-01-30 19:33:42 +01:00
skr.c Importing invalid SKR file might overflow the stack buffer 2026-02-24 19:44:57 +01:00
soa.c Simplify dns_name_init() 2025-02-25 12:17:34 +01:00
ssu.c Use ControlStatementsExceptControlMacros for SpaceBeforeParens 2025-08-19 07:58:33 +02:00
ssu_external.c Remove redundant parentheses from the return statement 2024-11-19 12:27:22 +01:00
stats.c Add low contention stats counter 2026-03-26 10:19:25 +01:00
tests Move all the unit tests to /tests/<libname>/ 2022-05-28 14:53:02 -07:00
time.c Use clang-format-22 to update formatting 2026-03-04 10:56:41 +01:00
tkey.c Fix GSS context leak on error paths in process_gsstkey() 2026-04-01 07:04:40 +02:00
transport.c switch to CHECK where it wasn't being used 2025-12-03 13:45:42 -08:00
tsig.c Fix off-by-one in TSIG generated key eviction 2026-04-01 07:04:39 +02:00
tsig_p.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
ttl.c standardize CHECK and RETERR macros 2025-12-03 13:26:28 -08:00
unreachcache.c Change the loopmgr to be singleton 2025-07-23 22:44:16 +02:00
update.c Move zone set/get properties to own source file 2026-04-02 15:50:07 +02:00
validator.c Use the delegation database in get_dsset() 2026-04-16 11:28:13 +02:00
view.c Rename view->hints to view->rootdb and rearm priming 2026-04-16 13:39:18 +02:00
xfrin.c Implement seamless TCP connection reuse in dns_dispatch 2026-04-14 17:48:13 +02:00
zone.c Move dns_zone_next/dns_zone_first to zonemgr 2026-04-08 14:27:06 +02:00
zone_p.h Rename private zone functions 2026-04-08 14:24:17 +02:00
zonefetch.c Move zone set/get properties to own source file 2026-04-02 15:50:07 +02:00
zonemgr.c Move dns_zone_next/dns_zone_first to zonemgr 2026-04-08 14:27:06 +02:00
zoneproperties.c Fix case-sensitivity bug in zone filename token-parsing 2026-04-16 11:37:02 +00:00
zoneverify.c Use the correct maximal compressed bit map buffer size 2026-04-10 15:45:01 +10:00
zt.c Move zone set/get properties to own source file 2026-04-02 15:50:07 +02:00