]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
3 months agonew: doc: Prepare documentation for BIND 9.21.18
Petr Špaček [Wed, 4 Feb 2026 13:34:33 +0000 (13:34 +0000)] 
new: doc: Prepare documentation for BIND 9.21.18

Merge branch 'pspacek/prepare-documentation-for-bind-9.21.18' into 'v9.21.18-release'

See merge request isc-private/bind9!906

3 months agoTweak and reword release notes
Petr Špaček [Wed, 4 Feb 2026 13:08:38 +0000 (14:08 +0100)] 
Tweak and reword release notes

3 months agoPrepare release notes for BIND 9.21.18
Petr Špaček [Wed, 4 Feb 2026 10:42:11 +0000 (11:42 +0100)] 
Prepare release notes for BIND 9.21.18

3 months agoGenerate changelog for BIND 9.21.18
Petr Špaček [Wed, 4 Feb 2026 10:41:30 +0000 (11:41 +0100)] 
Generate changelog for BIND 9.21.18

3 months agochg: doc: Set up version for BIND 9.21.19
Petr Špaček [Wed, 4 Feb 2026 09:01:33 +0000 (09:01 +0000)] 
chg: doc: Set up version for BIND 9.21.19

Merge branch 'andoni/set-up-version-for-bind-9.21.19' into 'main'

See merge request isc-projects/bind9!11514

3 months agoUpdate BIND version to 9.21.19-dev
Andoni Duarte Pintado [Wed, 4 Feb 2026 08:36:51 +0000 (09:36 +0100)] 
Update BIND version to 9.21.19-dev

3 months agochg: dev: initial openssl version splitting
Aydın Mercan [Mon, 2 Feb 2026 09:43:48 +0000 (12:43 +0300)] 
chg: dev: initial openssl version splitting

Dealing with OpenSSL has been rapidly turning into an unwieldy situation
as post-3.0 changes turn the library into a different beast.

Start treating pre and post-3.0 versions differently for easier
maintenance.

To help with this Sisyphean task, this MR had to shift things around.

`OPENSSL_NO_DEPRECATED` is now declared in BIND alongside an appropriate
`OPENSSL_API_COMPAT` value. The former value will set to declare either
OpenSSL 1.1.0 or 3.0 as the bare minimum version.

Instead of splitting `md.c` and `hmac.c` into separate version-specific
files, they now live inside `crypto/ossl1_1.c` and `crypto/ossl3.c`.
This way, these functions will be able to utilize the same static
`OSSL_PARAM` tables, removing redundant reconstruction for HMAC.

For pre-3.0, `isc_hmac` has been reverted back to using the `HMAC_`
interface. Using `EVP_MD_CTX`-based functions for HMAC will end up
libcrypto calling the same `HMAC_` functions in the end, giving no
advantage while confusingly using the digest functions.

A new API, `isc_ossl_wrap` has been added. This family of functions
aim to provide a common interface for libcrypto version specific code
while not abstracting away OpenSSL's structures such as `EVP_PKEY`.

Currently the main user of this API is the `dst` family of functions
where some ECDSA and RSA opeations need to use the new `OSSL_PARAM`
functionality by requirement or to avoid speed penalties.

Furthermore OpenSSL based logging has been moved from `isc_tls` to
`isc_ossl_wrap` as its a more appropriate place for such functionality.

Merge branch 'aydin/openssl-version-split' into 'main'

See merge request isc-projects/bind9!11094

3 months agodon't transform errors in hmac_sign
Aydın Mercan [Wed, 14 Jan 2026 14:40:24 +0000 (17:40 +0300)] 
don't transform errors in hmac_sign

The change from DST_R_OPENSSLFAILURE to ISC_R_CRYPTOFAILURE seems to be
benign. Furthermore it should a bug to rely on the exacts crypto failure
code.

3 months agouse isc_ossl_wrap to generate epheremal tls keys
Aydın Mercan [Wed, 14 Jan 2026 14:34:35 +0000 (17:34 +0300)] 
use isc_ossl_wrap to generate epheremal tls keys

3 months agoexplicitly set ec points properties in pre-3.0 openssl
Aydın Mercan [Wed, 14 Jan 2026 14:32:01 +0000 (17:32 +0300)] 
explicitly set ec points properties in pre-3.0 openssl

Generating a P-256 key in pre-3.0 wasn't explicitly using uncompressed
named curves in DNSSEC but was when generating an epheremal TLS key.

3 months agomake generate_pkcs11_ec_key consistent with others
Aydın Mercan [Tue, 13 Jan 2026 10:40:03 +0000 (13:40 +0300)] 
make generate_pkcs11_ec_key consistent with others

3 months agoexpose isc__crypto_md in isc/ossl_wrap.h
Aydın Mercan [Tue, 13 Jan 2026 10:28:54 +0000 (13:28 +0300)] 
expose isc__crypto_md in isc/ossl_wrap.h

This is a bit of a namespace convention violation but it fits the spirit of
this header since it is exposing OpenSSL-isms to others.

Further work is needed to make sure the exposed EVP_MD isn't needed
anymore.

3 months agomake isc_ossl_wrap_ecdsa_set_deterministic consistent with style
Aydın Mercan [Mon, 15 Dec 2025 16:26:50 +0000 (19:26 +0300)] 
make isc_ossl_wrap_ecdsa_set_deterministic consistent with style

