]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
9 months agoAdd nsX fixtures to system tests
Nicki Křížek [Tue, 8 Jul 2025 13:26:09 +0000 (15:26 +0200)] 
Add nsX fixtures to system tests

Many of our test cases only use a single NamedInstance from the
`servers` fixture. Introduce `nsX` helper fixtures to simplify these
tests and reduce boilterplate code further.

Specifically, the test no longer has to either define its own variable
to extract a single server from the list, or use the longer
servers["nsX"] syntax. While this may seem minor, the amount of times it
is repeated across the tests justifies the change. It also promotes
using more explicit server identification, i.e. `nsX`, rather than
generic `server`. This also improves the clarity of the tests and may be
helpful in traceback during debugging as well.

9 months agochg: test: Split up rollover test cases
Nicki Křížek [Fri, 18 Jul 2025 12:37:08 +0000 (14:37 +0200)] 
chg: test: Split up rollover test cases

Prior to this change, there was a single `rollover` test directory, containing 8 tests. These contained even more test scenarios, that were mostly unrelated to each other. This made debugging or even comprehending the tests difficult, as you'd often have to grasp the importance (or rather lack of it) of thousands of lines of setup, configuration and test code, and debug logs.

Now the tests were split up into 14 different test directories, containing 67 tests in total. This makes it much more comprehensible to understand what's going on in any single of these test cases, as there is no unrelated code. It also allows better parallelization and debugging of individual test cases, because of the improved granularity.

Merge branch 'nicki/split-rollover-test-cases' into 'main'

See merge request isc-projects/bind9!10581

10 months agoClean up rollover test case
Nicki Křížek [Wed, 11 Jun 2025 14:35:03 +0000 (16:35 +0200)] 
Clean up rollover test case

10 months agoIsolate rollover-multisigner test case
Nicki Křížek [Wed, 11 Jun 2025 14:33:53 +0000 (16:33 +0200)] 
Isolate rollover-multisigner test case

10 months agoIsolate rollover-enable-dnssec test case
Nicki Křížek [Wed, 11 Jun 2025 14:26:37 +0000 (16:26 +0200)] 
Isolate rollover-enable-dnssec test case

10 months agoIsolate rollover-zsk-prepub test case
Nicki Křížek [Wed, 11 Jun 2025 14:10:53 +0000 (16:10 +0200)] 
Isolate rollover-zsk-prepub test case

10 months agoIsolate rollover-ksk-3crowd test case
Nicki Křížek [Tue, 10 Jun 2025 14:33:08 +0000 (16:33 +0200)] 
Isolate rollover-ksk-3crowd test case

10 months agoUse common test functions for three-is-a-crowd test
Nicki Křížek [Tue, 10 Jun 2025 14:03:26 +0000 (16:03 +0200)] 
Use common test functions for three-is-a-crowd test

Previously, a lot of the checking was re-implemented and duplicated from
check_rollover_step(). Use that function where possible and only
override the needed checks.

10 months agoIsolate rollover-ksk-doubleksk test case
Nicki Křížek [Mon, 9 Jun 2025 16:39:44 +0000 (18:39 +0200)] 
Isolate rollover-ksk-doubleksk test case

10 months agoIsolate rollover-csk-roll1 test case
Nicki Křížek [Mon, 9 Jun 2025 15:42:08 +0000 (17:42 +0200)] 
Isolate rollover-csk-roll1 test case

10 months agoIsolate rollover-csk-roll2 test case
Nicki Křížek [Mon, 9 Jun 2025 14:33:13 +0000 (16:33 +0200)] 
Isolate rollover-csk-roll2 test case

10 months agoIsolate rollover-algo-csk test
Nicki Křížek [Fri, 6 Jun 2025 14:49:14 +0000 (16:49 +0200)] 
Isolate rollover-algo-csk test

10 months agoIsolate rollover-algo-ksk-zsk test
Nicki Křížek [Fri, 6 Jun 2025 14:09:55 +0000 (16:09 +0200)] 
Isolate rollover-algo-ksk-zsk test

10 months agoIsolate rollover-straight2none test
Nicki Křížek [Fri, 6 Jun 2025 11:25:46 +0000 (13:25 +0200)] 
Isolate rollover-straight2none test

10 months agoIsolate rollover-lifetime test
Nicki Křížek [Fri, 6 Jun 2025 09:03:43 +0000 (11:03 +0200)] 
Isolate rollover-lifetime test

10 months agoIsolate rollover-going-insecure test case
Nicki Křížek [Thu, 5 Jun 2025 15:51:40 +0000 (17:51 +0200)] 
Isolate rollover-going-insecure test case

10 months agoIsolate rollover-dynamic2inline test
Nicki Křížek [Fri, 6 Jun 2025 09:38:33 +0000 (11:38 +0200)] 
Isolate rollover-dynamic2inline test

10 months agoSeparate common templates and test code for rollover tests
Nicki Křížek [Thu, 5 Jun 2025 15:05:38 +0000 (17:05 +0200)] 
Separate common templates and test code for rollover tests

This is a preparation to split up and further isolate the various
rollover tests in a subsequent commits.

10 months agoMove shared test code into isctest.kasp module
Nicki Křížek [Mon, 2 Jun 2025 15:20:06 +0000 (17:20 +0200)] 
Move shared test code into isctest.kasp module

Move key calculations and rollover step checks into the shared
isctest.kasp module. Deduplicate the key interval calculations.

