]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
5 months agoParse DNSKEY into a dnspython type in isctest.kasp.Key.dnskey
Nicki Křížek [Fri, 24 Oct 2025 14:47:59 +0000 (16:47 +0200)] 
Parse DNSKEY into a dnspython type in isctest.kasp.Key.dnskey

Previously, a DNSKEY string from keyfile was returned. This made the
function brittle for further processing, as the string would have to be
split up, concatenated, and TTL could be missing, making string indices
context-dependent.

Parse the DNSKEY rrset into a proper dnspython object and return it.
This makes the output more predictable and reliable, as all the
neccessary parsing is done by dnspython.

5 months agofix: dev: Add support for more linkers with LTO
Alessio Podda [Thu, 27 Nov 2025 12:36:57 +0000 (12:36 +0000)] 
fix: dev: Add support for more linkers with LTO

Link-time optimization requires close coordination between the compiler
and the linker, so not all combinations of compiler and linker support
it.

Previously, when compiling with Clang, we checked only for lld. With
this commit, we expand the list of supported linkers we check for.

Closes #5536

Merge branch '5536-more-supported-linker-ids' into 'main'

See merge request isc-projects/bind9!11022

5 months agoAdd auto LTO option
Alessio Podda [Tue, 30 Sep 2025 10:16:53 +0000 (12:16 +0200)] 
Add auto LTO option

Add an auto option to named-lto that disables weird setups like clang +
ld.bfd.

5 months agoRename -Dnamed-lto=off to -Dnamed-lto=disabled
Alessio Podda [Tue, 30 Sep 2025 07:19:00 +0000 (09:19 +0200)] 
Rename -Dnamed-lto=off to -Dnamed-lto=disabled

Meson boolean options are usually configured with enabled/disabled
instead of on/off. Make things more consistent with other meson options
by renaming -Dnamed-lto=off to -Dnamed-lto=disabled.

5 months agoAdd support for more linkers with LTO
Alessio Podda [Mon, 29 Sep 2025 06:20:00 +0000 (08:20 +0200)] 
Add support for more linkers with LTO

Link-time optimization requires close coordination between the compiler
and the linker, so not all combinations of compiler and linker support
it.

Previously, when compiling with Clang, we checked only for lld. With
this commit, we expand the list of supported linkers we check for.

5 months agochg: dev: Use malloc_usable_size()/malloc_size() for memory accounting
Ondřej Surý [Thu, 27 Nov 2025 11:42:09 +0000 (12:42 +0100)] 
chg: dev: Use malloc_usable_size()/malloc_size() for memory accounting

Restore usage of malloc_usable_size()/malloc_size(), but this time only
for memory accounting and statistics purposes.  This should reduce the
memory footprint in case of compilation without jemalloc as we don't
have to keep track of the allocated memory size ourselves.

Merge branch 'ondrej/use-malloc_usable_size-when-available' into 'main'

See merge request isc-projects/bind9!11271

5 months agoUse malloc_usable_size()/malloc_size() for memory accounting
Ondřej Surý [Mon, 24 Nov 2025 08:41:31 +0000 (09:41 +0100)] 
Use malloc_usable_size()/malloc_size() for memory accounting

Restore usage of malloc_usable_size()/malloc_size(), but this time only
for memory accounting and statistics purposes.  This should reduce the
memory footprint in case of compilation without jemalloc as we don't
have to keep track of the allocated memory size ourselves.

5 months agorem: dev: Remove internal memory filling in favor of jemalloc opt.junk
Ondřej Surý [Thu, 27 Nov 2025 09:40:28 +0000 (10:40 +0100)] 
rem: dev: Remove internal memory filling in favor of jemalloc opt.junk

Instead of having our own implementation of memory junk filling, rely on
the jemalloc opt.junk feature (set with MALLOC_CONF="junk:true").

Merge branch 'ondrej/remove-memfill' into 'main'

See merge request isc-projects/bind9!11270

5 months agoEnable junk filling via jemalloc option in the CI
Ondřej Surý [Wed, 26 Nov 2025 10:45:03 +0000 (11:45 +0100)] 
Enable junk filling via jemalloc option in the CI

Since the filling memory with junk patterns have been removed from ISC
memory context in favor of jemalloc opt.junk option, enable the jemalloc
behaviour by default in the GitLab CI.

5 months agoRemove internal memory filling in favor of jemalloc opt.junk
Ondřej Surý [Mon, 24 Nov 2025 08:32:51 +0000 (09:32 +0100)] 
Remove internal memory filling in favor of jemalloc opt.junk

Instead of having our own implementation of memory junk filling, rely on
the jemalloc opt.junk feature (set with MALLOC_CONF="junk:true").

5 months agochg: nil: Add optional debugging output for fetch context reference counting
Ondřej Surý [Thu, 27 Nov 2025 09:39:37 +0000 (10:39 +0100)] 
chg: nil: Add optional debugging output for fetch context reference counting

As the fetch context reference counting was converted to userspace RCU
reference counting, the ability to debug the reference counting was
lost.  Restore the debugging by adding the optional compile-time enabled
debugging output again.

Merge branch 'ondrej/add-tracing-to-fctx-reference-counting' into 'main'

See merge request isc-projects/bind9!11230

5 months agoAdd optional debugging output for fetch context reference counting
Ondřej Surý [Thu, 23 Oct 2025 11:11:45 +0000 (13:11 +0200)] 
Add optional debugging output for fetch context reference counting

As the fetch context reference counting was converted to userspace RCU
reference counting, the ability to debug the reference counting was
lost.  Restore the debugging by adding the optional compile-time enabled
debugging output again.

5 months agochg: nil: Split qctx_destroy() into qctx_deinit() and qctx_destroy()
Ondřej Surý [Thu, 27 Nov 2025 09:38:58 +0000 (10:38 +0100)] 
chg: nil: Split qctx_destroy() into qctx_deinit() and qctx_destroy()

The qctx_destroy() only needs to be called on allocated memory and
qctx_deinit() needs to be called always.  Also remove .allocated member
from the query_ctx_t structure.

Merge branch 'ondrej/add-qctx-deinit' into 'main'

See merge request isc-projects/bind9!11273