3 months agoswitch away from ossl_param builders from ecdsa functions
Aydın Mercan [Wed, 10 Dec 2025 14:27:32 +0000 (17:27 +0300)] 
switch away from ossl_param builders from ecdsa functions

3 months agoset parameters in batch for rsa keygen
Aydın Mercan [Mon, 8 Dec 2025 14:46:27 +0000 (17:46 +0300)] 
set parameters in batch for rsa keygen

On top on improving readability, doing so allows us to use a uint32_t
for setting the e value, getting rid of allocating an unneccessary
BIGNUM.

3 months agoremove libcrypto version specific code in opensslecdsa_link
Aydın Mercan [Mon, 1 Dec 2025 14:07:54 +0000 (17:07 +0300)] 
remove libcrypto version specific code in opensslecdsa_link

Using `EVP_SIGNATURE` explicit algoritms for signatures have been added
in OpenSSL 3.4 and so is skipped for the initial OpenSSL version
specific code splitting.

3 months agoremove libcrypto version specific code in opensslrsa_link
Aydın Mercan [Mon, 1 Dec 2025 13:23:37 +0000 (16:23 +0300)] 
remove libcrypto version specific code in opensslrsa_link

Using `EVP_SIGNATURE` explicit algoritms for signatures have been added
in OpenSSL 3.4 and so is skipped for the initial OpenSSL version
specific code splitting.

3 months agomove openssl error reporting to isc/ossl_wrap
Aydın Mercan [Mon, 1 Dec 2025 10:49:46 +0000 (13:49 +0300)] 
move openssl error reporting to isc/ossl_wrap

While being the best place at the time, the tlserr2result doesn't belong
inside TLS code since it is generic to OpenSSL and mostly used in the
dst interface. The newly created ossl_wrap interface is the idea place
for flushing the OpenSSL thread error queue.

3 months agoadd openssl_wrap
Aydın Mercan [Mon, 1 Dec 2025 10:32:46 +0000 (13:32 +0300)] 
add openssl_wrap

The isc_ossl_wrap API is intended to separate OpenSSL version specific
code that needs to expose the libcrypto internals and keep isc_crypto
clean.

3 months agocleanup unused header in isc/md.h
Aydın Mercan [Wed, 1 Oct 2025 08:51:43 +0000 (11:51 +0300)] 
cleanup unused header in isc/md.h

Use `isc/crypto.h` whenever needed instead.

3 months agoSeparate isc_hmac between pre and post OpenSSL 3.0
Aydın Mercan [Wed, 17 Sep 2025 12:52:35 +0000 (14:52 +0200)] 
Separate isc_hmac between pre and post OpenSSL 3.0

Instead of the `EVP_MD_CTX` based functions, use either the new
`EVP_MAC` or the old `HMAC_CTX` based functions.

`EVP_MAC` is the recommended way using using MAC functions in post-3.0
while `HMAC_CTX` is used internally by `EVP_MD_CTX`, making the latter
redundant.

3 months agoswitch isc_md_type_t to a proper enum
Aydın Mercan [Tue, 16 Sep 2025 13:11:37 +0000 (15:11 +0200)] 
switch isc_md_type_t to a proper enum

Get rid of the OpenSSL-isms that plague the codebase where the hash type
is `EVP_MD *`

By using a proper enum, alongside the cleanup, we also get the ability
to use constants for known hash sizes instead of having a function call
every time.

`EVP_MD_CTX_get0_md` has been removed instead of being adapted since it
wasn't used anymore.

3 months agoinitial openssl version splitting
Aydın Mercan [Tue, 16 Sep 2025 11:43:52 +0000 (13:43 +0200)] 
initial openssl version splitting

Dealing with OpenSSL has been rapidly turning into an unwieldy situation
as post-3.0 changes turn the library into a different beast.

Start treating pre and post-3.0 versions differently for easier
maintenance.

3 months agochg: dev: dns_rdataset_clone() and dns_rdataset_isassociated() const parameters
Colin Vidal [Fri, 30 Jan 2026 19:28:39 +0000 (20:28 +0100)] 
chg: dev: dns_rdataset_clone() and dns_rdataset_isassociated() const parameters

`dns_rdataset_clone()` takes now a const source rdataset. Also,
`dns_rdataset_isassociated()` also takes a const rdataset.

Merge branch 'colin/rdataset-const' into 'main'

See merge request isc-projects/bind9!11462

3 months agodns_rdataset_* const parameters
Colin Vidal [Wed, 14 Jan 2026 16:40:25 +0000 (17:40 +0100)] 
dns_rdataset_* const parameters

dns_rdataset_clone() now have a const source rdataset. Also,
dns_rdataset_isassociated() also takes a const rdataset.

3 months agochg: usr: Enable minimal ANY answers by default
Ondřej Surý [Thu, 29 Jan 2026 03:29:45 +0000 (04:29 +0100)] 
chg: usr: Enable minimal ANY answers by default

ANY queries are widely abused by attackers doing reflection attacks as
they return the largest answers.  Enable minimal ANY answers by default
to reduce the attack surface of the DNS servers.

Closes #5723