10 months agoUse a single named.conf template in rollover test
Nicki Křížek [Fri, 30 May 2025 15:21:36 +0000 (17:21 +0200)] 
Use a single named.conf template in rollover test

Rather than using multiple slightly modified named.conf files, use a
single template which can be rendered differently based on an input
argument -- in this case, csk_roll.

10 months agochg: test: Refactor configloading test
Nicki Křížek [Fri, 18 Jul 2025 11:27:41 +0000 (13:27 +0200)] 
chg: test: Refactor configloading test

- Use WatchLog.wait_for_sequence() for the configloading test.
- Omit artifacts check, as it seems quite useless for this test case.
- Join all the tests together. The test case is fairly simple here and
  this is the easiest way to ensure the log will be in a predictable
  state for all tests. Previously, there was no way to ensure
  test_configloading_loading() won't be executed after the other tests,
  which would render the check moot. It could also be separated into
  its own module, but that seems excessive for a simple test case like
  this.
- Use jinja2 template for named.conf and remove setup.sh.
- Remove README and put the relevent comment directly next to the test.
- Remove _sh_ from the test filename to uphold the naming convention.

Merge branch 'nicki/refactor-configloading-test' into 'main'

See merge request isc-projects/bind9!10748

10 months agoRefactor configloading test
Nicki Křížek [Thu, 26 Jun 2025 15:28:11 +0000 (17:28 +0200)] 
Refactor configloading test

- Use WatchLog.wait_for_sequence() for the configloading test.
- Omit artifacts check, as it seems quite useless for this test case.
- Join all the tests together. The test case is fairly simple here and
  this is the easiest way to ensure the log will be in a predictable
  state for all tests. Previously, there was no way to ensure
  test_configloading_loading() won't be executed after the other tests,
  which would render the check moot. It could also be separated into
  its own module, but that seems excessive for a simple test case like
  this.
- Use jinja2 template for named.conf and remove setup.sh.
- Remove README and put the relevent comment directly next to the test.
- Remove _sh_ from the test filename to uphold the naming convention.

10 months agochg: test: Improve WatchLog API for pytest
Nicki Křížek [Fri, 18 Jul 2025 10:13:12 +0000 (12:13 +0200)] 
chg: test: Improve WatchLog API for pytest

- Refactor and extend the `WatchLog.wait_for_line()` API:
    1. To allow for usage of one or more FlexPatterns, i.e. either plain
       strings to be matched verbatim, or regular expressions. Both can be
       used interchangeably to provide the caller to write simple and
       readable test code, while allowing for increased complexity to allow
       special cases.
    2. Always return the regex match, which allows the caller to identify
       which line was matched, as well as to extract any additional
       information, such as individual regex groups.
- Add `WatchLog.wait_for_sequence()` and `WatchLog.wait_for_all()` helper functions

Merge branch 'nicki/watchlog-improvements' into 'main'

See merge request isc-projects/bind9!10618

10 months agoTurn on doctest in CI
Nicki Křížek [Mon, 16 Jun 2025 13:51:51 +0000 (15:51 +0200)] 
Turn on doctest in CI

Run doctests for the isctest module in a dedicated CI job.

10 months agoChange NamedInstance.rndc() doctest into doc example
Nicki Křížek [Mon, 23 Jun 2025 15:36:08 +0000 (17:36 +0200)] 
Change NamedInstance.rndc() doctest into doc example

The test is troublesome, because NamedInstance(identifier) expects that
a directory with such a name exists. While it'd be possible to mock
those directories as well, it'd make the doctest overly long and
complex, which isn't justified, given that it's only testing a couple of
options. Turn it into regular documentation instead.

10 months agoSeparate LineReader functionality from WatchLog
Nicki Křížek [Fri, 4 Jul 2025 15:28:06 +0000 (17:28 +0200)] 
Separate LineReader functionality from WatchLog

The buffered reading of finished lines deserves its own class to make
its function clearer, rather than bundling it within the WatchLog class.

Co-Authored-By: Michał Kępień <michal@isc.org>
10 months agoRefactor WatchLog for better readability
Nicki Křížek [Fri, 4 Jul 2025 14:21:30 +0000 (16:21 +0200)] 
Refactor WatchLog for better readability

Various improvements for typing, naming, code deduplication and better
code organization to make the code easier to read.

10 months agoUse custom WatchLog timeout exception
Nicki Křížek [Mon, 23 Jun 2025 15:23:26 +0000 (17:23 +0200)] 
Use custom WatchLog timeout exception

The TimeoutError is raised when system functions time out. Define a
custom WatchLogTimeout to improve clarity.

10 months agoAdd wait_for_all() and wait_for_sequence() to WatchLog
Nicki Křížek [Mon, 23 Jun 2025 13:50:29 +0000 (15:50 +0200)] 
Add wait_for_all() and wait_for_sequence() to WatchLog

Extend the WatchLog API with a couple of new matching options.

wait_for_sequence() can be used to check a specific sequence of lines
appears in the log file in the given order.

wait_for_all() ensure that all the provided patterns appear in the log
at least once.

Co-authored-by: Colin Vidal <colin@isc.org>
10 months agoSplit up waiting for match to a separate WatchLog method
Nicki Křížek [Mon, 23 Jun 2025 12:37:09 +0000 (14:37 +0200)] 
Split up waiting for match to a separate WatchLog method

To allow re-use in upcoming functions, isolate the line matching logic
into a separate function. Use an instance-wide deadline attribute, which
is set by the calling function.