5 months agoSplit qctx_destroy() into qctx_deinit() and qctx_destroy()
Ondřej Surý [Mon, 24 Nov 2025 09:49:18 +0000 (10:49 +0100)] 
Split qctx_destroy() into qctx_deinit() and qctx_destroy()

The qctx_destroy() only needs to be called on allocated memory and
qctx_deinit() needs to be called always.  Also remove .allocated member
from the query_ctx_t structure.

5 months agofix: nil: Remove .delegating flag from the qpcache
Ondřej Surý [Thu, 27 Nov 2025 09:37:36 +0000 (10:37 +0100)] 
fix: nil: Remove .delegating flag from the qpcache

The .delegating flag was only set, but never used in the dns_qpcache.
Remove it completely together with the code that was locking the node
to set the flag if the added type was DNAME.

Merge branch 'ondrej/remove-delegating-from-qpcache' into 'main'

See merge request isc-projects/bind9!10980

5 months agoRemove .delegating flag from the qpcache
Ondřej Surý [Tue, 16 Sep 2025 13:09:14 +0000 (15:09 +0200)] 
Remove .delegating flag from the qpcache

The .delegating flag was only set, but never used in the dns_qpcache.
Remove it completely together with the code that was locking the node
to set the flag if the added type was DNAME.

5 months agochg: dev: Use atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer
Ondřej Surý [Thu, 27 Nov 2025 09:31:57 +0000 (10:31 +0100)] 
chg: dev: Use atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer

Upstream has removed the atomics implementation of CMM_LOAD_SHARED and
CMM_STORE_SHARED as these can be used also with non-stdatomics types.
As we only use the CMM api with stdatomics types, we can restore the
previous behaviour to prevent ThreadSanitizer warnings.

Closes #5660

Merge branch '5660-use-atomics-for-CMM-api-with-thread-sanitizer' into 'main'

See merge request isc-projects/bind9!11288

5 months agoUse atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer
Ondřej Surý [Wed, 26 Nov 2025 16:10:37 +0000 (17:10 +0100)] 
Use atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer

Upstream has removed the atomics implementation of CMM_LOAD_SHARED and
CMM_STORE_SHARED as these can be used also with non-stdatomics types.
As we only use the CMM api with stdatomics types, we can restore the
previous behaviour to prevent ThreadSanitizer warnings.

5 months agochg: ci: Fix wiki.wireshark.org links in doc/arm
Andoni Duarte [Wed, 26 Nov 2025 14:06:24 +0000 (14:06 +0000)] 
chg: ci: Fix wiki.wireshark.org links in doc/arm

Fix the broken link https://wiki.wireshark.org/TLS#tls-decryption to
simply https://wiki.wireshark.org/TLS. The links in the wireshark
wiki have been updated somewhen after october 2025 as shown by
https://web.archive.org/web/20251008165051/https://wiki.wireshark.org/TLS#tls-decryption and https://wiki.wireshark.org/TLS.

Merge branch 'andoni/fix-wireshark-links-in-doc-arm' into 'main'

See merge request isc-projects/bind9!11284

5 months agoUpdate wiki.wireshark.org link in doc/arm
Andoni Duarte Pintado [Wed, 26 Nov 2025 09:59:04 +0000 (10:59 +0100)] 
Update wiki.wireshark.org link in doc/arm

Fix the broken link https://wiki.wireshark.org/TLS#tls-decryption.
Since their TOC also has the wrong anchor, we remove it altogether,
i.e. https://wiki.wireshark.org/TLS.

5 months agochg: ci: Adjust respdiff threshold
Nicki Křížek [Tue, 25 Nov 2025 14:51:21 +0000 (15:51 +0100)] 
chg: ci: Adjust respdiff threshold

Closes #5649

Merge branch 'nicki/respdiff-threshold' into 'main'

See merge request isc-projects/bind9!11262

5 months agoIncrease the threshold for respdiff-third-party
Nicki Křížek [Fri, 21 Nov 2025 14:05:36 +0000 (15:05 +0100)] 
Increase the threshold for respdiff-third-party

There are multiple reasons for the increased amount of differences we've
been seeing lately and for the raise of the threshold:

1. Recent hardening against cache poisoning (CVE-2025-40778) have
   uncovered a few edge cases where the domain can't be properly
   resolved with the new protections in place, but those are issues with
   upstream configuration and DNS setup.
2. The same hardening magnified some behaviour differences between 9.21
   and older versions. Some misconfigured domains, which can be resolved
   with BIND 9.20 and older are no longer resolvable in 9.21+. This can
   be again attributed to upstream DNS misconfiguration. See #5649.
3. A change in the respdiff CI job to include timeouts in the
   comparison, or rather, increasing the timeouts to resolve the
   previously timed out queries, which are typically failures. With the
   previous job configuration, those were omitted from comparison,
   because they were timeouts. Now, there should be no timeouts, but
   there is a slight increase in the amount of differences for the
   threshold evaluation.

5 months agoSet stricter respdiff:recent-named threshold
Nicki Křížek [Fri, 21 Nov 2025 13:35:57 +0000 (14:35 +0100)] 
Set stricter respdiff:recent-named threshold

This job is testing the current BIND implementation against the latest
released version. Unless there has been a behaviour change, there should
be no difference.

In practice, there is a small number of differences caused by upstream
discrepencies. Some of those cause "upstream unstable" answers which are
excluded from the results, but statistically, some of those will end up
being detected as differences on the resolver under test.

Currently, there seems to be about 300 upstream unstable answers with
typically around 50-60 differences. Setting the threshold to 0.1 should
be stable enough to pass if there are no changes, yet sensitive enough
to detect even fairly small changes to behaviour.

5 months agochg: test: Disable 'doh' unit test on Enterprise Linux 8
Michal Nowak [Tue, 25 Nov 2025 12:29:26 +0000 (13:29 +0100)] 
chg: test: Disable 'doh' unit test on Enterprise Linux 8

Disable test that fails for months on this platform.

Closes #5448

Merge branch '5448-disable-doh-unit-test-on-el8' into 'main'

See merge request isc-projects/bind9!11276