Merge branch '5723-change-minimal_any-default-to-yes' into 'main'

See merge request isc-projects/bind9!11505

3 months agoEnable minimal ANY answers by default
Ondřej Surý [Wed, 28 Jan 2026 14:04:58 +0000 (15:04 +0100)] 
Enable minimal ANY answers by default

ANY queries are widely abused by attackers doing reflection attacks as
they return the largest answers.  Enable minimal ANY answers by default
to reduce the attack surface of the DNS servers.

3 months agofix: test: ISC_RUN_TEST_IMPL should use a static declaration
Mark Andrews [Wed, 28 Jan 2026 10:23:48 +0000 (21:23 +1100)] 
fix: test: ISC_RUN_TEST_IMPL should use a static declaration

These functions don't need to be called from multiple places and
by making them static we will detect when they are not added to the
list functions to be tested.

Closes #5715

Merge branch '5715-isc_run_test_impl-should-use-a-static-declaration' into 'main'

See merge request isc-projects/bind9!11480

3 months agoISC_RUN_TEST_IMPL should use a static declaration
Mark Andrews [Fri, 23 Jan 2026 04:57:42 +0000 (15:57 +1100)] 
ISC_RUN_TEST_IMPL should use a static declaration

These functions don't need to be called from multiple places and
by making them static we will detect when they are not added to the
list functions to be tested.

3 months agochg: dev: Use enum rather than numbers for isc_base64_tobuffer and isc_hex_tobuffer
Mark Andrews [Tue, 27 Jan 2026 20:22:59 +0000 (07:22 +1100)] 
chg: dev: Use enum rather than numbers for isc_base64_tobuffer and isc_hex_tobuffer

Use isc_one_or_more and isc_zero_or_more rather than (-2) and
(-1) when calling isc_base64_tobuffer. Similarly for
isc_hex_tobuffer. This should help reduce the probability
that the wrong number is used and it makes the intent clearer.

Closes #5713

Merge branch '5713-use-macros-with-isc_base64_tobuffer-and-isc_hex_tobuffer' into 'main'

See merge request isc-projects/bind9!11479

3 months agoAdd spatch for isc_one_or_more and isc_zero_or_more
Mark Andrews [Tue, 27 Jan 2026 13:21:43 +0000 (00:21 +1100)] 
Add spatch for isc_one_or_more and isc_zero_or_more

3 months agoUse isc__zero_or_more when calling isc_base64_tobuffer
Mark Andrews [Fri, 23 Jan 2026 04:11:15 +0000 (15:11 +1100)] 
Use isc__zero_or_more when calling isc_base64_tobuffer

3 months agoUse isc_one_or_more when calling isc_base64_tobuffer
Mark Andrews [Fri, 23 Jan 2026 03:59:37 +0000 (14:59 +1100)] 
Use isc_one_or_more when calling isc_base64_tobuffer

3 months agoUse isc_one_or_more when calling isc_hex_tobuffer
Mark Andrews [Fri, 23 Jan 2026 04:08:40 +0000 (15:08 +1100)] 
Use isc_one_or_more when calling isc_hex_tobuffer

3 months agoAdd enum for use with isc_base64_tobuffer and isc_hex_tobuffer
Mark Andrews [Fri, 23 Jan 2026 03:53:18 +0000 (14:53 +1100)] 
Add enum for use with isc_base64_tobuffer and isc_hex_tobuffer

This adds the following enum isc_one_or_more and isc_zero_or_more
which specify if one or more or zeror or more bytes are required
when reading the unbounded base64 / hex encoded data.

3 months agofix: usr: Fix a possible issue with reponse policy zones and catalog zones
Arаm Sаrgsyаn [Tue, 27 Jan 2026 11:32:07 +0000 (11:32 +0000)] 
fix: usr: Fix a possible issue with reponse policy zones and catalog zones

If a response policy zone (RPZ) or a catalog zone contained an
`$INCLUDE` directive, then manually reloading that zone could
fail to process the changes in the response policy or in the
catalog, respectively. This has been fixed.

Closes #5714

Merge branch '5714-zone_loaddone-rpz-and-catz-bugfix' into 'main'

See merge request isc-projects/bind9!11489

3 months agoAdd a new check in the RPZ system test
Aram Sargsyan [Mon, 26 Jan 2026 14:28:10 +0000 (14:28 +0000)] 
Add a new check in the RPZ system test

Check that reloading a response policy zone which has an '$INCLUDE'
directive defined is working as expected.

3 months agoFix a bug in zone_loaddone()
Aram Sargsyan [Mon, 26 Jan 2026 15:34:00 +0000 (15:34 +0000)] 
Fix a bug in zone_loaddone()

The zone_loaddone() function disables database notifications for
a catalog zones and response policy zones (RPZ) when loading had
failed. Howerer, the 'result != ISC_R_SUCCESS' check is insufficient,
because the DNS_R_SEENINCLUDE result also indicates success.

Add a second condition for the "if" block.

3 months agofix: test: Resolve the system_test_dir in pytest
Nicki Křížek [Tue, 27 Jan 2026 10:46:55 +0000 (11:46 +0100)] 
fix: test: Resolve the system_test_dir in pytest