10 months agoAllow WatchLog.wait_for_line() to be called more than once
Nicki Křížek [Mon, 23 Jun 2025 12:24:34 +0000 (14:24 +0200)] 
Allow WatchLog.wait_for_line() to be called more than once

In some cases, it can be useful to be able to re-use the same WatchLog
to wait for another line.

10 months agoUnify the WatchLog.wait_for_line/s() API
Nicki Křížek [Mon, 16 Jun 2025 16:39:56 +0000 (18:39 +0200)] 
Unify the WatchLog.wait_for_line/s() API

Rather than using two distinct functions for matching either one pattern
(wait_for_line()), or any of multiple patterns (wait_for_lines()), use a
single function that handles both in the same way.

Extend the wait_for_line() API:
1. To allow for usage of one or more FlexPatterns, i.e. either plain
   strings to be matched verbatim, or regular expressions. Both can be
   used interchangeably to provide the caller to write simple and
   readable test code, while allowing for increased complexity to allow
   special cases.
2. Always return the regex match, which allows the caller to identify
   which line was matched, as well as to extract any additional
   information, such as individual regex groups.

10 months agoSet timeout for WatchLog per-instance rather than per-call
Nicki Křížek [Mon, 16 Jun 2025 15:12:47 +0000 (17:12 +0200)] 
Set timeout for WatchLog per-instance rather than per-call

To simplify usage of multiple wait_for_*() calls, configure the timeout
value for the WatchLog instance, rather than specifying it for each
call.

This is a preparation/cleanup for implementing multiple wait_for_*()
calls in subsequent commits.

10 months agoAbstract WatchLog line buffering to a separate function
Nicki Křížek [Mon, 16 Jun 2025 13:35:43 +0000 (15:35 +0200)] 
Abstract WatchLog line buffering to a separate function

Move the line buffering functionality into _readline() to improve the
readability of code. This also allows reading the file contents from
other functions, since the line buffer is now an attribute of the class.

10 months agofix watchlog.py doctest
Colin Vidal [Wed, 11 Jun 2025 13:45:52 +0000 (15:45 +0200)] 
fix watchlog.py doctest

Fix some broken doctest in watchlog.py (no semantic error, but API
slightly changed and broke some output messags). Also add a test for a
missing failure case.

10 months agochg: nil: Remove unused link field from rdatacommon
Alessio Podda [Thu, 17 Jul 2025 11:45:39 +0000 (11:45 +0000)] 
chg: nil: Remove unused link field from rdatacommon

The field link in rdatacommon is unused. This change should save 16 bytes for
each rdata we keep in a zone or cache.

Merge branch 'alessio/remove-unused-rdata-link' into 'main'

See merge request isc-projects/bind9!10731

10 months agoRemove unused link field from rdatacommon
Alessio Podda [Fri, 11 Jul 2025 07:15:23 +0000 (09:15 +0200)] 
Remove unused link field from rdatacommon

The field link in rdatacommon is unused. This change should save 16
bytes for each rdata we create.

10 months agorem: dev: Remove obsolete scripts across the repo
Štěpán Balážik [Thu, 17 Jul 2025 05:52:47 +0000 (05:52 +0000)] 
rem: dev: Remove obsolete scripts across the repo

All are unmaintained, dysfunctional, or both.

Merge branch 'stepan/remove-obsolete-scripts' into 'main'

See merge request isc-projects/bind9!10712

10 months agoFix broken markup in doc/arm/dlz.inc.rst
Michał Kępień [Wed, 16 Jul 2025 05:06:09 +0000 (07:06 +0200)] 
Fix broken markup in doc/arm/dlz.inc.rst

Commit a6cce753e2b1096c4db64555d2aee096ba8236ae erroneously used
Markdown syntax in doc/arm/dlz.inc.rst.  Replace it with proper
reStructuredText so that the relevant section of the ARM is rendered
correctly.

10 months agoUpdate broken reference to dlz_minimal.h
Michał Kępień [Wed, 16 Jul 2025 05:06:09 +0000 (07:06 +0200)] 
Update broken reference to dlz_minimal.h

Commit a6cce753e2b1096c4db64555d2aee096ba8236ae missed a spot in
lib/dns/include/dns/clientinfo.h.  Replace the outdated file reference
with the URL used in all similar cases.

10 months agoRemove contrib/scripts
Štěpán Balážik [Tue, 8 Jul 2025 13:34:42 +0000 (15:34 +0200)] 
Remove contrib/scripts

The scripts are ancient, trivial and/or unmaintained.
Since switching to Meson, we don't even build `*.in` ones.

10 months agoRemove leftover references to contrib/dlz/
Štěpán Balážik [Tue, 8 Jul 2025 13:31:54 +0000 (15:31 +0200)] 
Remove leftover references to contrib/dlz/

The DLZ modules have been moved to a separate Git repository in commit
a6cce753e2b1096c4db64555d2aee096ba8236ae.  Remove leftover references to
the contrib/dlz/ directory from the main BIND 9 repository.

10 months agoRemove util/git-replay-merge.sh
Štěpán Balážik [Tue, 8 Jul 2025 13:14:11 +0000 (15:14 +0200)] 
Remove util/git-replay-merge.sh

This is superceded by the auto-backport scripts in bind9-qa repo.

10 months agoRemove obsolete include checks
Štěpán Balážik [Tue, 8 Jul 2025 13:11:19 +0000 (15:11 +0200)] 
Remove obsolete include checks

These will not pass on today's code anyway.