5 months agoDisable 'doh' unit test on Enterprise Linux 8
Michal Nowak [Tue, 25 Nov 2025 09:53:17 +0000 (10:53 +0100)] 
Disable 'doh' unit test on Enterprise Linux 8

Disable test that fails for months on this platform.

5 months agofix: nil: Restore recording ns_statscounter_edns0out
Mark Andrews [Tue, 25 Nov 2025 04:05:11 +0000 (15:05 +1100)] 
fix: nil: Restore recording ns_statscounter_edns0out

Change d5e4684b3defdd79fe4b366c2da88bdcd7a4c5d9 accidentally caused
ns_statscounter_edns0out to no longer be incremented.  This has been
corrected.

Closes #5654

Merge branch '5654-restore-recording-ns_statscounter_edns0out' into 'main'

See merge request isc-projects/bind9!11267

5 months agoCheck nsstats statistics in bind9.xml
Mark Andrews [Mon, 24 Nov 2025 01:42:01 +0000 (12:42 +1100)] 
Check nsstats statistics in bind9.xml

5 months agoRestore recording ns_statscounter_edns0out
Mark Andrews [Mon, 24 Nov 2025 00:33:30 +0000 (11:33 +1100)] 
Restore recording ns_statscounter_edns0out

Change d5e4684b accidentally caused ns_statscounter_edns0out to no
longer be incremented.  This has been corrected.

5 months agofix: usr: Fix bug where zone switches from NSEC3 to NSEC after retransfer
Matthijs Mekking [Mon, 24 Nov 2025 13:23:21 +0000 (13:23 +0000)] 
fix: usr: Fix bug where zone switches from NSEC3 to NSEC after retransfer

When a zone is re-transferred, but the zone journal on an inline-signing secondary is out of sync, the zone could fall back to using NSEC records instead of NSEC3. This has been fixed.

Closes #5527

Merge branch '5527-retransfer-nsec3-bug' into 'main'

See merge request isc-projects/bind9!11226

5 months agoSkip private records when syncing secure db
Matthijs Mekking [Fri, 7 Nov 2025 14:56:54 +0000 (15:56 +0100)] 
Skip private records when syncing secure db

When synchronizing the secure database, we skip DNSSEC records that
BIND 9 maintains with inline-signing. We should also skip private
RDATA type records that are used to track the current state of a
zone-signing process.

5 months agoTest retransfer with NSEC3 policy
Matthijs Mekking [Thu, 6 Nov 2025 16:32:51 +0000 (17:32 +0100)] 
Test retransfer with NSEC3 policy

If the primary has been updated, but the secondary has not been
notified, the journal will go out of date. An 'rndc retransfer' causes
the zone to force an AXFR, removing and rebuilding zone and journal
files.

This test reproduces a bug that in such scenario, an NSEC3 signed zone
falls back to NSEC.

5 months agofix: nil: Do not log no root hints of _bind chaos view
Colin Vidal [Sat, 22 Nov 2025 03:51:30 +0000 (04:51 +0100)] 
fix: nil: Do not log no root hints of _bind chaos view

The "no root hints for view X" message must not be shown for the default
_bind/CH view. However, it is shown since 27c4f68dcc1 (part of effective
configuration changes).

The reason is that since 27c4f68dcc1, `configure_views()` now processes
a single list of views, which contains both builtin and user views as
they are both part of the effective configuration. The changes omit the
(now removed, since 6b5f714e53) `need_hints` bool that was disabling the
warning for the builtin view (_bind/CH).

This disable that log again when configuring _bind/CH view.

Merge branch 'colin/nohintswarn-bindchaos' into 'main'

See merge request isc-projects/bind9!11264

5 months agodo not log "no root hints for view '_bind'"
Colin Vidal [Fri, 21 Nov 2025 14:07:54 +0000 (15:07 +0100)] 
do not log "no root hints for view '_bind'"

The "no root hints for view X" message must not be shown for the default
_bind/CH view. However, it is shown since 27c4f68dcc1 (part of effective
configuration changes).

The reason is that since 27c4f68dcc1, `configure_views()` now processes
a single list of views, which contains both builtin and user views as
they are both part of the effective configuration. Those changes omitted
the `need_hints` bool that disabled the warning for the builtin view.
This commit silences the log message again.

5 months agochg: dev: add dns_message functions to set EDNS options
Evan Hunt [Fri, 21 Nov 2025 21:18:25 +0000 (21:18 +0000)] 
chg: dev: add dns_message functions to set EDNS options

The new `dns_message_ednsinit()` and `dns_message_ednsaddopt()` functions
allow EDNS options to be added to a message one at a time; it is no
longer necessary to construct a full array of EDNS options and set
them all at once.

This allows us to simplify EDNS option handling code, and in the
future it wlil allow plugins to add EDNS options to existing
messages.

Merge branch 'each-refactor-message-edns' into 'main'

See merge request isc-projects/bind9!11261

5 months agoremove dns_message_buildopt
Evan Hunt [Fri, 21 Nov 2025 07:33:29 +0000 (23:33 -0800)] 
remove dns_message_buildopt

now that the EDNS state is stored within dns_message_t, it's no longer
necessary to have a public API call to build an opt rdataset; we can
just have dns_message_setopt() build the opt record internally.

5 months agoadd dns_message API to add EDNS options
Evan Hunt [Wed, 19 Nov 2025 07:29:12 +0000 (23:29 -0800)] 
add dns_message API to add EDNS options

The new dns_message_ednsinit() and dns_message_ednsaddopt() functions
allow EDNS options to be added to a message one at a time; it is no
longer necessary to construct a full array of EDNS options and set
them all at once.

This allows us to simplify EDNS option handling code, and in the
future it wlil allow plugins to add EDNS options to existing
messages.

5 months agochg: test: Rewrite nsec3 system test to pytest
Matthijs Mekking [Fri, 21 Nov 2025 14:03:05 +0000 (14:03 +0000)] 
chg: test: Rewrite nsec3 system test to pytest

Merge branch 'matthijs-pytestify-nsec3' into 'main'

See merge request isc-projects/bind9!11030

5 months agoWait longer before keymgr is done
Matthijs Mekking [Fri, 21 Nov 2025 08:49:18 +0000 (09:49 +0100)] 
Wait longer before keymgr is done