If the system_test_dir contains a symlink, then it might cause issues
further down when using relative_to(), unless it is resolved first. This
has been observed on FreeBSD13 in CI where /home is a symlink to
/usr/home.

Merge branch 'nicki/pytest-freebsd13-artifacts-path' into 'main'

See merge request isc-projects/bind9!11490

3 months agoResolve the system_test_dir in pytest
Nicki Křížek [Mon, 26 Jan 2026 17:37:00 +0000 (18:37 +0100)] 
Resolve the system_test_dir in pytest

If the system_test_dir contains a symlink, then it might cause issues
further down when using relative_to(), unless it is resolved first. This
has been observed on FreeBSD13 in CI where /home is a symlink to
/usr/home.

3 months agofix: usr: Fix brid and hhit implementation
Mark Andrews [Tue, 27 Jan 2026 05:45:55 +0000 (16:45 +1100)] 
fix: usr: Fix brid and hhit implementation

Fix bugs in BRID and HHIT implementation and enable
the unit tests.

Closes #5710

Merge branch '5710-fix-hhit-and-brid-issues' into 'main'

See merge request isc-projects/bind9!11491

3 months agoFix brid and hhit unit tests
Mark Andrews [Sat, 24 Jan 2026 07:37:52 +0000 (18:37 +1100)] 
Fix brid and hhit unit tests

These tests were not being run.

3 months agoRemove extraneous space at start of brid and hhit records
Mark Andrews [Sat, 24 Jan 2026 07:33:47 +0000 (18:33 +1100)] 
Remove extraneous space at start of brid and hhit records

3 months agoFix isc_base64_tobuffer call for brid and hhit
Mark Andrews [Sat, 24 Jan 2026 07:32:40 +0000 (18:32 +1100)] 
Fix isc_base64_tobuffer call for brid and hhit

Zero length records were not being rejected.

3 months agofix: test: Fix a race condition in dnssec test
Nicki Křížek [Mon, 26 Jan 2026 12:10:25 +0000 (13:10 +0100)] 
fix: test: Fix a race condition in dnssec test

When dumpdb command is executed, it might take a while until the file is
written. Rather than checking the file once, use the WatchLog mechanism
to allow the desired line to appear before a timeout happens.

This affected test_validation_recovery and test_cache tests which have
been intermittently failing on EL8 in our CI.

Merge branch 'nicki/fix-dnssec-test-dumpdb-race' into 'main'

See merge request isc-projects/bind9!11487

3 months agoFix a race condition in dnssec test
Nicki Křížek [Mon, 26 Jan 2026 09:45:34 +0000 (10:45 +0100)] 
Fix a race condition in dnssec test

When dumpdb command is executed, it might take a while until the file is
written. Rather than checking the file once, use the WatchLog mechanism
to allow the desired line to appear before a timeout happens.

This affected test_validation_recovery and test_cache tests which have
been intermittently failing on EL8 in our CI.

3 months agochg: test: Use isctest.asyncserver in the "resolver" system test
Štěpán Balážik [Sat, 24 Jan 2026 15:23:35 +0000 (15:23 +0000)] 
chg: test: Use isctest.asyncserver in the "resolver" system test

Depends on !11403, !11419

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

See merge request isc-projects/bind9!11411

3 months agoFix bugs in 'resolver/ans2' and 'resolver/ans3'
Štěpán Balážik [Thu, 25 Dec 2025 20:48:33 +0000 (21:48 +0100)] 
Fix bugs in 'resolver/ans2' and 'resolver/ans3'

There were multiple typos and omissions regarding query minimization.

3 months agoReimplement 'resolver/ans10' server using AsyncDnsServer
Štěpán Balážik [Thu, 25 Dec 2025 16:03:20 +0000 (17:03 +0100)] 
Reimplement 'resolver/ans10' server using AsyncDnsServer

Ensure packet-for-packet compatibility with the old server.

3 months agoReimplement 'resolver/ans8' server using AsyncDnsServer
Štěpán Balážik [Thu, 25 Dec 2025 16:03:20 +0000 (17:03 +0100)] 
Reimplement 'resolver/ans8' server using AsyncDnsServer

Ensure packet-for-packet compatibility with the old server.

3 months agoReimplement 'resolver/ans3' server using AsyncDnsServer
Štěpán Balážik [Thu, 25 Dec 2025 16:03:20 +0000 (17:03 +0100)] 
Reimplement 'resolver/ans3' server using AsyncDnsServer

Ensure packet-for-packet compatibility with the old server including
bugs.

3 months agoReimplement 'resolver/ans2' server using AsyncDnsServer
Štěpán Balážik [Thu, 25 Dec 2025 16:03:20 +0000 (17:03 +0100)] 
Reimplement 'resolver/ans2' server using AsyncDnsServer

Ensure packet-for-packet compatibility with the old server including
bugs.

3 months agoAdd common parts of resolver test custom servers
Štěpán Balážik [Fri, 26 Dec 2025 00:06:28 +0000 (01:06 +0100)] 
Add common parts of resolver test custom servers

These will be shared by all the ans*/ans.py files.

3 months agoAdd StaticResponseHandler to isctest.asyncserver
Štěpán Balážik [Fri, 26 Dec 2025 00:03:33 +0000 (01:03 +0100)] 
Add StaticResponseHandler to isctest.asyncserver