10 months agoRemove util/nanny.pl and contrib/scripts/nanny.pl
Štěpán Balážik [Tue, 8 Jul 2025 13:10:34 +0000 (15:10 +0200)] 
Remove util/nanny.pl and contrib/scripts/nanny.pl

I doubt that anyone is using it after 25 years.

10 months agofix: test: Fix ifconfig.sh script
Mark Andrews [Wed, 16 Jul 2025 22:12:59 +0000 (08:12 +1000)] 
fix: test: Fix ifconfig.sh script

Add missing test for the variable 'a' being empty on linux.

Closes #5423

Merge branch '5423-fix-ifconfig-sh-script' into 'main'

See merge request isc-projects/bind9!10740

10 months agoFix ifconfig.sh script
Mark Andrews [Wed, 16 Jul 2025 02:27:24 +0000 (12:27 +1000)] 
Fix ifconfig.sh script

Add missing test for the variable 'a' being empty on linux.

10 months agoMerge tag 'v9.21.10'
Andoni Duarte Pintado [Wed, 16 Jul 2025 15:16:27 +0000 (17:16 +0200)] 
Merge tag 'v9.21.10'

10 months agofix: pkg: Fix plugin loading
Michał Kępień [Wed, 16 Jul 2025 05:24:00 +0000 (07:24 +0200)] 
fix: pkg: Fix plugin loading

Loading plugins specified using just the shared library name (i.e.
without using an absolute path or a relative path) did not work. This
has been fixed.

See #5379

Merge branch '5379-fix-plugin-loading' into 'main'

See merge request isc-projects/bind9!10734

10 months agoFix plugin loading
Michał Kępień [Wed, 16 Jul 2025 05:22:53 +0000 (07:22 +0200)] 
Fix plugin loading

Plugins are built as shared libraries and are therefore installed into
$libdir/bind.  Meanwhile, the build system sets the NAMED_PLUGINDIR
preprocessor variable to $datadir/bind instead.  This prevents loading
plugins specified in the configuration file using just the shared
library name (i.e. without using an absolute path or a relative path).
Fix by setting NAMED_PLUGINDIR to the path that plugins are actually
installed into.

10 months agochg: usr: Add deprecation warnings for RSASHA1, RSASHA1-NSEC3SHA1 and DS digest type 1
Mark Andrews [Tue, 15 Jul 2025 14:38:53 +0000 (00:38 +1000)] 
chg: usr: Add deprecation warnings for RSASHA1, RSASHA1-NSEC3SHA1 and DS digest type 1

RSASHA1 and RSASHA1-NSEC-SHA1 DNSKEY algorithms have been deprecated
by the IETF and should no longer be used for DNSSEC. DS digest type
1 (SHA1) has also been deprecated. Validators are now expected
to treat these algorithms and digest as unknown, resulting in
some zones being treated as insecure when they were previously treated
as secure. Warnings have been added to named and tools when these
algorithms and this digest are being used for signing.

Zones signed with RSASHA1 or RSASHA1-NSEC-SHA1 should be migrated
to a different DNSKEY algorithm.

Zones with DS or CDS records with digest type 1 (SHA1) should be
updated to use a different digest type (e.g. SHA256) and the digest
type 1 records should be removed.

Related to #5358

Merge branch '5358-add-sha1-deprecation-warnings' into 'main'

See merge request isc-projects/bind9!10559

10 months agoRemove leftover test development echo
Mark Andrews [Wed, 2 Jul 2025 13:27:39 +0000 (23:27 +1000)] 
Remove leftover test development echo

10 months agoRedirect named-checkzone output to file
Mark Andrews [Wed, 2 Jul 2025 02:49:16 +0000 (12:49 +1000)] 
Redirect named-checkzone output to file

10 months agoDigest type GOST is also deprecated
Mark Andrews [Wed, 2 Jul 2025 13:23:01 +0000 (23:23 +1000)] 
Digest type GOST is also deprecated

10 months agoCheck deprecated algorithms in dnssec-policy
Mark Andrews [Mon, 30 Jun 2025 05:56:21 +0000 (15:56 +1000)] 
Check deprecated algorithms in dnssec-policy

10 months agoCheck that named-checkzone reports deprecated digests
Mark Andrews [Mon, 30 Jun 2025 05:26:10 +0000 (15:26 +1000)] 
Check that named-checkzone reports deprecated digests

10 months agoCheck that named-checkzone reports deprecated algorithms
Mark Andrews [Mon, 30 Jun 2025 05:09:32 +0000 (15:09 +1000)] 
Check that named-checkzone reports deprecated algorithms

10 months agoUpdate man pages for deprecated algorithms
Mark Andrews [Thu, 5 Jun 2025 05:33:35 +0000 (15:33 +1000)] 
Update man pages for deprecated algorithms

10 months agoWarn about deprecated DNSKEY and DS algorithms / digest types
Mark Andrews [Thu, 5 Jun 2025 04:49:10 +0000 (14:49 +1000)] 
Warn about deprecated DNSKEY and DS algorithms / digest types

DNSKEY algorithms RSASHA1 and RSASHA-NSEC3-SHA1 and DS digest type
SHA1 are deprecated.  Log when these are present in primary zone
files and when generating new DNSKEYs, DS and CDS records.

10 months agochg: test: Use isctest.asyncserver in the "tsig" test
Štěpán Balážik [Sun, 13 Jul 2025 09:31:43 +0000 (09:31 +0000)] 
chg: test: Use isctest.asyncserver in the "tsig" test