To check if the key managing for a zone is done, we check a log message.
On some machines, with many zones this may take some time.

Increate the timeout to a minute. Note that most zones will continue
their test case much faster, but with many zones there may be some
straggling.

5 months agoWait until zones are signed before reconfig
Matthijs Mekking [Fri, 21 Nov 2025 08:47:08 +0000 (09:47 +0100)] 
Wait until zones are signed before reconfig

In order to make the tests run reliable, first make sure the key
managing for all the zones has finished before doing running the
reconfig command.

5 months agoOnly render required zones in config for nsec3 tests
Nicki Křížek [Thu, 20 Nov 2025 17:09:58 +0000 (18:09 +0100)] 
Only render required zones in config for nsec3 tests

When all zones are configured, regardless of whether the test module
actually uses them, it makes debugging the logs needlessly more
complicated, as there is a bunch of stuff going on that is completely
unrelated to the test.

Define a list of tested zones in each test module and only render the
named.conf with those zones defined.

5 months agoMove nsec3-change.kasp test to separate module
Matthijs Mekking [Fri, 14 Nov 2025 15:31:42 +0000 (16:31 +0100)] 
Move nsec3-change.kasp test to separate module

This zone has a specific corner case to be tested during the setup.
Move it to a separate module so it is less convoluted.

5 months agoMove check_nsec3_case to common code
Matthijs Mekking [Thu, 13 Nov 2025 18:54:03 +0000 (19:54 +0100)] 
Move check_nsec3_case to common code

With the nsec and nsec3 test cases being nearly identical for all
modules, these can be be unified and moved to common.py.

5 months agoClean up shell tests remnants
Matthijs Mekking [Tue, 30 Sep 2025 13:12:45 +0000 (15:12 +0200)] 
Clean up shell tests remnants

Now that all tests are covered by pytest, we can remove the remnants
of the shell test script.

5 months agoRewrite nsec3 system test to pytest (4/4)
Matthijs Mekking [Tue, 30 Sep 2025 13:11:22 +0000 (15:11 +0200)] 
Rewrite nsec3 system test to pytest (4/4)

Convert the final nsec3 system test case that deals with empty
non-terminals. This is a regression test case for GL #5108.

5 months agoRewrite nsec3 system test to pytest (3/4)
Matthijs Mekking [Tue, 30 Sep 2025 13:06:45 +0000 (15:06 +0200)] 
Rewrite nsec3 system test to pytest (3/4)

This converts two test cases:

1. A zone that previously failed to load is now fixed. Make sure the
   zone is signed correctly with the right NSEC3 parameters.

2. Test case to ensure the salt is the same after a restart, i.e. no
   re-salting takes place. Previously we only tested with salt length
   0, this commit adds a test case for salt length 8 as well.

5 months agoRewrite nsec3 system test to pytest (2/4)
Matthijs Mekking [Tue, 30 Sep 2025 11:25:22 +0000 (13:25 +0200)] 
Rewrite nsec3 system test to pytest (2/4)

This converts the nsec3 system test cases after to reconfiguring the
name server.

Two extra test for nsec3-change.kasp is updated. It depends on the
zone being updated, and a reconfig. This test code is moved to
tests_nsec3_reconfig.py.

Furthermore, an additional 'rndc signing -nsec3param' error test
case has been added.

5 months agoImprove check_auth_nsec3 salt checking
Matthijs Mekking [Tue, 30 Sep 2025 10:33:14 +0000 (12:33 +0200)] 
Improve check_auth_nsec3 salt checking

Since we know the salt after checking the NSEC3PARAM, we might as well
check the NSEC3 records on the NXDOMAIN response that the salt matches.

5 months agoMove parts into a common module
Matthijs Mekking [Tue, 30 Sep 2025 09:48:30 +0000 (11:48 +0200)] 
Move parts into a common module

Some constants and test functionality are the same for test cases
prior and after reconfiguration. Move these into a common module.

5 months agoConvert "in"-style templates to jinja
Matthijs Mekking [Tue, 30 Sep 2025 09:34:13 +0000 (11:34 +0200)] 
Convert "in"-style templates to jinja

Change the named.conf templating to make use of jinja template
rendering. The ns2 server is trivial. The ns3 server configuration
structure has changed:

The common configuration is moved out of named-fips.conf.

The main named.conf file is in named.conf.j2. It always includes the
common part, named-common.conf.j2, and the FIPS part,
named-fips.conf.j2.

The named-fips.conf.j2 and named-rsasha1.conf.j2 templates are
rendered differently depending on the reconfiged status. Mainly the
dnssec-policy for zones are different after reconfiguration, but there
are some other changes to, for example some zones change their
inline-signing setting.

Some zones only exist prior or after the configuration.

Finally, this is a bit hackish: If RSASHA1 is supported, named.conf
includes "named-rsasha1.conf", otherwise it includes the deliberately
empty "named-rsasha0.conf".

5 months agoRewrite nsec3 system test to pytest (1/4)
Matthijs Mekking [Tue, 30 Sep 2025 07:13:38 +0000 (09:13 +0200)] 
Rewrite nsec3 system test to pytest (1/4)

This converts all the nsec3 system test cases prior to reconfiguring the
name server. There are two main classes, one that tests the zone is
correctly signed with NSEC, the other with NSEC3.

Two extra tests for nsec3-dynamic-update-inline.kasp and
nsec3-change.kasp are also rewritten. For the former, we need to
change the 'nsupdate' definition to be able to set the expected RCODE.

5 months agofix: usr: Fix allow-recursion/allow-query-cache inheritance
Evan Hunt [Thu, 20 Nov 2025 20:19:52 +0000 (20:19 +0000)] 
fix: usr: Fix allow-recursion/allow-query-cache inheritance

The merging of the user options and defaults into the effective configuration broke the mutual inheritance of the `allow-recursion`, `allow-query`, and `allow-query-cache` ACLs, and of the `allow-recursion-on` and `allow-query-cache-on` ACLs. This has been fixed.

Closes #5647

Merge branch '5647-allow-recursion-inheritance' into 'main'

See merge request isc-projects/bind9!11254