It is used to prepare and yield one DNS response and avoid the
`get_responses` boiler-plate.

3 months agoAdd QnameQtypeHandler for matching QNAME, QTYPE pairs
Štěpán Balážik [Thu, 25 Dec 2025 22:53:26 +0000 (23:53 +0100)] 
Add QnameQtypeHandler for matching QNAME, QTYPE pairs

This is a pattern in the resolver system test and also elsewhere.

3 months agoDelete unused ResponseHandlers from statistics ans server
Štěpán Balážik [Thu, 25 Dec 2025 16:00:00 +0000 (17:00 +0100)] 
Delete unused ResponseHandlers from statistics ans server

Turns out the original ans.pl implementation before (!10928) was a copy
of an old version of the ans2 server from the resolver system test.

I reimplemented it fully, even though only two ResponseHandlers are
actually used in the statistics test.

3 months agoStore the most specific matched domain in DomainHandler
Štěpán Balážik [Thu, 25 Dec 2025 15:58:35 +0000 (16:58 +0100)] 
Store the most specific matched domain in DomainHandler

Store the most specific matching domain in DomainHandler and
expose it through the `matched_domain` property for subclasses
to use in their implementations of `get_responses`.

3 months agofix: test: unit test tsig_badsig was not being called
Mark Andrews [Fri, 23 Jan 2026 15:27:34 +0000 (02:27 +1100)] 
fix: test: unit test tsig_badsig was not being called

Additionally, the test was badly implemented. This has been fixed.

Closes #5712

Merge branch '5712-unit-test-tsig_badsig-was-not-being-called' into 'main'

See merge request isc-projects/bind9!11478

3 months agoFix and call tsig_badsig unit test
Mark Andrews [Fri, 23 Jan 2026 03:30:44 +0000 (14:30 +1100)] 
Fix and call tsig_badsig unit test

3 months agofix: usr: DSYNC record incorrectly used two octets for the Scheme Field
Mark Andrews [Fri, 23 Jan 2026 14:24:04 +0000 (01:24 +1100)] 
fix: usr: DSYNC record incorrectly used two octets for the Scheme Field

When creating the `DSYNC` record from a structure, `uint16_tobuffer` was used instead of `uint8_tobuffer` when adding the scheme, causing a `DSYNC` record that was one octet too long. This has been fixed.

Closes #5711

Merge branch '5711-dsync_fromstruct-produces-an-invalid-record' into 'main'

See merge request isc-projects/bind9!11477

3 months agoFix dsync unit test
Mark Andrews [Fri, 23 Jan 2026 02:38:16 +0000 (13:38 +1100)] 
Fix dsync unit test

The dsync unit test was not being run and the domain names in
the test data should have been fully qualified.

3 months agodsync_from struct produced an invalid record
Mark Andrews [Fri, 23 Jan 2026 02:32:41 +0000 (13:32 +1100)] 
dsync_from struct produced an invalid record

uint16_tobuffer was used instead of uint8_tobuffer when adding the
scheme to the buffer.  This produced a record that was one octet
too long.  This has been fixed.

3 months agochg: usr: Lowercase the NSEC next owner name when signing
Matthijs Mekking [Fri, 23 Jan 2026 12:46:51 +0000 (12:46 +0000)] 
chg: usr: Lowercase the NSEC next owner name when signing

When building the NSEC rdata, lowercase the next owner name before
storing it in the Next Domain Name Field.

Note that this is not required according to RFC 6840, but since there
is inconsistency in the documents over time, having uppercase next
owner names in the NSEC records may cause validation failures if
validators are not following RFC 6840.

Closes #5702

Merge branch '5702-lowercase-nsec-next-owner-name' into 'main'

See merge request isc-projects/bind9!11442

3 months agoAdd kasp test zone with uppercase characters
Matthijs Mekking [Fri, 9 Jan 2026 10:32:43 +0000 (11:32 +0100)] 
Add kasp test zone with uppercase characters

The test ensures that such zone is signed correctly.  In addition, test
that the next owner name field of the NSEC record is lowercased.

3 months agoLower case the NSEC next owner name when signing
Matthijs Mekking [Fri, 9 Jan 2026 11:19:42 +0000 (12:19 +0100)] 
Lower case the NSEC next owner name when signing

When building the NSEC rdata, lower case the next owner name before
storing it in the Next Domain Name Field.

Note that this is not required according to RFC 6840, Section 5.1:

  When canonicalizing DNS names (for both ordering and signing), DNS
  names in the RDATA section of NSEC resource records are not converted
  to lowercase.  DNS names in the RDATA section of RRSIG resource
  records are converted to lowercase.

  The guidance in the above paragraph differs from what has been
  published before but is consistent with current common practice.
  Item 3 of Section 6.2 of [RFC4034] says that names in both of these
  RR types should be converted to lowercase.  The earlier [RFC3755]
  says that they should not.

Since there is inconsistency in the documents over time, having
uppercase next owner names in the NSEC records may cause validation
failures if validators are not implementing RFC 6840.