Replace the custom DNS server used in the "tsig" system test with
new code based on the isctest.asyncserver module.

Changes to isctest.asyncserver are required, previously it did not
handle TSIG signed queries at all. Now, with some hacking around
a [dnspython bug](https://github.com/rthalley/dnspython/issues/1205) it does.

Merge branch 'stepan/tsig-asyncserver' into 'main'

See merge request isc-projects/bind9!10566

10 months agoUse isctest.asyncserver in the "tsig" test
Štěpán Balážik [Tue, 10 Jun 2025 22:33:39 +0000 (00:33 +0200)] 
Use isctest.asyncserver in the "tsig" test

Replace the custom DNS server used in the "tsig" system test with
new code based on the isctest.asyncserver module.

10 months agoLet queries with TSIG parse in isctest.asyncserver.AsyncDnsServer
Štěpán Balážik [Mon, 23 Jun 2025 14:43:56 +0000 (16:43 +0200)] 
Let queries with TSIG parse in isctest.asyncserver.AsyncDnsServer

Previously, upon receiving a query with TSIG, the server would log
an error and timeout. As there is no way to set up the keyring in the
class anyway (and I believe we don't need it), this commit lets such
queries parse but logs the fact that the query has TSIG.

However, there is a bug [1] in dnspython, which causes `make_response`
and `to_wire` to crash on messages constructed by `from_wire` with
`keyring=False`, so the hack with `message.__class__` is needed to work
around this.

This makes just enough changes for the tsig system test to work with
dnspython >= 2.0.0. On older version the server gives up.

[1] https://github.com/rthalley/dnspython/issues/1205

10 months agochg: test: Check for FEATURETEST before running pytest alessio/experimental-swar-qpkey-cmp-baseline
Nicki Křížek [Thu, 10 Jul 2025 15:13:28 +0000 (17:13 +0200)] 
chg: test: Check for FEATURETEST before running pytest

When compiling with meson, it may be easy to forget to compile system
test dependencies before running the tests. In that case, the test
results would be quite incosistent and unpredictable, with some tests
ending up with ERROR, some with FAILURE and others PASS, without a clear
indication that something is off before running the entire machinery.

Add a check to fail early on if the FEATURETEST binary isn't available,
indicating that system test dependencies were most likely not compiled.

Merge branch 'nicki/system-test-check-featuretest' into 'main'

See merge request isc-projects/bind9!10715

10 months agoCheck for FEATURETEST before running pytest
Nicki Křížek [Tue, 8 Jul 2025 14:14:15 +0000 (16:14 +0200)] 
Check for FEATURETEST before running pytest

When compiling with meson, it may be easy to forget to compile system
test dependencies before running the tests. In that case, the test
results would be quite incosistent and unpredictable, with some tests
ending up with ERROR, some with FAILURE and others PASS, without a clear
indication that something is off before running the entire machinery.

Add a check to fail early on if the FEATURETEST binary isn't available,
indicating that system test dependencies were most likely not compiled.

10 months agofix: pkg: Fix cross builds
Michał Kępień [Thu, 10 Jul 2025 14:57:32 +0000 (16:57 +0200)] 
fix: pkg: Fix cross builds

Cross-compilation did not work even when the ``-Ddoc=disabled`` build
option was passed to Meson due to the build targets used for generating
documentation depending on a non-native executable. This has been fixed.

See #5379

Merge branch '5379-fix-cross-builds' into 'main'

See merge request isc-projects/bind9!10702

10 months agoFix cross builds
Michał Kępień [Thu, 10 Jul 2025 14:56:15 +0000 (16:56 +0200)] 
Fix cross builds

Commit 5c9b4f3163e05f64b97d04cba2c17ef59d682830 inadvertently broke
cross builds by making Meson process the doc/misc/meson.build file even
when sphinx-build is not found in PATH.  The doc/misc/meson.build file
defines targets that require a non-native executable, cfg_test, in order
to be built.

Fix by reverting to only processing the doc/misc/ subdirectory when
sphinx-build is found in PATH and moving the relevant alias_target()
method call so that the build targets depending on a non-native
executable are only defined if sphinx-build is found in PATH.

10 months agofix: dev: Fix the DoH unit test for meson
Artem Boldariev [Thu, 10 Jul 2025 14:39:40 +0000 (17:39 +0300)] 
fix: dev: Fix the DoH unit test for meson

The DoH unit test was omitted since meson migration due to a
typo. This commit fixes that.

Merge branch 'artem-fix-doh-test-for-meson' into 'main'

See merge request isc-projects/bind9!10723

10 months agoFix the DoH unit test for meson
Artem Boldariev [Wed, 9 Jul 2025 19:43:01 +0000 (22:43 +0300)] 
Fix the DoH unit test for meson

The DoH unit test was omitted since meson migration due to a
typo. This commit fixes that.

10 months agochg: dev: Prepend qpkey with namespace (normal vs denial of existence)
Matthijs Mekking [Thu, 10 Jul 2025 13:53:07 +0000 (13:53 +0000)] 
chg: dev: Prepend qpkey with namespace (normal vs denial of existence)

Merge the three qp tries (tree, nsec, nsec3) into one, add the namespace to the qpkey.

Merge branch 'matthijs-one-trie-for-zone-and-nsec3' into 'main'

See merge request isc-projects/bind9!10480

10 months agoAdd namespace to new_qp(c|z)node
Matthijs Mekking [Mon, 7 Jul 2025 09:42:17 +0000 (11:42 +0200)] 
Add namespace to new_qp(c|z)node

Is there a time when new_qp(c|z)node() would not be followed by
assignment of the namespace? No, so let's add the assignment to the
function that creates the node.

10 months agoRename DNS_DB_NSEC_ constants to DNS_DBNAMESPACE_
Matthijs Mekking [Mon, 7 Jul 2025 09:29:45 +0000 (11:29 +0200)] 
Rename DNS_DB_NSEC_ constants to DNS_DBNAMESPACE_

Naming is hard exercise.

10 months agoRename dns_qp_lookup2 back to dns_qp_lookup
Matthijs Mekking [Tue, 27 May 2025 08:57:11 +0000 (10:57 +0200)] 
Rename dns_qp_lookup2 back to dns_qp_lookup

Now that we have to code working, rename 'dns_qp_lookup2' back to
'dns_qp_lookup' and adjust all remaining 'dns_qp_lookup' occurrences
to take a space=0 parameter.

10 months agoChange denial type to enum
Matthijs Mekking [Mon, 26 May 2025 15:36:33 +0000 (17:36 +0200)] 
Change denial type to enum

For now we only allow DNS_DB_NSEC_* values so it makes sense to change
the type to an enum.

Rename 'denial' to the more intuitive 'space', indicating the namespace
of the keyvalue pair.

10 months agoFix the dbiterator to assume only one qp-trie
Matthijs Mekking [Mon, 26 May 2025 09:34:16 +0000 (11:34 +0200)] 
Fix the dbiterator to assume only one qp-trie

The dbiterator can take three modes: full, nsec3only and nonsec3.
Previously, in full mode the dbiterator requires special logic to jump
from one qp-trie to the other. Now everything is in one trie, other
special logic is needed.

The qp-trie is now sorted in such a way that all the normal nodes come
first, followed by NSEC nodes, and finally the NSEC3 nodes. NSEC nodes
are empty nodes and need to be skipped when iterating.

We add an additional auxiliary node to the trie, an NSEC origin, so
we can easily find the point in the trie where we need to continue
iterating.

10 months agoExpand qp unit tests with deletions
Matthijs Mekking [Thu, 15 May 2025 09:33:24 +0000 (10:33 +0100)] 
Expand qp unit tests with deletions

Add a test case that deletes some names from a qp-trie. Ensure that
lookups are sane before and after deletions.

10 months agoUpdate qp unit tests merging denial and zone data
Matthijs Mekking [Tue, 13 May 2025 10:47:02 +0000 (11:47 +0100)] 
Update qp unit tests merging denial and zone data

If zone and denial data are going to be stored in the same qp storage,
the unit tests need to be updated to reflect this change. The code
changes mainly affect name to qpkey conversion, lookups, and
predecessors.

A note on predecessors: since the denial and zone data are now in the
same qp storage, the predecessor of the first name in the zone data will
consequently be the last name in the denial data.

10 months agoPrepend qpkey with denial byte
Matthijs Mekking [Fri, 25 Apr 2025 15:21:16 +0000 (17:21 +0200)] 
Prepend qpkey with denial byte

In preparation to merge the three qp tries (tree, nsec, nsec3) into
one, add the piece of information into the qpkey. This is the most
significant bit of information, so prepend the denial type to the qpkey.

This means we need to pass on the denial type when constructing the
qpkey from a name, or doing a lookup.

Reuse the the DNS_DB_NSEC_* values. Most qp tries in the code we just
pass on 0 (nta, rpz, zt, etc.), because there is no need for denial of
existence, but for qpzone and qpcache we must pass the right value.

Change the code, so that node->nsec no longer can have the value
DNS_DB_NSEC_HAS_NSEC, instead track this in a new attribute 'havensec'.

Since we use node->nsec to convert names to keys, the value MUST be set
before inserting the node into the qp-trie.

Update the fuzzing and unit tests accordingly. This only adds a few
extra test cases, more are needed.

In the qp_test.c we can remove test code for empty keys as this is
no longer possible.

10 months agochg: ci: Add "fips" tags to AlmaLinux FIPS machines
Michal Nowak [Thu, 10 Jul 2025 13:14:31 +0000 (15:14 +0200)] 
chg: ci: Add "fips" tags to AlmaLinux FIPS machines

Merge branch 'mnowak/add-fips-tags-to-fips-machines' into 'main'

See merge request isc-projects/bind9!10724

10 months agoAdd "fips" tags to AlmaLinux FIPS machines
Michal Nowak [Thu, 10 Jul 2025 08:17:24 +0000 (10:17 +0200)] 
Add "fips" tags to AlmaLinux FIPS machines

10 months agofix: usr: Fix dig issues
Arаm Sаrgsyаn [Thu, 10 Jul 2025 11:58:45 +0000 (11:58 +0000)] 
fix: usr: Fix dig issues

When used with the ``+keepopen`` option with a TCP connection, iscman:`dig`
could terminate unexpectedly in rare situations. Additionally, iscman:`dig`
could hang and fail to shutdown properly when interrupted during a query.
These have been fixed.

Closes #5381

Merge branch '5381-dig-keepalive-crash' into 'main'

See merge request isc-projects/bind9!10681

10 months agoFix a possible hang in dig if a send is interrupted/canceled
Aram Sargsyan [Tue, 1 Jul 2025 10:49:39 +0000 (10:49 +0000)] 
Fix a possible hang in dig if a send is interrupted/canceled

When send_done() is called with a ISC_R_CANCELED status (e.g. because
of a signal from ctrl+c), dig can fail to shutdown because
check_if_done() is not called in the branch. Add a check_if_done()
call.

10 months agoFix a query reference counting issue in dig
Aram Sargsyan [Tue, 1 Jul 2025 10:42:30 +0000 (10:42 +0000)] 
Fix a query reference counting issue in dig

When reusing a TCP connection (because of the '+keepopen' option),
dig detaches from the query after launching it. This can cause a
crash in dig in rare cases when the "receive" callback is called
earlier than the "send" callback.

The '_cancel_lookup()' function detaches a query only if it's
found in the 'lookup->q' list. Before this commit, with one
additional detach happening before recv_done() -> _cancel_lookup()
is called, it didn't cause problems because an earlier _query_detach()
was unlinking the query from 'lookup->q' (because it was the last
reference), so the additional detach and the skipped detach were
undoing each other.

That is unless the "receive" callback was called earlier than the
"send" callback, in which case the additional detach wasn't destroying
the query (and wasn't unlinking it from 'lookup->q') because the "send"
callback's attachment was still there, and so _cancel_lookup() was
trying to "steal" the "send" callback's attachment and causing an
assertion on 'INSIST(query->sendhandle == NULL);'.

Delete the detachment which caused the described situation.

10 months agofix: nil: Do not hardcode release date in man pages
Michał Kępień [Thu, 10 Jul 2025 09:21:04 +0000 (11:21 +0200)] 
fix: nil: Do not hardcode release date in man pages

The util/meson-dist-package.sh script hardcodes the date it is run on
into the man pages it creates in the dist tarball.  This causes pkgdiff
to report discrepancies if the util/release-tarball-comparison.sh script
is run on a different day than the one the dist tarball was generated
on.

Fix by using the exact same solution as in BIND 9.20: generating the man
page stubs with a @RELEASE_DATE@ placeholder instead of a specific date
and only replacing that placeholder with a specific date during the
build process.

Closes #5412

Merge branch '5412-do-not-hardcode-release-date-in-man-pages' into 'main'

See merge request isc-projects/bind9!10716

10 months agoDo not hardcode release date in man pages
Michał Kępień [Thu, 10 Jul 2025 09:20:46 +0000 (11:20 +0200)] 
Do not hardcode release date in man pages

The util/meson-dist-package.sh script hardcodes the date it is run on
into the man pages it creates in the dist tarball.  This causes pkgdiff
to report discrepancies if the util/release-tarball-comparison.sh script
is run on a different day than the one the dist tarball was generated
on.

Fix by using the exact same solution as in BIND 9.20: generating the man
page stubs with a @RELEASE_DATE@ placeholder instead of a specific date
and only replacing that placeholder with a specific date during the
build process.

10 months agochg: dev: Migrate rdataset attributes to struct of bools and enum
Petr Špaček [Thu, 10 Jul 2025 09:18:07 +0000 (09:18 +0000)] 
chg: dev: Migrate rdataset attributes to struct of bools and enum

Merge branch 'pspacek/rdataset-attrs-enum' into 'main'

See merge request isc-projects/bind9!10721

10 months agoRemove unused DNS_RDATASET_COUNT
Petr Špaček [Thu, 10 Jul 2025 07:47:47 +0000 (09:47 +0200)] 
Remove unused DNS_RDATASET_COUNT

Albeit technically not unused, it was always defined as 0 and thus did
nothing.

Related: #4666

10 months agoRemove unused DNS_RDATASET_ORDER
Petr Špaček [Thu, 10 Jul 2025 07:45:08 +0000 (09:45 +0200)] 
Remove unused DNS_RDATASET_ORDER

Related: #4666

10 months agoRemove unused DNS_RDATASET_FIXED
Petr Špaček [Thu, 10 Jul 2025 07:43:15 +0000 (09:43 +0200)] 
Remove unused DNS_RDATASET_FIXED

There was no way to define this in the build system.

Related: #4666

10 months agoConvert DNS_RDATASETATTR_ bitfield manipulation to struct of bools
Petr Špaček [Wed, 9 Jul 2025 14:56:22 +0000 (16:56 +0200)] 
Convert DNS_RDATASETATTR_ bitfield manipulation to struct of bools

RRset ordering is now an enum inside struct rdataset attributes. This
was done to keep size to of the structure to its original value before
this MR.

I expect zero performance impact but it should be easier to deal with
attributes in debuggers and language servers.

10 months agofix: usr: Log dropped or slipped responses in the query-errors category
Arаm Sаrgsyаn [Thu, 10 Jul 2025 08:56:09 +0000 (08:56 +0000)] 
fix: usr: Log dropped or slipped responses in the query-errors category

Responses which were dropped or slipped because of RRL (Response Rate
Limiting) were logged in the ``rate-limit`` category instead of the
``query-errors`` category, as documented in ARM. This has been fixed.

Closes #5388

Merge branch '5388-rrl-log-category-fix' into 'main'

See merge request isc-projects/bind9!10676

10 months agoLog dropped or slipped responses in the query-errors category
Aram Sargsyan [Mon, 30 Jun 2025 13:12:09 +0000 (13:12 +0000)] 
Log dropped or slipped responses in the query-errors category

As mentioned in the comments block before the changed code block,
the dropped or slipped responses should be logged in the query
category (or rather query-errors category as done in lib/ns/client.c),
so that requests are not silently lost.

Also fix a couple of errors/typos in the code comments.

10 months agochg: dev: Improve efficiency of ns_client_t reset
Alessio Podda [Thu, 10 Jul 2025 05:53:23 +0000 (05:53 +0000)] 
chg: dev: Improve efficiency of ns_client_t reset

The ns_client_t struct is reset and zeroed out on every query,
but some fields (query, message, manager) are preserved.

We observe two things:
 - The sendbuf field is going to be overwritten anyway, there's
   no need to zero it out.
 - The fields are copied out when the struct is zero-ed out, and
   then copied back in. For the query field (which is 896 bytes)
   this is very inefficient.

This commit makes the reset more efficient by avoiding the unnecessary
zeroing and copying.

Merge branch 'alessio/experimental-ns-client-noinit' into 'main'

See merge request isc-projects/bind9!10463

10 months agoImprove efficiency of ns_client_t reset
Alessio Podda [Wed, 14 May 2025 13:32:53 +0000 (15:32 +0200)] 
Improve efficiency of ns_client_t reset

The ns_client_t struct is reset and zero-ed out on every query,
but some fields (query, message, manager) are preserved.

We observe two things:
 - The sendbuf field is going to be overwritten anyway, there's
   no need to zero it out.
 - The fields are copied out when the struct is zero-ed out, and
   then copied back in. For the query field (which is 896 bytes)
   this is very inefficient.

This commit makes the reset more efficient avoiding to unnecessary
zero-ing and copy.

10 months agochg: dev: Increase the scalability in the ADB
Ondřej Surý [Wed, 9 Jul 2025 21:19:56 +0000 (23:19 +0200)] 
chg: dev: Increase the scalability in the ADB

This MR reduces lock contention and increases scalability in the ADB by:
 a) Using SIEVE algorithm instead of classical LRU;
 b) Replacing rwlocked isc_hashmap with RCU cds_lfht table;
 c) Replace the single LRU table per-object with per-loop LRU tables per-object.