5 months agofix ACL settings when merging views
Evan Hunt [Thu, 20 Nov 2025 06:09:53 +0000 (22:09 -0800)] 
fix ACL settings when merging views

when merging view objects into the effective configuration, add
allow-query-cache, allow-recursion, allow-query-cache-on and
allow-recursion-on ACLs as needed to reflect the way those
options inherit from each other.

this means the effective configuration is now correct for each
view.  ACLs no longer need to be corrected when applying the
configuration, and the actual effective ACL values will be
displayed in "rndc showconf" and "named-checkconf -pe".

5 months agofix allow-recursion/allow-query-cache inheritance
Evan Hunt [Thu, 20 Nov 2025 01:52:39 +0000 (17:52 -0800)] 
fix allow-recursion/allow-query-cache inheritance

the merging of options and defaults into the effective configuration
broke the mutual inheritance of the allow-recursion, allow-query, and
allow-query-cache ACLs, and of the allow-recursion-on and
allow-query-cache-on ACLs.

this has been corrected by adding a 'cloned' flag to the cfg_obj
structure to indicate whether it was configured explicitly or
cloned from the defaults during parsing. we can then adjust the
ACLs while configuring a view, favoring user-configured values
when they're available over cloned defaults.

currently the adjustments to the ACLs are done in configure_view();
later they'll be moved into the effective configuration and this
special handling can be removed.

5 months agoadd a test for allow-recursion/allow-query-cache inheritance
Evan Hunt [Thu, 20 Nov 2025 00:35:31 +0000 (16:35 -0800)] 
add a test for allow-recursion/allow-query-cache inheritance

allow-recursion is set to "none" in the options block and to
"any" in the view.  allow-query-cache in the view should inherit
the "any", not the "none". (currently this test does not pass.)

5 months agofix: dev: Attach socket before async streamdns_resume_processing
Colin Vidal [Thu, 20 Nov 2025 17:52:29 +0000 (18:52 +0100)] 
fix: dev: Attach socket before async streamdns_resume_processing

Call to `streamdns_resume_processing` is asynchronous but the socket
passed as argument is not attached when scheduling the call.

While there is no reproducible way (so far) to make the socket reference
number down to 0 before `streamdns_resume_processing` is called, attach
the socket before scheduling the call. This guard against an hypothetic
case where, for some reasons, the socket refcount would reach 0, and be
freed from memory when `streamdns_resume_processing` is called.

Closes #5620

Merge branch '5620-attach-socket-streamdns_resume_processing' into 'main'

See merge request isc-projects/bind9!11247

5 months agoattach socket before async streamdns_resume_processing
Colin Vidal [Tue, 18 Nov 2025 09:31:24 +0000 (10:31 +0100)] 
attach socket before async streamdns_resume_processing

Call to `streamdns_resume_processing` is asynchronous but the socket
passed as argument is not attached when scheduling the call.

While there is no reproducible way (so far) to make the socket reference
number down to 0 before `streamdns_resume_processing` is called, attach
the socket before scheduling the call. This guard against an hypothetic
case where, for some reasons, the socket refcount would reach 0, and be
freed from memory when `streamdns_resume_processing` is called.

5 months agochg: usr: Reduce the number of outgoing queries
Ondřej Surý [Thu, 20 Nov 2025 12:32:42 +0000 (13:32 +0100)] 
chg: usr: Reduce the number of outgoing queries

Reduces the number of outgoing queries when resolving the nameservers
for delegation points.  This helps the DNS resolver with cold cache
resolve client queries with complex delegation chains and redirections.

Merge branch 'ondrej/fctx_getaddresses' into 'main'

See merge request isc-projects/bind9!11148

5 months agoRefactor fctx_getaddresses() into couple smaller functions
Ondřej Surý [Wed, 19 Nov 2025 07:57:09 +0000 (08:57 +0100)] 
Refactor fctx_getaddresses() into couple smaller functions

The fctx_getaddresses() was lengthy and little bit confusing with
goto statements.  Split the single function into smaller parts:
one for forwarders, one for nameservers and one for alternates.

5 months agoReduce the number of outgoing queries
Ondřej Surý [Thu, 23 Oct 2025 11:11:45 +0000 (13:11 +0200)] 
Reduce the number of outgoing queries

The dns_resolver mode of operation is to resolve all the domains as it
iterates the DNS tree to fill up the cache as quickly as possible.

This commit reduces the number of outgoing queries by reducing the
number of remote fetches started for the nameserver addresses resolution
via dns_adb_createfind() to a smaller number per depth of the recursion
since the delegation point (3 2 1 0) - where 0 means only create fetch
on demand if we don't have any addresses yet.

5 months agofix: usr: AMTRELAY type 0 presentation format handling was wrong
Mark Andrews [Thu, 20 Nov 2025 08:46:10 +0000 (19:46 +1100)] 
fix: usr: AMTRELAY type 0 presentation format handling was wrong

RFC 8777 specifies a placeholder value of "." for the gateway field when the
gateway type is 0 (no gateway).  This was not being checked for nor emitted
when displaying the record. This has been corrected.

Instances of this record will need the placeholder period added to them when upgrading.

Closes #5639

Merge branch '5639-fix-atmrelay-type-0-support' into 'main'

See merge request isc-projects/bind9!11240

5 months agoAMTRELAY type 0 presentation format handling was wrong
Mark Andrews [Fri, 14 Nov 2025 01:59:29 +0000 (12:59 +1100)] 
AMTRELAY type 0 presentation format handling was wrong

RFC 8777 specifies a placeholder value of "." for the gateway field
when the gateway type is 0 (no gateway).

5 months agofix: dev: Fix building on OpenBSD 7.8 with Clang 19.1.7
Mark Andrews [Thu, 20 Nov 2025 02:40:11 +0000 (13:40 +1100)] 
fix: dev: Fix building on OpenBSD 7.8 with Clang 19.1.7

Add the OpenBSD and Clang combination to the existing kludge to
recognize size_t and uintXX_t types as same when using a generic.

Closes #5635

Merge branch '5635-openbsd-size_t-generics-fix' into 'main'

See merge request isc-projects/bind9!11235