Also, RFC 4034 section 6.2 is not about how NSEC record content is
created, but how RRset content is normalized in order to produce and
validate RRSIG records for a given RRset. Since the next owner name
of the NSEC record is about ordening, and the canonical DNS name order
requires that uppercase US-ASCII letters must be treated as if they
were lowercase US-ASCII letters, case is not meaningful for NSEC
next owner names, as it cannot be compressed on the wire, so we may
lowercase the next owner name in the NSEC rdata before signing, being
more kind to validators.

3 months agochg: ci: Use a small always-on runner for lightweight CI jobs
Andoni Duarte [Fri, 23 Jan 2026 11:33:53 +0000 (11:33 +0000)] 
chg: ci: Use a small always-on runner for lightweight CI jobs

Some CI jobs spend more time pulling the docker image and setting up their environment than running the script. This MR adds a tag `smalljob` to jobs considered lightweight in order to run them on a dedicated small VM.

Merge branch 'andoni/try-small-vm-for-lightweight-ci-jobs' into 'main'

See merge request isc-projects/bind9!11266

3 months agoAdd smalljob tag to small jobs not in the quick-checks stage
Andoni Duarte Pintado [Thu, 15 Jan 2026 11:16:30 +0000 (12:16 +0100)] 
Add smalljob tag to small jobs not in the quick-checks stage

Jobs using the "post_merge" and "manual_release_job_qa" anchors also
complete in less than a minute, so they now include the "smalljob" tag.

Since the "release" job is also a fast one, but without an anchor, the
"smalljob" tag is added to its definition.

3 months agoDe-duplicate yaml for "other-checks" jobs
Andoni Duarte Pintado [Tue, 13 Jan 2026 15:32:45 +0000 (16:32 +0100)] 
De-duplicate yaml for "other-checks" jobs

In .gitlab-ci.yml, since "&other_checks_job" has "needs: []", remove
that line from the jobs that use that anchor.

3 months agoMove "needs: []" to the "quick_checks_job" anchor
Andoni Duarte Pintado [Fri, 19 Dec 2025 10:55:30 +0000 (11:55 +0100)] 
Move "needs: []" to the "quick_checks_job" anchor

Most jobs in this stage have it by default, so it makes sense to
add it to their common anchor. Jobs with different "needs:" will
override it.

3 months agoGroup CI jobs in "quick-checks" stage together
Andoni Duarte Pintado [Mon, 15 Dec 2025 16:21:27 +0000 (17:21 +0100)] 
Group CI jobs in "quick-checks" stage together

Move the jobs in the "quick-checks" stage to the same place in
.gitlab-ci.yml.

3 months agoAdd faster CI jobs to the "quick-checks" stage
Andoni Duarte Pintado [Mon, 15 Dec 2025 16:19:28 +0000 (17:19 +0100)] 
Add faster CI jobs to the "quick-checks" stage

Given the short runtime (<1min) of the "linkcheck" and
"generate-tsan-stress-test-configs" CI jobs, move them to the
"quick-checks" stage.

3 months agoMove CI stage "other-checks" right after "quick-checks"
Andoni Duarte Pintado [Mon, 15 Dec 2025 16:01:58 +0000 (17:01 +0100)] 
Move CI stage "other-checks" right after "quick-checks"

Move CI stage "other-checks" right after "quick-checks" and get the jobs
in it as close to each other as possible in .gitlab-ci.yml.

Since no job is allowed to depend (via "needs") on any job that is
assigned to a stage later than its own, move the "tsan:stress" and
"gcov" jobs to the "system" stage.

3 months agoMove slower CI jobs out of "quick-checks" stage
Andoni Duarte Pintado [Mon, 15 Dec 2025 14:50:28 +0000 (15:50 +0100)] 
Move slower CI jobs out of "quick-checks" stage

Jobs with more than one minute of runtime are not considered for the
small VM.

The "tarball-create" job goes to the more appropriate "build" stage.

"coccinelle" and "checkbashisms" are moved to the generic
"other-checks".

3 months agoCreate "other_checks_job" anchor in CI yaml
Andoni Duarte Pintado [Mon, 15 Dec 2025 13:47:08 +0000 (14:47 +0100)] 
Create "other_checks_job" anchor in CI yaml

Use an anchor for the common parts of "other-checks" jobs in CI yaml.

3 months agoRename the "postcheck" stage to "other-checks" in CI
Andoni Duarte Pintado [Mon, 15 Dec 2025 13:49:59 +0000 (14:49 +0100)] 
Rename the "postcheck" stage to "other-checks" in CI

Rename the "postcheck" CI stage to the more generic "other-checks".
Slower jobs that still run in autoscaled runners belong here, as opposed
to the lightweight ones in "quick-checks".

3 months agoRename the "precheck" stage in CI to "quick-checks"
Andoni Duarte Pintado [Mon, 15 Dec 2025 12:08:44 +0000 (13:08 +0100)] 
Rename the "precheck" stage in CI to "quick-checks"

Most jobs in the "precheck" stage spend more time setting up their
environment than running the script (seconds), this allows us to add a
small always on dedicated runner instead of the autoscaled ones.

Hence, the stage is renamed to "quick-checks", and a tag "smalljob" is
added to the anchor so that these jobs are picked by the dedicated
runner.

3 months agochg: nil: Refactor kasp attach and detach code
Matthijs Mekking [Fri, 23 Jan 2026 10:37:48 +0000 (10:37 +0000)] 
chg: nil: Refactor kasp attach and detach code