Merge branch 'ondrej/use-urcu-lfht-for-ADB-tables' into 'main'

See merge request isc-projects/bind9!10645

10 months agoAdd doc/dev/LRU.md with per-loop LRU description
Ondřej Surý [Wed, 9 Jul 2025 19:38:43 +0000 (21:38 +0200)] 
Add doc/dev/LRU.md with per-loop LRU description

Several compilation units now use per-loop LRU lists, add basic
developers documentation on the design.

10 months agoUse cds_lfht for lock-free hashtables in dns_adb
Ondřej Surý [Wed, 25 Jun 2025 17:02:37 +0000 (19:02 +0200)] 
Use cds_lfht for lock-free hashtables in dns_adb

Replace the read-write locked isc_hashmap with lock-free cds_lfht
hashtable and replace the singular LRU tables for ADB names and entries
with a per-thread LRU tables.  These changes allowed to remove all the
read-write locking on the names and entries tables.

10 months agoUse regular reference counting macro for isc_nm_t structure
Ondřej Surý [Wed, 9 Jul 2025 09:01:15 +0000 (11:01 +0200)] 
Use regular reference counting macro for isc_nm_t structure

Instead of having hand crafted attach/detach/destroy functions, replace
them with the standard ISC_REFCOUNT macro.  This also have advantage
that delayed netmgr detach (from dns_dispatch) now doesn't cause
assertion failure.  This can happen with delayed (call_rcu) shutdown of
dns_adb.