5 months agoFix building on OpenBSD 7.8 with Clang 19.1.7
Aram Sargsyan [Tue, 11 Nov 2025 13:49:14 +0000 (13:49 +0000)] 
Fix building on OpenBSD 7.8 with Clang 19.1.7

Add the OpenBSD and Clang combination to the existing kludge to
recognize size_t and uintXX_t types as same when using a generic.

5 months agofix: nil: Remove install_rpath from synthrecord plugin
Ondřej Surý [Wed, 19 Nov 2025 22:07:39 +0000 (23:07 +0100)] 
fix: nil: Remove install_rpath from synthrecord plugin

See 0a56c71865f60127f1d0ce4c0b6408f747cde846 for more details.

Merge branch 'ondrej/remove-rpath-from-synthrecord' into 'main'

See merge request isc-projects/bind9!11253

5 months agoRemove install_rpath from synthrecord plugin
Ondřej Surý [Wed, 19 Nov 2025 21:07:30 +0000 (22:07 +0100)] 
Remove install_rpath from synthrecord plugin

See 0a56c71865f60127f1d0ce4c0b6408f747cde846 for more details.

5 months agoMerge tag 'v9.21.15'
Michal Nowak [Wed, 19 Nov 2025 17:38:37 +0000 (17:38 +0000)] 
Merge tag 'v9.21.15'

5 months agofix: test: Include <stdarg.h> in byaddr_test.c
Mark Andrews [Wed, 19 Nov 2025 00:56:16 +0000 (11:56 +1100)] 
fix: test: Include <stdarg.h> in byaddr_test.c

Closes #5637

Merge branch '5637-include-stdarg-h-in-byaddr-test-c' into 'main'

See merge request isc-projects/bind9!11241

5 months agoInclude <stdarg.h> in byaddr_test.c
Mark Andrews [Fri, 14 Nov 2025 02:34:45 +0000 (13:34 +1100)] 
Include <stdarg.h> in byaddr_test.c

5 months agochg: dev: Remove exclusive mode when scheduling zone load
Colin Vidal [Tue, 18 Nov 2025 11:16:39 +0000 (12:16 +0100)] 
chg: dev: Remove exclusive mode when scheduling zone load

Remove exclusive mode when scheduling the zone load, as it is no longer necessary;
data that can be read or written by multiple threads are locked or atomic.

The detection of the post zone DB loading logic has been refactored
to take into account the fact that zone databases may be loaded before the
function scheduling the loads.

Merge branch 'colin/remove-exclusive-zone-load' into 'main'

See merge request isc-projects/bind9!11231

5 months agorefactor detection of zone DB load completion
Colin Vidal [Mon, 10 Nov 2025 14:14:44 +0000 (15:14 +0100)] 
refactor detection of zone DB load completion

Because the asynchronous loading logic expected all jobs to be scheduled
then to be run (because it used to be scheduled during the exclusive
mode) and because all jobs are scheduled on various threads, there were
random situations where load_zones() would return after the scheduled
DB zone loading actually ran. In such cases, the zl->refs ref counter
in view_loaded() wouldn't go down to 0 and the remaining task to do
once all zones were loaded was never called. In particular,
server->reload_status kept the NAMED_RELOAD_PENDING state.

This problem is fixed by handling zoneload_t as a ref-counted object,
shared between load_zones() and each instance of scheduled zone DB
loading. Its destructor function is actually the content of
view_loaded() in the case the zt->refs went to 0. This ensures a
correct post-loading routine to be called once the last load is done.

5 months agoharden configloading system test
Colin Vidal [Mon, 10 Nov 2025 11:07:18 +0000 (12:07 +0100)] 
harden configloading system test

The configloading system script attempts multiple `rndc
{reconfig,reload}` commands without ensuring the system left
exclusive mode; which normally raise an RNDC error as the server is
currently reloading already. This used to work because the request was
enqueued while the server was in exclusive mode, and was processed
after the server `reload_status` was reset to `NAMED_RELOAD_DONE`.

Due to the fact the exclusive mode is not retaken after
`apply_configuration()` by `load_zones()`, the scheduling of
pending tasks is changed and, regularly, the RNDC command sent by the
test is processed before `NAMED_RELOAD_DONE` is set. This is the same
kind of issue the views system tests had, solved by
`4b2dcb3128fbd5af4609a5a73aeeee1f93bde237`

Fix the problem by waiting for a log line matching the end of
the reloading phase.

5 months agoset `reload_status` to fail before logging it
Colin Vidal [Mon, 10 Nov 2025 12:11:05 +0000 (13:11 +0100)] 
set `reload_status` to fail before logging it

The `reload_status` is set to `NAMED_RELOAD_FAILED` after the log line is
printed about this change. Update `reload_status` first, to avoid
(unlikely) case where a test waiting for this log line would attempt a
RNDC reload query but it would be processed by `named` before the status
is updated.

5 months agoremove exclusive mode when scheduling zone load
Colin Vidal [Mon, 10 Nov 2025 08:49:06 +0000 (09:49 +0100)] 
remove exclusive mode when scheduling zone load

Remove the exclusive mode when scheduling the zone load right after
(re)loading `named` configuration, as there is no reason anymore to
schedule zone loading while the exclusive lock is held. Data which can
be read or written by multiple threads are locked or atomic.

5 months agochg: usr: Enforce bounds of prefetch configuration option
Colin Vidal [Tue, 18 Nov 2025 10:04:49 +0000 (11:04 +0100)] 
chg: usr: Enforce bounds of prefetch configuration option

The prefetch configuration option now enforces boundaries. The configuration (including when using `named-checkconf`) now fails if the trigger (first value) is above 10, and if the eligibility (second optional value) isn't at least six seconds greater than the trigger value.

Merge branch 'colin/prefetch-enforcebounds' into 'main'

See merge request isc-projects/bind9!11243

5 months agoenforces bounds of prefetch statement
Colin Vidal [Mon, 17 Nov 2025 11:33:48 +0000 (12:33 +0100)] 
enforces bounds of prefetch statement

The prefetch statement now enforces its bounds. The configuration
(including `named-checkconf`) now fails if the trigger (first value) is
above 10, or if the eligibility (second optional value) isn't at least
six seconds more than the trigger value.