Use the now more common `ISC_REFCOUNT_IMPL`.

Merge branch 'matthijs-refactor-kasp-attach' into 'main'

See merge request isc-projects/bind9!11466

3 months agoRefactor dns_kasp_attach/detach
Matthijs Mekking [Tue, 20 Jan 2026 15:11:48 +0000 (16:11 +0100)] 
Refactor dns_kasp_attach/detach

Replace implementation with ISC_REFCOUNT_IMPL.

3 months agofix: ci: Read the Docs picking old version when stable tag is updated
Andoni Duarte [Thu, 22 Jan 2026 18:40:33 +0000 (18:40 +0000)] 
fix: ci: Read the Docs picking old version when stable tag is updated

Read the Docs fails to pick the latest version when updating the `stable` tag, i.e. a build is triggered but it takes the previous version of it. This is a known bug in RtD: https://github.com/readthedocs/readthedocs.org/issues/10838.

The only approach that seems to solve this on our end, is to wait some time and trigger the build again so that it picks the latest version of the tag.

Merge branch 'andoni/fix-rtd-picking-old-version-when-stable-branch-update' into 'main'

See merge request isc-projects/bind9!11475

3 months agoFix Read the Docs stable branch update bug
Andoni Duarte Pintado [Thu, 22 Jan 2026 12:25:18 +0000 (13:25 +0100)] 
Fix Read the Docs stable branch update bug

Read the Docs fails to pick the latest version of the stable tag when
updated, i.e. a build is triggered but it takes the previous version.
This commit triggers a second build after 5 minutes to ensure that the
correct tag version is used for the documentation.

This is a known bug in RtD:
https://github.com/readthedocs/readthedocs.org/issues/10838.

3 months agofix: nil: Add missing sources to named-checkconf
Nicki Křížek [Thu, 22 Jan 2026 10:23:38 +0000 (11:23 +0100)] 
fix: nil: Add missing sources to named-checkconf

The included defaultconfig.h in named-checkconf uses bind.keys.h.

Closes #5709

Merge branch '5709-meson-freebsd-compilation' into 'main'

See merge request isc-projects/bind9!11474

3 months agoAdd missing sources to named-checkconf
Nicki Křížek [Thu, 22 Jan 2026 08:57:54 +0000 (09:57 +0100)] 
Add missing sources to named-checkconf

The included defaultconfig.h in named-checkconf uses bind.keys.h.

3 months agofix: ci: Apply black formatting changes
Nicki Křížek [Thu, 22 Jan 2026 08:41:31 +0000 (09:41 +0100)] 
fix: ci: Apply black formatting changes

Generated by black 26.1.0 which got updated in CI.

Merge branch 'nicki/python-black' into 'main'

See merge request isc-projects/bind9!11471

3 months agoApply black formatting changes
Nicki Křížek [Wed, 21 Jan 2026 21:31:15 +0000 (22:31 +0100)] 
Apply black formatting changes

Generated by black 26.1.0 which got updated in CI.

3 months agochg: nil: fix resolver doc in the response context
Colin Vidal [Thu, 22 Jan 2026 08:11:36 +0000 (09:11 +0100)] 
chg: nil: fix resolver doc in the response context

Fixes a couple of comment/documentation issues in the resolver.

Merge branch 'colin/resolver-doc' into 'main'

See merge request isc-projects/bind9!11465

3 months agoresolver: add comment when recursing
Colin Vidal [Mon, 19 Jan 2026 14:52:30 +0000 (15:52 +0100)] 
resolver: add comment when recursing

When a fetch result gets a delegation, `rctx_referral()` sets the
`rctx->get_nameserver = true`, which tells the resolver to retry another
server, not because of an error with the current server, but simply to
follow the delegation.

Update the comment of `rctx_nextserver()` which is quite confusing here
(as it's not immediately obvious from the code how we recurse when
getting a delegation back from a query).

Also add a log line, which helps figuring out this is happening.

3 months agofix resolver query response doc
Colin Vidal [Mon, 19 Jan 2026 12:46:03 +0000 (13:46 +0100)] 
fix resolver query response doc

In case on positive response, the `rctx_authority_positive()` function
is called to scan the AUTHORITY section to find NS servers and related
RR (glues) to be cached.

The doc says the function was called `rctx_authority_scan()`, but it is
called `rctx_authority_positive()`.

3 months agochg: pkg: Update requirements for system test suite
Nicki Křížek [Wed, 21 Jan 2026 15:11:25 +0000 (16:11 +0100)] 
chg: pkg: Update requirements for system test suite

Python 3.10 or newer is now required for running the system test suite. The required python packages and their version requirements are now tracked in `bin/tests/system/requirements.txt`.

Support for pytest 9.0.0 has been added its minimum supported version has been raised to 7.0.0. The minimum supported dnspython version has been raised to 2.3.0.

Closes #5690

Closes #5614

Merge branch 'nicki/pytest-9-compat' into 'main'

See merge request isc-projects/bind9!11415

3 months agoSilence incorrect pylint warnings for hypothesis.assume()
Nicki Křížek [Wed, 31 Dec 2025 09:53:23 +0000 (10:53 +0100)] 
Silence incorrect pylint warnings for hypothesis.assume()

