]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
11 days agoAdd a new check in the proxyheader unit test 12434/head
Aram Sargsyan [Wed, 22 Jul 2026 12:20:20 +0000 (12:20 +0000)] 
Add a new check in the proxyheader unit test

Check that isc_proxy2_header_handle_directly() can handle
data that is not aligned on the usual boundary.

11 days agoUse memmove in isc_sockaddr_fromin/isc_sockaddr_fromin6
Aram Sargsyan [Wed, 22 Jul 2026 12:18:59 +0000 (12:18 +0000)] 
Use memmove in isc_sockaddr_fromin/isc_sockaddr_fromin6

Use memmove instead of direct assignment from the source pointer
because the source pointer is not guaranteed to be correctly
aligned.

11 days agonew: test: Mark each test's boundaries in the named instance logs
Nicki Křížek [Thu, 23 Jul 2026 10:58:26 +0000 (12:58 +0200)] 
new: test: Mark each test's boundaries in the named instance logs

Use `rndc null` command to mark each test boundaries in named.run logs.

Since calling the `rndc` binary caused a lot of overhead, import the rndc python interface from [python-rndc](https://gitlab.isc.org/isc-projects/python-rndc/) and adapt it to our use-case.

Merge branch 'nicki/rndc-null-in-system-tests' into 'main'

See merge request isc-projects/bind9!12415

11 days agoMark each test's boundaries in the named instance logs 12415/head
Nicki Křížek [Fri, 10 Jul 2026 11:50:51 +0000 (11:50 +0000)] 
Mark each test's boundaries in the named instance logs

Send an `rndc null` command with a test ID marker at the start and end
of each test function to all named instances.

This makes it easy to identify the precise point where each test was
executed when reading the named logs. This becomes especially useful for
modules which run multiple test functions, since those are executed on
the same named instances.

Assisted-by: Claude:claude-fable-5
11 days agoIntegrate the Python RNDC client into isctest
Nicki Křížek [Tue, 14 Jul 2026 11:42:25 +0000 (11:42 +0000)] 
Integrate the Python RNDC client into isctest

Register the rndc module in the isctest package and provide a
NamedInstance.rndc_client() factory next to rndc(), so tests can grab
a client for an instance's control channel without repeating the
address and port details.

Assisted-by: Claude:claude-fable-5
11 days agoRework the Python RNDC client API around isctest conventions
Nicki Křížek [Tue, 14 Jul 2026 11:41:39 +0000 (11:41 +0000)] 
Rework the Python RNDC client API around isctest conventions

Rename the class to RNDCClient and align its interface with the
existing isctest.run helpers so that the binary and the Python RNDC
interfaces feel the same:

- take separate ip/port arguments and accept commands as str
- default the HMAC algorithm and secret to the _common/rndc.key
  values used by virtually all control channels in the system tests
- call() returns an RNDCResult mirroring CmdResult (rc/out/err) and
  raises RNDCException on a non-zero result code, with the same
  raise_on_exception escape hatch as isctest.run.cmd(); the decoded
  protocol response stays available as RNDCResult.response
- support the context manager protocol and add close(); the socket
  gets a timeout so a stuck server can't hang a test, and a failed
  login closes the socket instead of leaking it
- use sendall() and an exact-read loop to avoid short reads/writes
  (MSG_WAITALL is ineffective on a socket with a timeout, which
  operates in non-blocking mode)
- raise RNDCProtocolError for truncated, malformed, or
  unauthenticated responses instead of overloading OSError
- draw the initial message serial from the full 32-bit space like
  the rndc binary, keeping the odds of tripping named's duplicate
  message suppression negligible

Assisted-by: Claude:claude-fable-5
11 days agoAdd type annotations to rndc.py
Nicki Křížek [Tue, 14 Jul 2026 11:39:50 +0000 (11:39 +0000)] 
Add type annotations to rndc.py

Annotate the module for the mypy CI gate. The locals in _command()
that were reused for values of a different type are split so each name
keeps a single type.

Assisted-by: Claude:claude-fable-5
11 days agoAlign rndc.py naming with project conventions
Nicki Křížek [Tue, 14 Jul 2026 11:38:25 +0000 (11:38 +0000)] 
Align rndc.py naming with project conventions

Rename locals that shadow the hash, input, and type builtins and drop
the double-underscore name mangling from private members in favor of
the single-underscore style used across isctest.

Assisted-by: Claude:claude-fable-5
11 days agoPort rndc.py to Python 3.10 idioms
Nicki Křížek [Tue, 14 Jul 2026 11:37:40 +0000 (11:37 +0000)] 
Port rndc.py to Python 3.10 idioms

Replace percent formatting of str with f-strings and the deprecated
IOError alias with OSError. The bytes interpolation in the protocol
serialization is left alone; f-strings have no bytes counterpart.

Assisted-by: Claude:claude-fable-5
11 days agoSort rndc.py imports with ruff
Nicki Křížek [Tue, 14 Jul 2026 11:36:44 +0000 (11:36 +0000)] 
Sort rndc.py imports with ruff

Assisted-by: Claude:claude-fable-5
11 days agoFormat rndc.py with black
Nicki Křížek [Tue, 14 Jul 2026 11:36:29 +0000 (11:36 +0000)] 
Format rndc.py with black

Assisted-by: Claude:claude-fable-5
11 days agoUse the standard license header in the imported rndc.py
Nicki Křížek [Tue, 14 Jul 2026 11:36:16 +0000 (11:36 +0000)] 
Use the standard license header in the imported rndc.py

Replace the upstream header with the SPDX-tagged header used across the
repository and drop the stale __version__ marker, which has no meaning
for an in-tree copy. The module provenance is recorded in the import
commit.

Assisted-by: Claude:claude-fable-5
11 days agoImport rndc.py from the python-rndc project verbatim
Nicki Křížek [Tue, 14 Jul 2026 08:47:30 +0000 (08:47 +0000)] 
Import rndc.py from the python-rndc project verbatim

Bring in the pure-Python RNDC protocol client as-is, with no
modifications, so that subsequent cleanup and integration changes can
be reviewed against the pristine upstream source.

Source: python-rndc rndc.py (version 0.2.0)

Co-authored-by: Matthew Pounsett <matt@conundrum.com>
Assisted-by: Claude:claude-fable-5
11 days agochg: test: Deduplicate controls configuration in named.conf test templates
Nicki Křížek [Thu, 23 Jul 2026 09:21:46 +0000 (11:21 +0200)] 
chg: test: Deduplicate controls configuration in named.conf test templates

The named.conf.j2 files in system tests had a copy-pasted snippets for control channel configuration. These were replaced with the `_common/controls.conf.j2` template.

The control channel was turned on for all named test instances.

Merge branch 'nicki/pytest-named-conf-controls' into 'main'

See merge request isc-projects/bind9!12386

11 days agoCover quoted key names in checkconf 12386/head
Nicki Křížek [Fri, 10 Jul 2026 11:47:46 +0000 (11:47 +0000)] 
Cover quoted key names in checkconf

The logfileconfig configs used to define an unquoted hyphenated
`key rndc-key` referenced as `keys { "rndc-key"; }`, incidentally
covering quoted/unquoted key-name interchangeability.  Now that those
configs use the shared controls include, keep that parser coverage in
a checkconf test.

Assisted-by: Claude:claude-fable-5
11 days agoMark the configs that deliberately keep a custom controls config
Nicki Křížek [Wed, 8 Jul 2026 18:36:20 +0000 (18:36 +0000)] 
Mark the configs that deliberately keep a custom controls config

Every remaining deviation from the shared _common/controls.conf.j2
include is intentional; annotate each with a one-line grep-able
comment stating why:

- rndc/ns2 and ns5 test multi-key and read-only channels; ns4 gets a
  runtime-generated multi-key channel appended by setup.sh;
- resolver/ns9 runs an IPv6-only channel, which the IPv4-only shared
  template cannot express;
- shutdown/resolver lives in a non-ns<N> directory, so the template's
  ns.ip variable is not injected there.

Assisted-by: Claude:claude-fable-5
11 days agoReplace empty controls statements with the controls template
Nicki Křížek [Wed, 8 Jul 2026 18:34:01 +0000 (18:34 +0000)] 
Replace empty controls statements with the controls template

None of those tests relies on the controls channel being absent, so
make the control channel available same as for all other named test
instances.

Assisted-by: Claude:claude-fable-5
11 days agoProvide a control channel on named instances that had none
Nicki Křížek [Wed, 8 Jul 2026 18:29:39 +0000 (18:29 +0000)] 
Provide a control channel on named instances that had none

Insert _common/controls.conf.j2 right after the options block in every
started named instance config that declared no control channel at all.
This ensure that each named instance exposes its control channel for the
tests.

Note that some configs may include the control channel via a named.conf
include mechanism. Those are left as is, since the control channel is
already configured via that include mechanism -- and those configs
aren't part of this commit at all.

Assisted-by: Claude:claude-fable-5
11 days agoUse controls template in named configs where rndc.key was included
Nicki Křížek [Wed, 8 Jul 2026 18:23:47 +0000 (18:23 +0000)] 
Use controls template in named configs where rndc.key was included

Same sweep as the previous commit, for the configs that obtained the
key via a native `include ".../_common/rndc.key";`.

Commit was split up for easier review-ability.

Assisted-by: Claude:claude-fable-5
11 days agoUse controls template in named configs where rndc key was inlined
Nicki Křížek [Wed, 8 Jul 2026 18:13:26 +0000 (18:13 +0000)] 
Use controls template in named configs where rndc key was inlined

Replace all occurences of rndc_key and controls channel config with the
standard _common/controls.conf.j2 template.

The server's IP address will be automatically filled in based on the
instance's directory name (nsX -> 10.53.0.X) using the @ns.ip@
dir-specific template variable.

The controls template also include the `rndc_key`, so any uses of that
remain functional.

If present, the empty controls section were removed, since they were
redundant.

The logfileconfig configs used quoted `"rndc-key"` and were switched to
`rndc_key` instead. The specific use-case of quoted key using a hyphen
will be re-added in one of the followup commits as a dedicated test.

Assisted-by: Claude:claude-fable-5
11 days agoFix controls statements bound to another instance's address
Nicki Křížek [Wed, 8 Jul 2026 18:06:19 +0000 (18:06 +0000)] 
Fix controls statements bound to another instance's address

Some of the system test named configs had a mismatched control channel
IP address. As there is no evidence this was intentional (no uses of the
control channel), it was most likely introduced as a copy-paste bug. Fix
the control channel IP to match the instance number.

Assisted-by: Claude:claude-fable-5
12 days agofix: nil: Fix the logged ZONEVERSION serial number
Evan Hunt [Thu, 23 Jul 2026 05:59:56 +0000 (05:59 +0000)] 
fix: nil: Fix the logged ZONEVERSION serial number

The serial number in the ZONEVERSION log message was computed
incorrectly; this has been fixed.

Closes #6208

Merge branch '6208-log-zoneversion' into 'main'

See merge request isc-projects/bind9!12338

12 days agoFix the logged ZONEVERSION serial number 12338/head
Evan Hunt [Wed, 1 Jul 2026 20:01:42 +0000 (13:01 -0700)] 
Fix the logged ZONEVERSION serial number

The serial number in the ZONEVERSION log message was computed
incorrectly; this has been fixed.

12 days agofix: nil: host -a now uses TCP
Evan Hunt [Thu, 23 Jul 2026 05:58:24 +0000 (05:58 +0000)] 
fix: nil: host -a now uses TCP

`host -a` is documented as being equivalent to `host -v -t any`,
but previously it used UDP instead of TCP. This has been corrected.

Closes #2072

Merge branch '2072-host-a-tcp' into 'main'

See merge request isc-projects/bind9!12440

12 days agohost -a should use TCP 12440/head
Evan Hunt [Wed, 22 Jul 2026 21:43:07 +0000 (14:43 -0700)] 
host -a should use TCP

"host -a" is documented as being equivalent to "host -v -t any",
but it uses UDP while the other uses TCP. This has been corrected.

12 days agofix: nil: Don't use wildcard keys in update-policy in ddns-confgen
Evan Hunt [Thu, 23 Jul 2026 05:55:05 +0000 (05:55 +0000)] 
fix: nil: Don't use wildcard keys in update-policy in ddns-confgen

In `ddns-confgen`, if the requested key name is a wildcard, don't generate
an `update-policy` statement, since using a wildcard as an SSU identity
allows other keys that match the wildcard to update records.

Closes #6235

Merge branch '6235-wildcard-ddns-confgen' into 'main'

See merge request isc-projects/bind9!12439

12 days agoDon't use wildcard keys in update-policy in ddns-confgen 12439/head
Evan Hunt [Wed, 22 Jul 2026 21:35:19 +0000 (14:35 -0700)] 
Don't use wildcard keys in update-policy in ddns-confgen

In ddns-confgen, if the requested key name is a wildcard, don't generate
an update-policy statement, since using a wildcard as an SSU identity
allows other keys that match the wildcard to update records.

12 days agochg: ci: Revert "allow_failure: true" for the "cross-version-config-tests" job 12436/head
Michał Kępień [Wed, 22 Jul 2026 13:24:02 +0000 (15:24 +0200)] 
chg: ci: Revert "allow_failure: true" for the "cross-version-config-tests" job

With the `v9.21.24` release tag now merged back into `main`, revert the
`allow_failure: true` change introduced in !12264 as the
`cross-version-config-tests` job is no longer expected to fail.

Merge branch 'michal/revert-allow_failure-true-for-cross-version-config-tests' into 'main'

See merge request isc-projects/bind9!12435

12 days agoRevert "Add allow_failure to cross-version-config tests" 12435/head
Michał Kępień [Wed, 22 Jul 2026 13:09:14 +0000 (15:09 +0200)] 
Revert "Add allow_failure to cross-version-config tests"

This reverts commit d3345763cb2671713004e6e9434714bfe1112d4a.

12 days agoMerge tag 'v9.21.24'
Michał Kępień [Wed, 22 Jul 2026 12:23:39 +0000 (14:23 +0200)] 
Merge tag 'v9.21.24'

12 days agonew: dev: Add more unit tests for isc_time API
Martin Basti [Wed, 22 Jul 2026 11:27:28 +0000 (11:27 +0000)] 
new: dev: Add more unit tests for isc_time API

While working on internal 64-bit time for BIND 9, the unit test suite for isc_time API has been extended.

Backport the unit tests from 64-bit time branch to the main branch. This should make the unit tests for isc_time API (mostly) complete.

Related to #2959

Merge branch '2959-add-more-time.c-unit-tests' into 'main'

See merge request isc-projects/bind9!5760

12 days agoMake isc_time_nowplusinterval consistent with other functions 5760/head
Martin Basti [Thu, 9 Jul 2026 12:25:33 +0000 (14:25 +0200)] 
Make isc_time_nowplusinterval consistent with other functions

isc_time_nowplusinterval was using different code than the
rest of functions in the time.c. Replace custom overflow logic
with ckd_add macro.

12 days agoAdd more unit tests for isc_test API
Ondřej Surý [Wed, 26 Jan 2022 10:50:12 +0000 (11:50 +0100)] 
Add more unit tests for isc_test API

While working on internal 64-bit time for BIND 9, the unit test suite
for isc_time API has been extended.

Backport the unit tests from 64-bit time branch to the main branch.
This should make the unit tests for isc_time API (mostly) complete.

12 days agoAdd more validity checks to the isc_time API
Ondřej Surý [Wed, 26 Jan 2022 11:08:10 +0000 (12:08 +0100)] 
Add more validity checks to the isc_time API

This commits backport few things from the 64-bit time branch:

* Add ISC_VALID_TIME() and ISC_VALID_INTERVAL() macros that checks
  the valid range for nanoseconds

* Add more specific buffer sizes for formatting the dates and require
  the buffers passed to the formatting functions to be at least that
  big.

* When error happens when formatting the string, always return a valid
  buffer with formatted mock datetime string instead of garbage.
  Because the formatting functions doesn't return status, the caller
  could print garbage (unterminated string).

12 days agofix: usr: Treat an unusable NSEC3 chain as a verification failure
Evan Hunt [Wed, 22 Jul 2026 07:09:06 +0000 (07:09 +0000)] 
fix: usr: Treat an unusable NSEC3 chain as a verification failure

When transferring in a mirror zone, DNSSEC verification could incorrectly succeed when the zone had an invalid `NSEC3PARAM` record, leading to subsequent validation failures. This has been fixed.

Closes #6136

Merge branch '6136-zoneverify-nsec3param' into 'main'

See merge request isc-projects/bind9!12408

13 days agoTreat unusable NSEC3PARAM as a verification failure 12408/head
Evan Hunt [Wed, 15 Jul 2026 06:02:11 +0000 (23:02 -0700)] 
Treat unusable NSEC3PARAM as a verification failure

dns_zoneverify_dnssec() could previously return success if the
NSEC3PARAM record was unusable, but no other NSEC/NSEC3 chains were
available. This has been fixed.

Co-Authored-By: Mark Andrews <marka@isc.org>
13 days agoAllow null nameserver for jinja2 test-zone templates
Evan Hunt [Wed, 15 Jul 2026 22:03:50 +0000 (15:03 -0700)] 
Allow null nameserver for jinja2 test-zone templates

It is now possible to generate a zone file from a jinja2 template that
isn't written to a nameserver directory, but to "zones/" in the top
level of the system test directory, by specifying the server name
"NO_NS" instead of NS1, NS2, etc. This can be used for testing command
line tools such as dnssec-verify on generated zone files, without
starting an unnecessary name server.

13 days agofix: usr: dig +yaml producing invalid YAML when a lookup fails
Martin Basti [Tue, 21 Jul 2026 20:01:42 +0000 (20:01 +0000)] 
fix: usr: dig +yaml producing invalid YAML when a lookup fails

When "dig +yaml" was run and no server could be reached, dig printed its plain-text startup banner (the "; \<\<\>\> DiG ..." and ";; global options" lines) ahead of the machine-readable output, so the result was not valid YAML and could not be parsed. dig no longer emits that banner in YAML mode. As part of the same change, the banner is now built only after the whole command line has been read, so options given after the query name (such as +nocmd, +short and +yaml) are correctly reflected in it.

Closes #1230

Merge branch '1230-dig-fix-error-comments' into 'main'

See merge request isc-projects/bind9!12416

13 days agoTest that +short does not leak the ";; " comments 12416/head
Martin Basti [Tue, 21 Jul 2026 13:49:00 +0000 (13:49 +0000)] 
Test that +short does not leak the ";; " comments

Plain +short already turns lookup->comments off, so the regression it
guards against only surfaces with "+short +comments", where +comments
re-enables the comment toggle while short form is still in effect.  The
existing silent-then-servfail scenario is reused because its retry path
reliably prints a "Got SERVFAIL reply from ..." comment; the +comments
case (without +short) is asserted first so the absence check is
meaningful.

Assisted-by: Claude:claude-opus-4-8
13 days agoDon't emit comments when +short form is enabled
Mark Andrews [Tue, 21 Jul 2026 07:22:00 +0000 (17:22 +1000)] 
Don't emit comments when +short form is enabled

13 days agoDon't print dig's startup banner with +nocmd when the lookup fails
Martin Basti [Wed, 15 Jul 2026 17:15:25 +0000 (19:15 +0200)] 
Don't print dig's startup banner with +nocmd when the lookup fails

This only affects the failure path.  On a successful lookup dig
reprints the banner and re-evaluates the final options as it does so,
so a late +nocmd is honored; but the "no servers could be reached"
error path prints the pre-built banner verbatim, without that
re-check, and that banner had been built too early to be correct.

printgreeting() was called the moment the first query name was seen,
so options appearing later on the command line (e.g. +[no]cmd, +short,
+yaml) were not yet in effect and the banner captured stale state.
That is why a failing "dig . soa @host +yaml" emitted the ";"-prefixed
banner ahead of the error, and why "+nocmd" placed after the query
name was ignored.

Assisted-by: Claude:claude-opus-4-8
13 days agoSuppress the dig startup banner in +yaml error output
Martin Basti [Wed, 15 Jul 2026 16:58:39 +0000 (18:58 +0200)] 
Suppress the dig startup banner in +yaml error output

The two "no servers could be reached" error paths printed the
lookup's startup banner (";"-prefixed "<<>> DiG ..." lines) ahead of
the "- type: DIG_ERROR" block.  Those lines are not valid YAML, so
with +yaml the whole output failed to parse whenever every server was
unreachable.  Guard the banner with the existing yaml flag, matching
how the successful path in printmessage() already gates it.

Assisted-by: Claude:claude-opus-4-8
13 days agofix: dev: QUIC crypto fixes
Arаm Sаrgsyаn [Tue, 21 Jul 2026 13:40:54 +0000 (13:40 +0000)] 
fix: dev: QUIC crypto fixes

The isc_crypto_aead_open() and isc_crypto_aead_seal() functions
in ossl3.c didn't check if 'additional_data' exists before using
it. The checks were in place in the ossl1_1.c implementation. Use
the same conditions in the ossl3.c implementation too.

Additionally, the ciphertext length passed to the EVP_DecryptUpdate()
function included the tag length too which caused errors when decrypting.
Use the 'len' variable instead which doesn't include the tag length.

Merge branch 'aram/quic-crypto-fixes' into 'main'

See merge request isc-projects/bind9!12413

13 days agoFix isc_crypto_aead_open() for OpenSSL 1.1.x 12413/head
Aram Sargsyan [Wed, 15 Jul 2026 13:19:17 +0000 (13:19 +0000)] 
Fix isc_crypto_aead_open() for OpenSSL 1.1.x

The ciphertext length passed to the EVP_DecryptUpdate() function
included the tag length too. Use the 'len' variable instead which
doesn't include the tag length.

13 days agoCheck AEAD additional data existence before use
Aram Sargsyan [Wed, 15 Jul 2026 13:14:42 +0000 (13:14 +0000)] 
Check AEAD additional data existence before use

The isc_crypto_aead_open() and isc_crypto_aead_seal() functions
in ossl3.c didn't check if 'additional_data' exists before using
it. The checks were in place in the ossl1_1.c implementation. Use
the same conditions in the ossl3.c implementation too.

13 days agofix: test: Mark the qpdb unit test as flaky
Nicki Křížek [Tue, 21 Jul 2026 08:11:28 +0000 (10:11 +0200)] 
fix: test: Mark the qpdb unit test as flaky

Closes #6267

Merge branch '6267-mark-qpdb-unit-test-flaky' into 'main'

See merge request isc-projects/bind9!12427

2 weeks agoMark the qpdb unit test as flaky 12427/head
Nicki Křížek [Mon, 20 Jul 2026 12:55:11 +0000 (12:55 +0000)] 
Mark the qpdb unit test as flaky

The qpdb unit test intermittently aborts on the
`isc_mem_inuse(mctx) >= hiwater` assertion in the overmempurge tests
(#6267) and is not reliably reproducible. Extend the flaky-test retry
mechanism from tests/isc to tests/dns so CI re-runs qpdb before
declaring the job failed.

Assisted-by: Claude:claude-fable-5
2 weeks agonew: usr: Disclose active Negative Trust Anchors with Extended DNS Error 33
Ondřej Surý [Mon, 20 Jul 2026 10:50:09 +0000 (12:50 +0200)] 
new: usr: Disclose active Negative Trust Anchors with Extended DNS Error 33

A Negative Trust Anchor (RFC 7646) turns off DNSSEC validation for a domain,
so a name that would normally fail validation resolves instead. named now
marks such answers with Extended DNS Error code 33, "Negative Trust Anchor",
so operators can see at a glance when a response came back only because
an NTA was in effect.

Closes #6268

Merge branch '6268-implement-nta-ede' into 'main'

See merge request isc-projects/bind9!12424

2 weeks agoTest Negative Trust Anchor disclosure via Extended DNS Error 33
Ondřej Surý [Mon, 20 Jul 2026 08:46:09 +0000 (10:46 +0200)] 
Test Negative Trust Anchor disclosure via Extended DNS Error 33

Extend the EDE unit test to cover the newly registered code 33 and to
verify it does not collide with lower codes in the used-code bitmap.

Add a resolver system test: a name whose validation is suppressed by a
Negative Trust Anchor is answered with EDE 33 present, while the same
name without an NTA still fails validation and carries no such error.

Assisted-by: Claude:claude-opus-4-8
2 weeks agoDisclose Negative Trust Anchors with Extended DNS Error 33
Ondřej Surý [Mon, 20 Jul 2026 08:45:50 +0000 (10:45 +0200)] 
Disclose Negative Trust Anchors with Extended DNS Error 33

A Negative Trust Anchor (RFC 7646) makes a validating resolver treat an
otherwise-secure name as insecure, but there was no in-band way for a
client to tell that an answer which should have failed DNSSEC validation
was returned because an NTA was in place.

Register Extended DNS Error INFO-CODE 33, "Negative Trust Anchor"
(draft-farrokhi-dnsop-ede-nta), and attach it to a response whenever a
covering NTA suppresses validation for the queried name.

2 weeks agofix: usr: Resolver could return expired records instead of a negative answer
Ondřej Surý [Mon, 20 Jul 2026 06:30:06 +0000 (08:30 +0200)] 
fix: usr: Resolver could return expired records instead of a negative answer

When an unvalidated negative answer (such as one obtained for
a query with the "checking disabled" flag set) arrived for
a name that had DNSSEC-validated records in the cache, those
records blocked the negative answer from being cached even
after they had passed their TTL, and the expired records could
be returned to the client instead. Validated records that have
expired no longer prevent negative answers from being cached.

Merge branch '5877-skip-inactive-headers' into 'main'

See merge request isc-projects/bind9!12423

2 weeks agoTest that an expired RRset does not block negative caching
Ondřej Surý [Mon, 20 Jul 2026 05:52:03 +0000 (07:52 +0200)] 
Test that an expired RRset does not block negative caching

Cover the inverse of the CD=1 NXDOMAIN guard: a validated RRset that
has passed its TTL, but has not yet been cleaned from the cache, must
not block the unvalidated negative entry. Before the fix the CD=1
query failed with SERVFAIL until the expired header was reaped.

Assisted-by: Claude:claude-fable-5
2 weeks agoOnly active secure data should block negative cache entries
Ondřej Surý [Mon, 20 Jul 2026 04:53:36 +0000 (06:53 +0200)] 
Only active secure data should block negative cache entries

Expired secure headers linger in the node's header list until they
are reaped, so the secure-data check could match a header already
past its TTL, reject the new negative entry, and hand the expired
data back to the caller. Require the matching header to be active.

2 weeks agochg: dev: Do not attach authdb
Alessio Podda [Fri, 17 Jul 2026 13:07:57 +0000 (13:07 +0000)] 
chg: dev: Do not attach authdb

The authdb variable is used either to check that, on restarts, we
do not cross to a different zone unless recursion is enabled, and to
lookup the zone version when filling the additional section.

Neither use requires the pointer to be attached, and attaching the
pointer causes scalability issues. This commit solves the problem by
turning the pointer into an integer id.

Merge branch 'alessio/authdb-version-lookup' into 'main'

See merge request isc-projects/bind9!12375

2 weeks agoFix mirror zone auth issues
Alessio Podda [Mon, 13 Jul 2026 15:32:28 +0000 (17:32 +0200)] 
Fix mirror zone auth issues

Previously query_validatezonedb would not save the current version of
mirror zones, which would cause the mirror zone not to be found when
non-glue additional data.

We fix this by storing the mirror zone version in the client, and
deferring the acl check in query_validatezonedb.

2 weeks agoAdd test for mirror zone additional data
Alessio Podda [Thu, 9 Jul 2026 12:26:46 +0000 (14:26 +0200)] 
Add test for mirror zone additional data

Existing mirror-zone system tests only covered referral glue.
With this commit, we add a test that also checks for non-glue
additional data.

2 weeks agoMake authdb version lookup return isc_result_t
Alessio Podda [Thu, 9 Jul 2026 11:58:10 +0000 (13:58 +0200)] 
Make authdb version lookup return isc_result_t

Returning isc_result_t is more idiomatic. Also, there was some shared
code between ns_client_findversionid and ns_client_findversion that
has now been extracted into an helper function.

2 weeks agoTurn authdb into a enum
Alessio Podda [Mon, 6 Jul 2026 08:26:31 +0000 (10:26 +0200)] 
Turn authdb into a enum

Given that now authdb is now an integer id, we can fold the authdb
variable into it by turning it into a sentinel value.

2 weeks agoDo not attach authdb
Alessio Podda [Mon, 6 Jul 2026 08:15:13 +0000 (10:15 +0200)] 
Do not attach authdb

The authdb variable is used either to check that, on restarts, we
do not cross to a different zone unless recursion is enabled, and to
lookup the zone version when filling the additional section.

Neither use requires the pointer to be attached, and attaching the
pointer causes scalability issues. This commit solves the problem by
turning the pointer into an integer id.

2 weeks agofix: usr: Unterminated OpenSSL private-key `Label:` field can be read past its parser...
Mark Andrews [Thu, 16 Jul 2026 20:07:48 +0000 (06:07 +1000)] 
fix: usr: Unterminated OpenSSL private-key `Label:` field can be read past its parser buffer

Check that the string encoded in the Label: field of the .private
file of a key pair is NUL terminated and the correct length.  Reject
the .private file if it is not.

Closes #6193

Merge branch '6193-check-that-label-is-nul-terminated' into 'main'

See merge request isc-projects/bind9!12364

2 weeks agoMalformed Label: data in .private files was not detected
Mark Andrews [Wed, 8 Jul 2026 01:18:44 +0000 (11:18 +1000)] 
Malformed Label: data in .private files was not detected

Check that the string encoded in the Label: field of the .private
file of a key pair is NUL terminated and the correct length.  Reject
the .private file if it is not.

2 weeks agofix: nil: Extend meson.build to support python 3.13 and 3.14
Mark Andrews [Wed, 15 Jul 2026 23:36:30 +0000 (09:36 +1000)] 
fix: nil: Extend meson.build to support python 3.13 and 3.14

The later releases of python are not supported by meson.build
requiring the built environment to maintain / install older
versions of python to be able build and test.

Merge branch 'marka-support-python-3.14' into 'main'

See merge request isc-projects/bind9!12389

2 weeks agoExtend meson.build to know about python 3.13 and 3.14
Mark Andrews [Mon, 13 Jul 2026 07:00:40 +0000 (17:00 +1000)] 
Extend meson.build to know about python 3.13 and 3.14

2 weeks agofix: dev: Fix TSIG keys creation/eviction ordering issue
Arаm Sаrgsyаn [Wed, 15 Jul 2026 15:02:23 +0000 (15:02 +0000)] 
fix: dev: Fix TSIG keys creation/eviction ordering issue

When adding a new key into a full list, the newly inserted key
could be evicted just after the insertion if all the existing
keys were marked as visited. This has been fixed.

Closes #6263

Merge branch '6263-tkey-quota-bug-fix' into 'main'

See merge request isc-projects/bind9!12400

2 weeks agoFix TSIG keys creation/eviction bug
Aram Sargsyan [Tue, 14 Jul 2026 11:26:50 +0000 (11:26 +0000)] 
Fix TSIG keys creation/eviction bug

When adding a new key to the SIEVE list, make the eviction decision
first, and then add the new key, so that it doesn't get evicted
immediately after insertion.

2 weeks agoAdd a new check in the tsig unit test
Aram Sargsyan [Tue, 14 Jul 2026 11:25:09 +0000 (11:25 +0000)] 
Add a new check in the tsig unit test

The new check creates more TSIG keys than the maximum allowed number,
and expectes that all the newly created keys are findable just after
they were created. I.e., when full, the newly created key should not
evicted.

2 weeks agofix: test: Increase timeout for zone update in multisigner test
Nicki Křížek [Wed, 15 Jul 2026 14:43:27 +0000 (16:43 +0200)] 
fix: test: Increase timeout for zone update in multisigner test

In slower platforms in CI (e.g. freebsd14), the 10s timeout could be too
short causing the test to fail. Increase it to make the test stable even
during heavy CI load.

---

failing job example: https://gitlab.isc.org/isc-private/bind9/-/jobs/7762354

Merge branch 'nicki/pytest-multisigner-increase-timeout' into 'main'

See merge request isc-projects/bind9!12373

2 weeks agoIncrease timeout for zone update in multisigner test
Nicki Křížek [Thu, 9 Jul 2026 08:16:40 +0000 (10:16 +0200)] 
Increase timeout for zone update in multisigner test

In slower platforms in CI (e.g. freebsd14), the 10s timeout could be too
short causing the test to fail. Increase it to make the test stable even
during heavy CI load.

2 weeks agofix: test: Extend the check_dnssec_verify retry window to 60 seconds
Nicki Křížek [Wed, 15 Jul 2026 10:48:18 +0000 (12:48 +0200)] 
fix: test: Extend the check_dnssec_verify retry window to 60 seconds

A fixed ten-iteration poll could be too short for a freshly signed
zone to become fully valid on a heavily loaded host, occasionally
yielding a spurious "zone not verified".

Bump the budget to a 60-second window and, in the process, replace the
hand-rolled retry loop with the standard isctest.run.retry_with_timeout
helper already used by check_next_key_event.

---

Example of the failure: https://gitlab.isc.org/isc-private/bind9/-/jobs/7773885

Merge branch 'nicki/widen-dnssec-verify-timeout' into 'main'

See merge request isc-projects/bind9!12403

2 weeks agoExtend the check_dnssec_verify retry window to 60 seconds
Nicki Křížek [Tue, 14 Jul 2026 12:18:40 +0000 (12:18 +0000)] 
Extend the check_dnssec_verify retry window to 60 seconds

A fixed ten-iteration poll could be too short for a freshly signed
zone to become fully valid on a heavily loaded host, occasionally
yielding a spurious "zone not verified".

Bump the budget to a 60-second window and, in the process, replace the
hand-rolled retry loop with the standard isctest.run.retry_with_timeout
helper already used by check_next_key_event.

Assisted-by: Claude:claude-opus-4-8
2 weeks agofix: dev: Change catz coo locking
Alessio Podda [Wed, 15 Jul 2026 09:47:57 +0000 (09:47 +0000)] 
fix: dev: Change catz coo locking

Catalog zones might need to inspect the change-of-ownership records
of other catalog zones, which required to release the lock in the
middle of certain operations, leading to possible race conditions.

Since the operations on change-of-ownership records are limited, we
can instead use a design with a second lock protecting the
change-of-ownership records on read. We structure the API so that
holding two change-of-ownership locks at the same time is impossible.

Closes #6131

Merge branch '6131-catz-dns__catz_zones_merge-uaf-fix-v2' into 'main'

See merge request isc-projects/bind9!12277

2 weeks agoSplit lock coos check design
Alessio Podda [Wed, 10 Jun 2026 13:24:06 +0000 (15:24 +0200)] 
Split lock coos check design

Catalog zones might need to inspect the change-of-ownership records
of other catalog zones, which required to release the lock in the
middle of certain operations, leading to possible race conditions.

Since the operations on change-of-ownership records are limited, we
can instead use a design with a second lock protecting the
change-of-ownership records on read. We structure the API so that
holding two change-of-ownership locks at the same time is impossible.

2 weeks agofix: dev: Use correct port and target for NOTIFY(CDS)
Matthijs Mekking [Wed, 15 Jul 2026 08:54:44 +0000 (08:54 +0000)] 
fix: dev: Use correct port and target for NOTIFY(CDS)

If there is a DSYNC RRset with multiple records, and unsupported scheme/type records follow supported ones, the port and target of the last record were being used to queue the notify. This does not necessarily match the port and target of the supported record. This has been fixed.

Closes #6080

Merge branch '6080-dsync-mismatch-queue' into 'main'

See merge request isc-projects/bind9!12376

2 weeks agoSave first matched DSYNC record
Matthijs Mekking [Thu, 9 Jul 2026 12:13:29 +0000 (14:13 +0200)] 
Save first matched DSYNC record

Only save the DSYNC target and port when a record matches CDS NOTIFY,
then after scanning the complete RRset require count == 1 before using
the stored values.

2 weeks agoAdjust NOTIFY(CDS) system test
Matthijs Mekking [Thu, 9 Jul 2026 11:57:00 +0000 (13:57 +0200)] 
Adjust NOTIFY(CDS) system test

Current system tests cover a mixed RRset in but the unsupported and
supported records use the same target and port, so the test does not
catch that the wrong port and target are being used for the supported
type.

Change the test such that the supported DSYNC record is followed
by the unsupported ones, and use different port and target for
supported and unsupported DSYNC records.

2 weeks agofix: test: test-syncplugin treats firstlbl as a prefix, not an exact label
Mark Andrews [Tue, 14 Jul 2026 23:08:44 +0000 (09:08 +1000)] 
fix: test: test-syncplugin treats firstlbl as a prefix, not an exact label

The label length and the string length where not being checked so
a label that started with a string that matched the skip label would
incorrectly match.

Closes #6212

Merge branch '6212-fix-syncplugin-test-driver' into 'main'

See merge request isc-projects/bind9!12365

2 weeks agoExtend test_hooks_zonetemplate2 test
Mark Andrews [Wed, 8 Jul 2026 02:19:28 +0000 (12:19 +1000)] 
Extend test_hooks_zonetemplate2 test

The test_hooks_zonetemplate2 test failed to properly check
first label matches.

2 weeks agoProperly check test-syncplugin skip label for equality
Mark Andrews [Wed, 8 Jul 2026 02:08:38 +0000 (12:08 +1000)] 
Properly check test-syncplugin skip label for equality

The label length and the string length where not being checked so
a label that started with a string that matched the skip label would
incorrectly match.

2 weeks agofix: dev: MacOS byte swapping macros already defined
Mark Andrews [Tue, 14 Jul 2026 22:00:15 +0000 (08:00 +1000)] 
fix: dev: MacOS byte swapping macros already defined

Don't redefine them if the development environment already
defines them.

Closes #6250

Merge branch '6250-macos-byte-swapping-macros-already-defined' into 'main'

See merge request isc-projects/bind9!12388

2 weeks agoDon't redefine the byte swap macros if already defined
Mark Andrews [Sun, 12 Jul 2026 23:36:38 +0000 (09:36 +1000)] 
Don't redefine the byte swap macros if already defined

2 weeks agofix: test: cdnxdomain test is failing
Mark Andrews [Tue, 14 Jul 2026 16:39:40 +0000 (02:39 +1000)] 
fix: test: cdnxdomain test is failing

Add a one second sleep so that the file system time stamp changes.

Closes #6243

Merge branch '6243-cdnxdomain-test-is-failing' into 'main'

See merge request isc-projects/bind9!12372

2 weeks agocdnxdomain test is failing on some platforms
Mark Andrews [Thu, 9 Jul 2026 04:47:28 +0000 (14:47 +1000)] 
cdnxdomain test is failing on some platforms

Ensure the modification time is newer (second granuality) when the
zone file is rewritten as named uses the file modification time to
determine if it needs to reload a file.

2 weeks agonew: dev: add crypto required for quic support
Aydın Mercan [Tue, 14 Jul 2026 14:12:19 +0000 (17:12 +0300)] 
new: dev: add crypto required for quic support

This MR adds the necessary cryptographic parts for QUIC support.
These parts are:

AEAD (AES-GCM and ChaCha20-Poly1305)

HKDF (Both the original algorithm and TLS 1.3's HKDF-Expand-Label)

QUIC header protection mask generation

Merge branch 'aydin/quic-crypto' into 'main'

See merge request isc-projects/bind9!11549

2 weeks agoput doxygen file marker in isc/crypto.h
Aydın Mercan [Wed, 18 Feb 2026 08:49:29 +0000 (11:49 +0300)] 
put doxygen file marker in isc/crypto.h

While Doxygen isn't necessarily used, developers might still opt to
use it's syntax comments on LSPs and other toolchains.

2 weeks agoclear the error stack at the end of fetching
Aydın Mercan [Thu, 12 Feb 2026 07:07:57 +0000 (10:07 +0300)] 
clear the error stack at the end of fetching

Clearning the error stack at the very end will get rid of any other
optional fetch failures since fetch failures are treated as-if they are
unsupported by the provider.

2 weeks agoadd quic header protection to isc_crypto
Aydın Mercan [Thu, 12 Feb 2026 06:08:56 +0000 (09:08 +0300)] 
add quic header protection to isc_crypto

QUIC uses a custom PRF construction to protect parts of the packet
header. This PRF is derived from the negotiated AEAD key and uses
unauthenticated encryption internally.

We do not expose the primitives underneath (AES-ECB and ChaCha20) as
they shouldn't be within the reach of contributors for their own safety.
Allowing such functionality to be used easily can only result it
problems not to dissimilar to leaving a baby with open bottles of
cleaning supplies.

2 weeks agoadd aead api to isc_crypto
Aydın Mercan [Mon, 9 Feb 2026 05:03:02 +0000 (08:03 +0300)] 
add aead api to isc_crypto

The new AEAD API exists to cather to the needs for QUIC but is still
usable in other future contexts. Only AES-128-GCM, AES-256-GCM and
ChaCha20-Poly1305 are supported.

AES-128-CCM is intentionally skipped as the algorithm is neither
encountered in the wild nor has any useful advantages comapred to the
more popular AES-128-GCM mode.

2 weeks agoadd types compatible builtin
Aydın Mercan [Tue, 3 Feb 2026 07:56:00 +0000 (10:56 +0300)] 
add types compatible builtin

This builtin function makes macros gain type safety and also the ability
to statically assert the correctness of typedefs that target external
libraries.

2 weeks agoadd hkdf to isc_crypto
Aydın Mercan [Mon, 2 Feb 2026 17:17:11 +0000 (20:17 +0300)] 
add hkdf to isc_crypto

The HKDF API exposes the extract, expand and extract-expand operations
separately to support the use-case of QUIC per RFC 9001 Section 5.2. [1]

[1]: https://www.rfc-editor.org/rfc/rfc9001.html#initial-secrets

2 weeks agofix: test: Replace python deprecated datetime utc functions
Martin Basti [Tue, 14 Jul 2026 13:08:01 +0000 (13:08 +0000)] 
fix: test: Replace python deprecated datetime utc functions

Functions `utcnow` and `utcfromtimestamp` are deprecated in python and
print warnings into tests logs about it.

Use the python prefered way by defining `timezone.utc` in `now` and
`fromtimestamp` functions. Which are equivalent but safer than naive
objects without timezone.

To ensure comptibility `%z` was added to format string to properly
process `Z` as UTC timezone.

Assisted-by: Claude Code:claude-opus-4-8[1m]
Merge branch 'mbasti/python-fix-deprecated-utcfromtimestamp' into 'main'

See merge request isc-projects/bind9!12399

2 weeks agoReplace python deprecated datetime utc functions
Martin Basti [Tue, 14 Jul 2026 09:09:10 +0000 (11:09 +0200)] 
Replace python deprecated datetime utc functions

Functions `utcnow` and `utcfromtimestamp` are deprecated in python and
print warnings into tests logs about it.

Use the python prefered way by defining `timezone.utc` in `now` and
`fromtimestamp` functions. Which are equivalent but safer than naive
objects without timezone.

To ensure comptibility `%z` was added to format string to properly
process `Z` as UTC timezone.

Assisted-by: Claude:claude-opus-4-8
2 weeks agonew: usr: Built-in hints can be printed with named -H command
Martin Basti [Tue, 14 Jul 2026 12:24:27 +0000 (12:24 +0000)] 
new: usr: Built-in hints can be printed with named -H command

Additionally root hints were updated to precisely match authoritative source including comments. This is a cosmetic change IP addresses haven't been changed.

Merge branch 'main-printhints' into 'main'

See merge request isc-projects/bind9!11114

2 weeks agoTest named -H option
Martin Basti [Thu, 2 Jul 2026 14:08:26 +0000 (16:08 +0200)] 
Test named -H option

Test if built-in root hints match authoritative source.
It also works as early detection if built-in hints divert.

2 weeks agoSync root hints with primary source
Martin Basti [Thu, 2 Jul 2026 14:37:06 +0000 (16:37 +0200)] 
Sync root hints with primary source

Should match https://www.internic.net/zones/named.root

2 weeks agoPrint built-in hints via named -H
Petr Menšík [Thu, 16 Oct 2025 19:42:28 +0000 (21:42 +0200)] 
Print built-in hints via named -H

Built-ins from libdns were not easily accessible from command line.

2 weeks agonew: dev: Add development guidance for AI coding agents under .agents/skills/
Ondřej Surý [Tue, 14 Jul 2026 11:42:07 +0000 (13:42 +0200)] 
new: dev: Add development guidance for AI coding agents under .agents/skills/

This adds a set of skill documents that give AI coding agents the
project's established practices up front instead of having them
rediscovered (or gotten wrong) in every session: the canonical build
and test invocations, the memory-allocator contract, the disciplines
for RCU mutation, per-loop sharded structures, struct-layout work, and
flight-recorder debugging of concurrency bugs, plus the commit and
merge-request conventions.

Merge branch 'ondrej/add-agents-skills' into 'main'

See merge request isc-projects/bind9!12363

2 weeks agoAdd Claude Code skills symlink
Ondřej Surý [Thu, 9 Jul 2026 07:34:18 +0000 (09:34 +0200)] 
Add Claude Code skills symlink

2 weeks agoLicense the .agents/ contents under MPL-2.0
Ondřej Surý [Tue, 7 Jul 2026 15:14:05 +0000 (17:14 +0200)] 
License the .agents/ contents under MPL-2.0

2 weeks agoAdd the bind-mr-description agent skill
Ondřej Surý [Tue, 7 Jul 2026 15:09:54 +0000 (17:09 +0200)] 
Add the bind-mr-description agent skill

Explain that MR titles and descriptions feed the generated release
notes, so agents must write them for system administrators: one short
paragraph in operational terms, no internal names or jargon, no
hand-written doc/notes/ entries, and bug framing rather than security
framing for local-filesystem misbehavior.

2 weeks agoAdd the bind-commit agent skill
Ondřej Surý [Tue, 7 Jul 2026 15:09:46 +0000 (17:09 +0200)] 
Add the bind-commit agent skill

Walk agents through the full commit workflow: the git-clang-format
staging sequence, reason-focused messages hard-wrapped at 72 columns
with no type prefixes, the Assisted-by trailer and the forbidden ones,
amend and fixup discipline for HEAD and non-HEAD commits, and the rule
that agents commit locally and leave publishing to the user.