5 months agochg: usr: Enforces the fact that catalog-zone can not be used in non IN views
Colin Vidal [Tue, 18 Nov 2025 09:08:57 +0000 (10:08 +0100)] 
chg: usr: Enforces the fact that catalog-zone can not be used in non IN views

Catalog-zones can't be used in a view which is not from the IN class.
This is now enforced as the server won't load (instead of loading
without the catalog-zone) if such configuration is detected. This
configuration error is now also caught by `named-checkconf`.

Merge branch 'colin/catz-enforce-non-in' into 'main'

See merge request isc-projects/bind9!11245

5 months agoenforces that catalog-zone can't be used in non IN views
Colin Vidal [Mon, 17 Nov 2025 16:00:27 +0000 (17:00 +0100)] 
enforces that catalog-zone can't be used in non IN views

Catalog-zones can't be used in view which are not from the IN class.
This is now enforced as the server won't load (instead of loading
without the catalog-zone). This configuration error is now also caught
by `named-checkconf`.

5 months agoremove need_hints parameters to configure_view
Colin Vidal [Mon, 17 Nov 2025 14:23:58 +0000 (15:23 +0100)] 
remove need_hints parameters to configure_view

The `configure_view()` `need_hints` is removed as it this function was
always called with the value `true`.

The `need_hints` wasn't even used in the function. The only thing it was
actually used was to throw a warning which can be done simply in an
`else` condition branch.

Moreoever, in the case of catalog zones and response-policy, it fixes a
possible bug that would affect root zones, as those wouldn't be reverted
back to their previous version in case of the view fails to load
(during a server reconfiguration).

5 months agofix: nil: Add showconf in RNDC usage
Colin Vidal [Tue, 18 Nov 2025 09:07:20 +0000 (10:07 +0100)] 
fix: nil: Add showconf in RNDC usage

The `rndc -h` command was missing the newly introduced `showconf`
commands. Adding it.

Merge branch 'colin/fix-rndc-usage' into 'main'

See merge request isc-projects/bind9!11246

5 months agoadd showconf in RNDC usage
Colin Vidal [Tue, 18 Nov 2025 08:23:10 +0000 (09:23 +0100)] 
add showconf in RNDC usage

The `rndc -h` command was missing the newly introduced `showconf`
commands. Adding it.

5 months agochg: dev: No effective config as text if allow-new-zones is yes
Colin Vidal [Tue, 18 Nov 2025 08:16:57 +0000 (09:16 +0100)] 
chg: dev: No effective config as text if allow-new-zones is yes

Do not save the text version of the effective configuration when
`allow-new-zones` is enabled, as in that case the object tree can
be printed on demand, reducing unnecessary memory consumption.

Merge branch 'colin/no-effective-config-as-text-allownewzones' into 'main'

See merge request isc-projects/bind9!11242

5 months agono effective config as text if allow-new-zones is yes
Colin Vidal [Mon, 17 Nov 2025 10:06:34 +0000 (11:06 +0100)] 
no effective config as text if allow-new-zones is yes

Do not save the textual version of the effective configuration when
`allow-new-zones` is enabled, as it can be printed on-demand. This
enable to reduce the memory footprint of ~70MB on huge configurations
(1M zones).

6 months agofix: dev: Remove holes in `dns_zoneflg_t` enum
Colin Vidal [Thu, 13 Nov 2025 14:33:02 +0000 (15:33 +0100)] 
fix: dev: Remove holes in `dns_zoneflg_t` enum

The `dns_zoneflg_t` enum defined multiple possible flags for a zone, but
contains numerous holes (likely from flag removed in the past). This
fixes the holes, and use a bit-shift and decimal notation to make holes
easier to spot.

Merge branch 'colin/remove-zoneflag-holes' into 'main'

See merge request isc-projects/bind9!11189

6 months agoremove holes in `dns_zoneflg_t` enum
Colin Vidal [Fri, 31 Oct 2025 09:32:53 +0000 (10:32 +0100)] 
remove holes in `dns_zoneflg_t` enum

`dns_zoneflg_t` enum defined multiple possible flags for a zone, but
contains numerous holes (likely from flag removed in the past). This
fixes the holes, and use a bit-shift and decimal notation to make holes
easier to spot.

6 months agofix: dev: Save configuration as text
Colin Vidal [Wed, 12 Nov 2025 10:40:33 +0000 (11:40 +0100)] 
fix: dev: Save configuration as text

A `cfg_obj_t` object tree structure takes up considerably more space than the equivalent canonical text. If `allow-new-zones` is disabled and catalog zones are not in use, then we don't need the object tree. By storing the configuration in text format, we can use less memory, and `rndc showconf` and `rndc showzone` still work.

Merge branch 'each-cfg-as-text' into 'main'

See merge request isc-projects/bind9!11236

6 months agosave effective configuration as text
Evan Hunt [Wed, 12 Nov 2025 02:50:23 +0000 (18:50 -0800)] 
save effective configuration as text

the effective configuration tree is now detached if allow-new-zones
or catalog-zones aren't enabled in any views. this reduces memory
consumption while still allowing "rndc showconf -effective" to work.

6 months agosave zone configuration as text
Evan Hunt [Tue, 11 Nov 2025 23:46:23 +0000 (15:46 -0800)] 
save zone configuration as text

as previously mentioned in commit c65b2868ab, a cfg_obj_t
configuration tree structure takes up considerably more space than
the canonical text. since the zone configuration saved in the zone
object using dns_zone_setcfg() is only currently used for "rndc
showzone", it can be saved as text more efficiently than as an
object tree. (and, if a tree were needed, the text could be
re-parsed quickly; zone configuration text is generally small.)

6 months agonew: dev: Add spatch to detect implicit bool/int/result cast
Colin Vidal [Wed, 12 Nov 2025 10:31:37 +0000 (11:31 +0100)] 
new: dev: Add spatch to detect implicit bool/int/result cast

Detection of implicit cast from a boolean into an int, or an
isc_result_t into a boolean (either in an assignement or return
position).

If such pattern is found, a warning comment is added into the code (and
the CI will fails) so the error can be spotted and manually fixed.

Merge branch 'colin/cocci-detect-iscresult-int-implicit-casts' into 'main'

See merge request isc-projects/bind9!11095