With hypothesis>6.148.3, pylint generates

W0101: Unreachable code (unreachable)

when any code is present after hypothesis.assume(). Silence these until
it is fixed upstream.

See https://github.com/pylint-dev/pylint/issues/10785#issuecomment-3677224217

3 months agoRemove hypothesis version checks
Nicki Křížek [Tue, 30 Dec 2025 13:46:23 +0000 (14:46 +0100)] 
Remove hypothesis version checks

The minimum required hypothesis version has been set in requirements.txt
and no longer needs to be checked at runtime.

Since the hypothesis package is now a mandatory prerequisite, include it
in isctest as the other subpackages.

3 months agoRemove compatibility hacks for dnspython<2.7.0
Nicki Křížek [Tue, 30 Dec 2025 13:29:51 +0000 (14:29 +0100)] 
Remove compatibility hacks for dnspython<2.7.0

The minimum required dnspython version is now 2.7.0 and those
compatibility hacks can be dropped.

3 months agoPrefer Python 3.12 if available
Nicki Křížek [Tue, 30 Dec 2025 12:36:41 +0000 (13:36 +0100)] 
Prefer Python 3.12 if available

This ensures that python3.12 is used testing on older distributions
like EL8 and EL9, where the platform default python3 is older.

python3.11 was explicitly added due to FreeBSD, which doesn't have that
binary symlinked to any other name (like python3). Previously, it worked
only incidentally - when python3 was listed first, it triggered special
meson code for python detection, which is no longer the case when
python3.12 is listed first.

3 months agoBump the minimum required python version to 3.10
Nicki Křížek [Tue, 30 Dec 2025 12:45:50 +0000 (13:45 +0100)] 
Bump the minimum required python version to 3.10

Drop support of EoL python versions for running system tests. The
maintenance cost of supporting end of life ecosystem, especially Python
3.6 on EL8 and the related outdated packages (pytest, dnspython, ...),
has become unreasonable.

3 months agoRemove pytest<7 compatibility hacks
Nicki Křížek [Tue, 30 Dec 2025 12:42:53 +0000 (13:42 +0100)] 
Remove pytest<7 compatibility hacks

Minimum pytest version has been bumped to 7.0.0, thus these are no
longer needed.

3 months agoAdd support for pytest>=9.0.0
Nicki Křížek [Tue, 16 Dec 2025 16:48:04 +0000 (17:48 +0100)] 
Add support for pytest>=9.0.0

Use collection_path rather than the deprecated path argument for
pytest_ignore_collect() hook.

The collection_path argument was added in pytest 7.0.0, which is the
minimum supported pytest version from now on.

3 months agoAdd requirements.txt for system tests
Nicki Křížek [Tue, 16 Dec 2025 17:27:20 +0000 (18:27 +0100)] 
Add requirements.txt for system tests

This file lists the required Python packages and versions for running
system tests. The easiest way to obtain them is:

    pip install -r requirements.txt

The minimum dnspython version is 2.7.0 because it supports TSIG parsing
without validation (for tsig/tests_tsig_hypothesis.py) and wire() (for
names/tests_names.py).

The minimum pytest version was bumped to 7.0.0 because it supports the
collection hook API required by pytest 9.

The minimum hypothesis version was set to 4.41.2 as prior versions might
have issues on FIPS systems.

3 months agoMerge tag 'v9.21.17'
Nicki Křížek [Wed, 21 Jan 2026 14:35:17 +0000 (14:35 +0000)] 
Merge tag 'v9.21.17'

3 months agofix: dev: Fix a bug in qpzone.c:first_existing_header_indirect()
Arаm Sаrgsyаn [Wed, 21 Jan 2026 10:47:31 +0000 (10:47 +0000)] 
fix: dev: Fix a bug in qpzone.c:first_existing_header_indirect()

There is a bug in qpzone.c:first_existing_header_indirect() where
it does not advance the pointer in the FOREACH type loop.

Remove the static function altogether, as it was used only once and
had some other problems too, and use simpler custom code instead in
the place where it was used.

Closes #5691

Merge branch '5691-qpzone.c-first_existing_header_indirect-fix' into 'main'

See merge request isc-projects/bind9!11460

3 months agoAdd a new dbversion unit test
Aram Sargsyan [Tue, 20 Jan 2026 16:20:35 +0000 (16:20 +0000)] 
Add a new dbversion unit test

Test that closing a writer with a rollback, then opening another
writer and adding a rdataset (while still holding the node reference)
works correctly.

This test checks that the bugfix in the previous commit is correct.

3 months agoRemove qpzone.c:first_existing_header_indirect() which had bugs
Aram Sargsyan [Fri, 16 Jan 2026 14:07:39 +0000 (14:07 +0000)] 
Remove qpzone.c:first_existing_header_indirect() which had bugs

The first_existing_header_indirect() static function is used only
in one place and it has bugs:

1. It doesn't advance the pointer and can cause an infinite loop
   if it doesn't break out from the loop on the first iteration.
2. It doesn't check if the header EXISTS, though its name indicates
   that it should.
3. Even if the infinite loop bug is fixed, it would eventually
   return the last checked header's pointer even if all the
   candidates do not match the criteria of the selection.

Instead of fixing it, remove the function and use simpler code in
the place where it was being called.