10 months agoPrint the memory context when printing overmem limits
Ondřej Surý [Mon, 23 Jun 2025 05:48:36 +0000 (07:48 +0200)] 
Print the memory context when printing overmem limits

When printing the memory context going into or out of the overmem
condition, also print the memory context name for easier debugging.

10 months agoRewrite dns_adb LRU to SIEVE
Ondřej Surý [Thu, 12 Jun 2025 09:14:51 +0000 (11:14 +0200)] 
Rewrite dns_adb LRU to SIEVE

The dns_adb cleaning is little bit muddled as it mixes the "TTL"
based cleaning (.expire_v4 and .expire_v6 for adbname, .expires for
adbentry) with overmem cleaning.

Rewrite the LRU based cleaning to use SIEVE algorithm and to be overmem
cleaning only with a requirement to always cleanup at least 2-times the
size of the newly added entry.

10 months agochg: dev: Replace per-zone lock buckets with global buckets
Alessio Podda [Wed, 9 Jul 2025 14:17:02 +0000 (14:17 +0000)] 
chg: dev: Replace per-zone lock buckets with global buckets

Qpzone employs a locking strategy where rwlocks are grouped into
buckets, and each zone gets 17 buckets.
This strategy is suboptimal in two ways:
 - If named is serving a single zone or a zone is the majority of the
   traffic, this strategy pretty much guarantees contention when using
   more than a dozen threads.
 - If named is serving many small zones, it causes substantial memory
   usage.

This commit switches the locking to a global table initialized at start
time. This should have three effects:
 - Performance should improve in the single zone case, since now we are
   selecting from a bigger pool of locks.
 - Memory consumption should go down significantly in the many zone
   cases.
 - Performance should not degrade substantially in the many zone cases.
   The reason for this is that, while we could have substantially more
   zones than locks, we can query/edit only O(num threads) at the same
   time. So by making the global table much bigger than the expected
   number of threads, we can limit contention.

Merge branch 'alessio/global-qpzone-lock-table' into 'main'

See merge request isc-projects/bind9!10446