6 months agocheck-cocci fails in WARNING is found on stderr
Colin Vidal [Wed, 15 Oct 2025 13:35:59 +0000 (15:35 +0200)] 
check-cocci fails in WARNING is found on stderr

As the implicit cast check print "WARNING: ..." on stderr, add a pattern
to make sure that check-cocci would fails if such warning is found on
stderr. This is generic (not specific like the existing "parse error")
so it should be able to support future Coccinelle spatch warnings.

6 months agomdig: fix implicit bool to int cast
Colin Vidal [Tue, 14 Oct 2025 11:31:44 +0000 (13:31 +0200)] 
mdig: fix implicit bool to int cast

The `display_rrcomments` is a tri-state (-1, 0, 1) which is (in some
cases) initialized with `state`, a boolean, through an implicit cast.
This was spot by Coccinelle. Remove the implcit cast by explicitly
assigning 0 or 1 to `display_rrcomments` based on `state` value.

6 months agoadd spatch to detect implicit bool/int/result cast
Colin Vidal [Tue, 14 Oct 2025 10:45:21 +0000 (12:45 +0200)] 
add spatch to detect implicit bool/int/result cast

Detection of implicit cast from a boolean into an int, or an
isc_result_t into a boolean (either in an assignement or return
position).

If such pattern is found, a warning comment is added into the code (and
the CI will fails) so the error can be spotted and manually fixed.

6 months agonew: test: Add isctest.check.ede() helper for pytest
Nicki Křížek [Mon, 10 Nov 2025 15:21:52 +0000 (16:21 +0100)] 
new: test: Add isctest.check.ede() helper for pytest

Add a utility function to check for EDE codes present in the DNS
message. The primary benefit of this helper function is that it
handles the compatibility issues with different dnspython versions
and the actual test code doesn't have to deal with that any more.

Merge branch 'nicki/isctest-check-ede-helper' into 'main'

See merge request isc-projects/bind9!11182

6 months agoFix CI trigger for system test modications
Nicki Křížek [Fri, 7 Nov 2025 10:30:23 +0000 (11:30 +0100)] 
Fix CI trigger for system test modications

Use bin/tests/system/**/* to detect changes to files not just directly
inside the directory, but also all of its subdirectories.

See https://docs.gitlab.com/ci/yaml/#ruleschanges

6 months agoUse new EDE helper in existing system tests
Nicki Křížek [Thu, 30 Oct 2025 17:12:25 +0000 (18:12 +0100)] 
Use new EDE helper in existing system tests

Previously, hasattr("extended_errors") was used as a check to detect a
mimumum required dnspython version in order to only perform the EDE
check if a new-enough dnspython was present. This is now abstracted into
isctest.check.ede().

In order to support dnspython<2.2.0, use isctest.compat.EDECode rather
than using dns.edns.EDECode directly.

6 months agoAdd isctest.check.ede() helper for pytest
Nicki Křížek [Thu, 30 Oct 2025 17:08:01 +0000 (18:08 +0100)] 
Add isctest.check.ede() helper for pytest

Add a utility function to check for EDE options present in the DNS
message. The primary benefit of this helper function is that it
handles the compatibility issues with different dnspython versions
and the actual test code doesn't have to deal with that any more.

Rather than using the convenience .extended_errors() method
introduced in dnspython 2.7.0, iterate over the options and find
EDEOption types, which is supported from 2.2.0 onwards.

To work around the issue of using dns.edns.EDECode to specify EDE codes
in our tests, create an isctest.compat.EDECode wrapper. This can be used
even with dnspython versions prior to 2.2.0 and will simply result in
no-op, since EDE isn't supported in the older dnspython anyway.

6 months agorem: nil: Remove maybe_cancel_validators() function
Ondřej Surý [Sat, 8 Nov 2025 23:37:23 +0000 (00:37 +0100)] 
rem: nil: Remove maybe_cancel_validators() function

When shutting down an fctx, validators can just be canceled
without checking whether there are pending finds.

Merge branch 'ondrej/remove-maybe_cancel_validators' into 'main'

See merge request isc-projects/bind9!11229

6 months agoRemove maybe_cancel_validators() function
Evan Hunt [Sat, 25 Oct 2025 00:01:14 +0000 (17:01 -0700)] 
Remove maybe_cancel_validators() function

When shutting down an fctx, validators can just be canceled
without checking whether there are pending finds.

6 months agofix: test: Rewrite views/addzone in loop system test
Colin Vidal [Fri, 7 Nov 2025 14:46:15 +0000 (15:46 +0100)] 
fix: test: Rewrite views/addzone in loop system test

A part of the `views` system test attempts to add multiples zones in a
loop, and after each zone being added, reconfig the server.

However, the test didn't take into account the fact that the server
might take a bit more time to reload than the script to move to the next
iteration, and in some case the test was re-requesting the server reload
when it was still reloading.

Since `b49f83a3`, `named` explicitly fails to reload when a load/reload
is pending, which is (unless proved otherwise) the reason of the test
was now randomly failing.

That part of the test is now waiting for the server log message saying
the server has added the new zone and is running. Also, that part of the
test has been rewrote in Python.

Closes #5617

Merge branch '5617-rewrite-reload-view-test' into 'main'

See merge request isc-projects/bind9!11225

6 months agorewrite views/addzone in loop system test
Colin Vidal [Fri, 7 Nov 2025 09:45:09 +0000 (10:45 +0100)] 
rewrite views/addzone in loop system test

A part of the `views` system test attempts to add multiples zones in a
loop, and after each zone being added, reconfig the server.

However, the test didn't take into account the fact that the server
might take a bit more time to reload than the script to move to the next
iteration, and in some case the test was re-requesting the server reload
when it was still reloading.

Since `b49f83a3`, `named` explicitly fails to reload when a load/reload
is pending, which is (unless proved otherwise) the reason of the test
was now randomly failing.

That part of the test is now waiting for the server log message saying
the server has added the new zone and is running. Also, that part of the
test has been rewrote in Python.

6 months agoUpdate BIND version for release v9.21.15
Michal Nowak [Fri, 7 Nov 2025 09:34:27 +0000 (10:34 +0100)] 
Update BIND version for release