]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
5 months agofix: doc: correct a double negative in the padding doc
Evan Hunt [Fri, 5 Dec 2025 22:31:43 +0000 (22:31 +0000)] 
fix: doc: correct a double negative in the padding doc

`padding` is incompatible with TSIG and SIG(0), not with "no" TSIG
and SIG(0).

Merge branch 'each-fix-padding-doc' into 'main'

See merge request isc-projects/bind9!11333

5 months agocorrect a double negative in the padding doc
Evan Hunt [Fri, 5 Dec 2025 18:46:15 +0000 (10:46 -0800)] 
correct a double negative in the padding doc

`padding` is incompatible with TSIG and SIG(0), not with "no" TSIG
and SIG(0).

5 months agochg: usr: Add Extended DNS Error 13 (Cached Error) support
Colin Vidal [Fri, 5 Dec 2025 22:28:36 +0000 (23:28 +0100)] 
chg: usr: Add Extended DNS Error 13 (Cached Error) support

Extended DNS Error 13 (Cached Error) is now returned when the server
answers a message from a cached SERVFAIL.

See RFC 8914 section 4.14.

See #1836

Merge branch '1836-sfcache-ede' into 'main'

See merge request isc-projects/bind9!11322

5 months agoadd tests for EDE 13 support
Colin Vidal [Thu, 4 Dec 2025 15:44:42 +0000 (16:44 +0100)] 
add tests for EDE 13 support

Add system test covering EDE 13 being added in the response in case of
SERVFAIL cache hits.

5 months agosupport EDE 13 (Cached Error)
Colin Vidal [Thu, 4 Dec 2025 15:42:11 +0000 (16:42 +0100)] 
support EDE 13 (Cached Error)

Extended DNS Error 13 (Cached Error) is now returned when the server
answers a message from a cached SERVFAIL.

See RFC 8914 section 4.14.

5 months agofix: usr: Make key rollovers more robust
Matthijs Mekking [Fri, 5 Dec 2025 12:07:39 +0000 (12:07 +0000)] 
fix: usr: Make key rollovers more robust

A manual rollover when the zone is in an invalid DNSSEC state causes predecessor keys to be removed too quickly. Additional safeguards to prevent this have been added. DNSSEC records will not be removed from the zone until the underlying state machine has moved back into a valid DNSSEC state.

Closes #5458

Merge branch '5458-safeguard-against-key-rollovers-when-in-invalid-state' into 'main'

See merge request isc-projects/bind9!10813

5 months agoFix statschannel system test
Matthijs Mekking [Mon, 4 Aug 2025 12:34:07 +0000 (14:34 +0200)] 
Fix statschannel system test

The manykeys test case relies on keys being removed. Make sure the
zone is fully signed with the keys that will stay, so the other keys
may be removed safely.

This means the expected number of signatures generated and refreshed
will change. The CDS and CDNSKEY RRset also need to be signed now.

Configure the test case with sig-signing-signatures 100, large enough
that the entire zone is processed in a single step.

5 months agoFix nsec3 system test
Matthijs Mekking [Mon, 4 Aug 2025 11:09:12 +0000 (13:09 +0200)] 
Fix nsec3 system test

The nsec3 system test has a couple of cases where the configured policy
changes the algorithm, effectively triggering an algorithm rollover. Fix
those cases to start in a valid DNSSEC state. Then fix the expected key
states, no longer should the old algorithm be removed immediately.

5 months agoFix autosign system test
Matthijs Mekking [Thu, 31 Jul 2025 15:41:11 +0000 (17:41 +0200)] 
Fix autosign system test

When creating keys, set Publish and Activate times so that keys will
be initialized as omnipresent. This way we start with a safe DNSSEC
state. In most cases at least, because some tests depend on special
key timings.

The ttl[1-4].example cases have become incorrect. With dnssec-policy
we require the TTL to match the dnskey-ttl from the policy.

The delzsk.example will have a ZSK removed from the zone. It also
requires that the DNSKEY RRset is already published. This means
that for the existing keys the, no longer "is now published"
messages will be logged.

The nsec-only.example and reconf.example zones are fixed to have a
correct matching policy.

This all means the expected count of log messages changes slightly.

5 months agoFix views system test
Matthijs Mekking [Thu, 31 Jul 2025 14:51:37 +0000 (16:51 +0200)] 
Fix views system test

This test case enables DNSSEC and has a mismatch in policy. Fix the
policy so that it matches the existing key set, and adjust the
expected answer count because no longer a new key is generated.

5 months agoMake keymgr state machine more robust
Matthijs Mekking [Thu, 31 Jul 2025 12:30:20 +0000 (14:30 +0200)] 
Make keymgr state machine more robust

If the keymgr state machine is in an invalid state, it tries to move
it self to a valid state. But when you do key rollovers during an
invalid state, and the next state is also an invalid state, the keymgr
will happily do the transition.

It would be good to not do key rollovers if there is not a KSK and ZSK
fully omnipresent. But also it would be good to safeguard against
unexpected transitions.

This commit does that by not moving things to unretentive (which is
the state where we would remove the corresponding record from the zone)
if the state machine is currently in an invalid state.

5 months agoRollover test case for rumoured zone signatures
Matthijs Mekking [Thu, 31 Jul 2025 12:25:22 +0000 (14:25 +0200)] 
Rollover test case for rumoured zone signatures

Test a manual rollover when zone signatures have not become omnipresent
yet. This should not immediately remove the predecessor key.

5 months agofix: doc: Fix sig-signing-* duplicate documentation
Matthijs Mekking [Fri, 5 Dec 2025 10:52:37 +0000 (10:52 +0000)] 
fix: doc: Fix sig-signing-* duplicate documentation

Merge branch 'matthijs-doc-sig-signing-options' into 'main'

See merge request isc-projects/bind9!11324

5 months agoFix sig-signing-* duplicate documentation
Matthijs Mekking [Fri, 5 Dec 2025 10:17:06 +0000 (11:17 +0100)] 
Fix sig-signing-* duplicate documentation

5 months agochg: dev: Shrunk cfgobj down from 72 bytes to 48 bytes
Colin Vidal [Fri, 5 Dec 2025 08:35:58 +0000 (09:35 +0100)] 
chg: dev: Shrunk cfgobj down from 72 bytes to 48 bytes

Make all non-scalar properties of `cfg_obj_t` allocated values, which
ensures the union size is the width of one pointer. Also reorder the
fields inside `cfg_obj_t` to avoid alignment padding that would increase
the size. As a result, a `cfg_obj_t` instance is now 48 bytes on a
64-bit platform.

Add a static assertion to avoid increasing the size of the struct by
mistake.

The function `parse_sockaddrsub` was taking advantage of the fact that
both sockaddr and sockaddrtls were in the same position, and used to
initialize the sockaddr field independently if this was a -tls one or
not. This doesn't work anymore now that all fields are allocated,
so it has been slightly rewritten to take both cases into account
separately.

Merge branch 'colin/cfgobj-48bytes' into 'main'

See merge request isc-projects/bind9!11239

5 months agoshrunk cfgobj down to 48bytes
Colin Vidal [Fri, 7 Nov 2025 13:58:36 +0000 (14:58 +0100)] 
shrunk cfgobj down to 48bytes

Make all non-scalar properties of `cfg_obj_t` allocated values, which
ensures the union size is the width of one pointer. Also reorder the
fields inside `cfg_obj_t` to avoid alignment padding that would increase
the size. As a result, a `cfg_obj_t` instance is now 48 bytes on a
64-bit platform.

Add a static assertion to avoid increasing the size of the struct by
mistake.

The function `parse_sockaddrsub` was taking advantage of the fact that
both sockaddr and sockaddrtls were in the same position, and used to
initialize the sockaddr field independently if this was a -tls one or
not. This doesn't work anymore now that all fields are allocated,
so it has been slightly rewritten to take both cases into account
separately.

5 months agochg: dev: Remove memory context form `cfg_obj_t`
Colin Vidal [Thu, 4 Dec 2025 15:42:42 +0000 (16:42 +0100)] 
chg: dev: Remove memory context form `cfg_obj_t`

Removes the `cfg_obj_t` memory context pointer, as the parser always uses `isc_g_mctx`. This simplifies the parser API/configuration tree API (no need to pass the memory context); and the `cfg_obj_t` size goes down from 80 bytes to 72 bytes.

While not directly related to the changes, also remove the `cfg_parser_t` `references` field as it is not used anymore (since the `cfg_obj_t` types doesn't reference it anymore).

Merge branch 'colin/remove-memctx-cfgobj' into 'main'

See merge request isc-projects/bind9!11199

5 months agodocument usage of BIND9 constructors/destructors
Colin Vidal [Thu, 4 Dec 2025 13:02:01 +0000 (14:02 +0100)] 
document usage of BIND9 constructors/destructors

Document the way `__attribute__((__constructor__))` and
`__attribute__((__destructor__))` must be used in BIND9 libraries in
order to avoid unexpected behaviors with other third-party libraries.

5 months agoremove --memstats from cfg_test
Colin Vidal [Fri, 7 Nov 2025 17:56:39 +0000 (18:56 +0100)] 
remove --memstats from cfg_test

The `--memstats` option from cfg_test is unused, and even if used, does
nothing because `--memstats` relies on `isc_mem_stats` which dump memory
pools statistics, which are not used at all for configuration.

Also, dropping the option avoid to add a parser API to get the memory
stats (as the parser now uses the global memory context).

5 months agoremove memory context from parser context
Colin Vidal [Tue, 4 Nov 2025 09:49:40 +0000 (10:49 +0100)] 
remove memory context from parser context

As the isccfg library now uses the global memory context, it is now
used directly instead of passing the parser context around to grab its
memory context.

Also remove the memory context from the parser, as well as from
`cfg_obj_t`, as it's now useless.

5 months agocfg_parse_ API doesn't need memory context
Colin Vidal [Tue, 4 Nov 2025 09:46:05 +0000 (10:46 +0100)] 
cfg_parse_ API doesn't need memory context

Because the parser now uses global memory context, the cfg_parse_* API
doesn't take a memory context anymore.

5 months agoremove `references` from cfg_parser_t
Colin Vidal [Wed, 26 Nov 2025 13:33:02 +0000 (14:33 +0100)] 
remove `references` from cfg_parser_t

The parser used to be referenced by `cfg_obj_t`, but not anymore.
Removing the reference counter from `cfg_parser_t`.

5 months agoparser: add cfg_string_create() API
Colin Vidal [Mon, 3 Nov 2025 16:24:22 +0000 (17:24 +0100)] 
parser: add cfg_string_create() API

The parser has a static function `create_string()` used
internally. But there was duplicate code to create a string node
in `namedconf.c`.  Instead of implementing the same logic twice,
`create_string()` is now publicly exposed as `cfg_string_create()`.

5 months agochg: doc: Set up version for BIND 9.21.17
Andoni Duarte [Thu, 4 Dec 2025 09:34:57 +0000 (09:34 +0000)] 
chg: doc: Set up version for BIND 9.21.17

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

See merge request isc-projects/bind9!11319

5 months agoUpdate BIND version to 9.21.17-dev
Andoni Duarte Pintado [Thu, 4 Dec 2025 08:57:25 +0000 (09:57 +0100)] 
Update BIND version to 9.21.17-dev

5 months agofix: dev: Standardize CHECK and RETERR macros
Evan Hunt [Thu, 4 Dec 2025 03:15:12 +0000 (03:15 +0000)] 
fix: dev: Standardize CHECK and RETERR macros

Previously, there were over 40 separate definitions of `CHECK` macros, of
which most used `goto cleanup`, and the rest `goto failure` or `goto out`.
There were another 10 definitions of `RETERR`, of which most were identical
to `CHECK`, but some simply returned a result code instead
of jumping to a cleanup label.

This has now been standardized throughout the code base: `RETERR` is for
returning an error code in the case of an error, and `CHECK` is for jumping
to a cleanup tag, which is now always called `cleanup`. Both macros are
defined in `isc/util.h`.

Merge branch 'each-check-and-cleanup' into 'main'

See merge request isc-projects/bind9!10472

5 months agouse a standard CLEANUP macro
Evan Hunt [Thu, 16 Oct 2025 22:05:01 +0000 (15:05 -0700)] 
use a standard CLEANUP macro

CLEANUP is a macro similar to CHECK but unconditional, jumping
to cleanup even if the result is ISC_R_SUCCESS. It is now used
in place of DST_RET, CLEANUP_WITH, and CHECK(<non-success constant>).

5 months agoadd coccinelle script
Evan Hunt [Fri, 13 Jun 2025 05:19:27 +0000 (22:19 -0700)] 
add coccinelle script

add a semantic patch to prevent (most) future uses of the
CHECK and RETERR patterns.

5 months agoRemove unreachable code
Mark Andrews [Wed, 8 Oct 2025 00:27:04 +0000 (11:27 +1100)] 
Remove unreachable code

Remove some code checking for return values that are not possible.

5 months agoUse isc_result_t more consistently
Mark Andrews [Thu, 18 Sep 2025 15:26:29 +0000 (17:26 +0200)] 
Use isc_result_t more consistently

Some functions to check private data when parsing keys previously
used integer return codes, and have been updated to use isc_result_t.

5 months agoRename isc_result_t ret; to isc_result_t result;
Mark Andrews [Thu, 18 Sep 2025 12:33:36 +0000 (14:33 +0200)] 
Rename isc_result_t ret; to isc_result_t result;

Standardize result variable naming by using 'result' in most places.

5 months agoswitch to RETERR where it wasn't being used
Evan Hunt [Fri, 13 Jun 2025 05:17:33 +0000 (22:17 -0700)] 
switch to RETERR where it wasn't being used

replace all instances of the pattern:

        result = <statement>
        if (result != ISC_R_SUCCESS) {
                return result;
        }

with:

        RETERR(<statement>);

5 months agoswitch to CHECK where it wasn't being used
Evan Hunt [Thu, 22 May 2025 00:13:44 +0000 (17:13 -0700)] 
switch to CHECK where it wasn't being used

replace all instances of the pattern:

        result = <statement>
        if (result != ISC_R_SUCCESS) {
                goto cleanup;
        }

with:

        CHECK(<statement>);

5 months agostandardize CHECK and RETERR macros
Evan Hunt [Wed, 21 May 2025 20:22:58 +0000 (13:22 -0700)] 
standardize CHECK and RETERR macros

previously, there were over 40 separate definitions of CHECK macros, of
which most used "goto cleanup", and the rest "goto failure" or "goto
out". there were another 10 definitions of RETERR, of which most were
identical to CHECK, but some simply returned a result code instead of
jumping to a cleanup label.

this has now been standardized throughout the code base: RETERR is for
returning an error code in the case of an error, and CHECK is for jumping
to a cleanup tag, which is now always called "cleanup". both macros are
defined in isc/util.h.

5 months agochg: dev: Add RRSIG if required as soon as they are found
Colin Vidal [Wed, 3 Dec 2025 15:26:22 +0000 (16:26 +0100)] 
chg: dev: Add RRSIG if required as soon as they are found

When EDNS DO flag (`dig +dnssec`) flag is set, an rdataset is allocated
to hold the RRSIG of an RR, if present in DB. However, this allocation
is not done if the zone DB is not considered as secure
(`dns_db_issecure() == false`). Changes this behaviour by allocating the
rdataset anyway, so the RRSIG can be associated in the answer section of
the response as soon it is found from the DB.

The fact we attach the rrsig potentially more often (though it probably
occurs in edge cases) doesn't seems to affect performance in any ways:

Merge branch 'colin/rrsig-nonsecure-db' into 'main'

See merge request isc-projects/bind9!11317

5 months agotest for RRSIG provided as soon as they are found
Colin Vidal [Tue, 2 Dec 2025 18:00:55 +0000 (19:00 +0100)] 
test for RRSIG provided as soon as they are found

Add a system test which checks that a server authoritative on zone which
is not fully signed (here, it is missing the DNSKEY records as well as the
RRSIG on the RR `b`) still return the RRSIG associated with an RR if
provided in the zone.

5 months agoadd RRSIG if required as soon as they are found
Colin Vidal [Tue, 2 Dec 2025 15:53:40 +0000 (16:53 +0100)] 
add RRSIG if required as soon as they are found

When EDNS DO flag (`dig +dnssec`) flag is set, an rdataset is allocated
to hold the RRSIG of an RR, if present in DB. However, this allocation
is not done if the zone DB is not considered as secure
(`dns_db_issecure() == false`). Changes this behaviour by allocating the
rdataset anyway, so the RRSIG can be associated in the answer section of
the response as soon it is found from the DB.

5 months agofix: test: Fix an issue with unreachable cache's unit test
Arаm Sаrgsyаn [Wed, 3 Dec 2025 10:16:08 +0000 (10:16 +0000)] 
fix: test: Fix an issue with unreachable cache's unit test

The isc_stdtime_now() function used by dns_unreachcache_find() to
check if the entry needs to be expired has a one-second resolution,
and the test sleeps for 1 second and then for the amount of the
expiration interval, which in a worst-case scenario can cause the
test to fail, because the entry was expected to be expired but it
wasn't. Sleep for 2 seconds instead of 1 to avoid the timing
resolution issue.

Closes #5601

Merge branch '5601-unreachable-cache-expire-test-fix' into 'main'

See merge request isc-projects/bind9!11224

5 months agoFix an issue with unreachable cache's unit test
Aram Sargsyan [Thu, 6 Nov 2025 11:33:41 +0000 (11:33 +0000)] 
Fix an issue with unreachable cache's unit test

The isc_stdtime_now() function used by dns_unreachcache_find() to
check if the entry needs to be expired has a one-second resolution,
and the test sleeps for 1 second and then for the amount of the
expiration interval, which in a worst-case scenario can cause the
test to fail, because the entry was expected to be expired but it
wasn't. Sleep for 2 seconds instead of 1 to avoid the timing
resolution issue.

5 months agofix: nil: Fix mislocated 'break;'
Mark Andrews [Tue, 2 Dec 2025 03:24:47 +0000 (14:24 +1100)] 
fix: nil: Fix mislocated 'break;'

Closes #5665

Merge branch '5665-miss-located-break' into 'main'

See merge request isc-projects/bind9!11311

5 months agoFix mislocated break
Mark Andrews [Mon, 1 Dec 2025 00:28:21 +0000 (11:28 +1100)] 
Fix mislocated break

5 months agonew: usr: Add +[no]showtruncated and +[no]showallmessages to dig
Mark Andrews [Mon, 1 Dec 2025 23:11:49 +0000 (10:11 +1100)] 
new: usr: Add +[no]showtruncated and +[no]showallmessages to dig

The dig option +showtruncated adds the ability to display
the truncated message before retrying the query over TCP.

The dig option +showallmessages add a short cut which is
the equivalent of "dig +qr +showbadcookie +showbadversion
+showtruncated".

Closes #5657

Merge branch '5657-add-showtruncated-to-dig' into 'main'

See merge request isc-projects/bind9!11275

5 months agoAdd +showallmessages to dig
Mark Andrews [Thu, 27 Nov 2025 04:22:44 +0000 (15:22 +1100)] 
Add +showallmessages to dig

This is equivalent to "dig +qr +showbadcookie +showbadversion
+showtruncated".

5 months agocheck that dig +showtruncated works
Mark Andrews [Tue, 25 Nov 2025 05:57:44 +0000 (16:57 +1100)] 
check that dig +showtruncated works

5 months agoAdd +[no]showtruncated to dig
Mark Andrews [Tue, 25 Nov 2025 05:05:07 +0000 (16:05 +1100)] 
Add +[no]showtruncated to dig

Adds the ability to display the truncated message before retrying
the query over TCP.

5 months agochg: doc: Update CVE checklist
Michał Kępień [Mon, 1 Dec 2025 13:43:23 +0000 (14:43 +0100)] 
chg: doc: Update CVE checklist

Account for the recent nomenclature change in the CVE checklist.

Add a placeholder for a link to an Earliest Notification draft for every
vulnerability handled.

Use consistent Markdown reference names for all URLs in the summary
table.  Provide a template for all URLs to indicate naming expectations.

Merge branch 'michal/update-cve-checklist' into 'main'

See merge request isc-projects/bind9!11313

5 months agoClean up URL templates in the summary table
Michał Kępień [Mon, 1 Dec 2025 13:31:39 +0000 (14:31 +0100)] 
Clean up URL templates in the summary table

Use consistent Markdown reference names for all URLs in the summary
table.  Provide a template for all URLs to indicate naming expectations.

5 months agoAdd Earliest Notification row to the summary table
Michał Kępień [Mon, 1 Dec 2025 13:31:39 +0000 (14:31 +0100)] 
Add Earliest Notification row to the summary table

Add a placeholder for a link to an Earliest Notification draft for every
vulnerability handled.

5 months agoReplace "ASN" with "EVN" in the CVE checklist
Michał Kępień [Mon, 1 Dec 2025 13:31:39 +0000 (14:31 +0100)] 
Replace "ASN" with "EVN" in the CVE checklist

Account for the recent nomenclature change in the CVE checklist.

5 months agochg: test: Wait for log zone_needdump is more reliable
Matthijs Mekking [Mon, 1 Dec 2025 13:17:59 +0000 (13:17 +0000)] 
chg: test: Wait for log zone_needdump is more reliable

Closes #5648

Merge branch '5648-need-dump-instead-of-sending-notifies' into 'main'

See merge request isc-projects/bind9!11265

5 months agoWait for log zone_needdump is more reliable
Matthijs Mekking [Thu, 20 Nov 2025 13:10:45 +0000 (14:10 +0100)] 
Wait for log zone_needdump is more reliable

In some cases we wait for the log message "sending notifies" before
proceeding with the test case. Notifies are rate limited. They are not
sent on every change to the zone. The "zone_needdump" messages happen on
every change.

5 months agofix: dev: Pass isc_buffer_t pointers when applicable
Evan Hunt [Fri, 28 Nov 2025 19:07:48 +0000 (19:07 +0000)] 
fix: dev: Pass isc_buffer_t pointers when applicable

In commit aea251f3bce7, `isc_buffer_reserve()` was changed to
take a simple `isc_buffer_t *` instead of `isc_buffer_t **`.
A number of functions calling it have now been similarly
modified.

Merge branch 'each-text-buffers' into 'main'

See merge request isc-projects/bind9!11282

5 months agopass isc_buffer_t pointers when applicable
Evan Hunt [Wed, 26 Nov 2025 07:23:19 +0000 (23:23 -0800)] 
pass isc_buffer_t pointers when applicable

In commit aea251f3bce7, `isc_buffer_reserve()` was changed to
take a simple `isc_buffer_t *` instead of `isc_buffer_t **`.
A number of functions calling it have now been similarly
modified.

5 months agochg: usr: Improve output of 'rndc dnssec -status'
Matthijs Mekking [Fri, 28 Nov 2025 15:15:39 +0000 (15:15 +0000)] 
chg: usr: Improve output of 'rndc dnssec -status'

Add a new parameter ``-v`` to the ``rndc dnssec -status`` command for more verbose output. Previously, key states were printed, and keys that can be purged were listed. This made the output hard to read. This information is now only shown in the verbose output.

Add more meaningful messages to the status output, making it clearer what the state of a rollover is.

This makes the output more condense, improving its readability.

Closes #3938

Merge branch '3938-improve-rndc-dnssec-status-output' into 'main'

See merge request isc-projects/bind9!11099

5 months agoSplit rndc dnssec manpage into sections
Matthijs Mekking [Tue, 21 Oct 2025 12:23:23 +0000 (14:23 +0200)] 
Split rndc dnssec manpage into sections

Making it more readable.

5 months agoUpdate kasp based system tests to new output
Matthijs Mekking [Wed, 15 Oct 2025 14:37:15 +0000 (16:37 +0200)] 
Update kasp based system tests to new output

In addition fix some test bugs where we actually were testing against
the wrong policy name.

5 months agoChange output of rndc dnssec -status
Matthijs Mekking [Wed, 15 Oct 2025 14:04:28 +0000 (16:04 +0200)] 
Change output of rndc dnssec -status

Wrap 'dns_keymgr_status()' in 'dns_zone_dnssecstatus()' so we can easily
retrieve the zone string name and refresh key time value.

In addition to the current time, output when the next key event is
expected.

Don't log keys that are completely hidden unless verbose is set.
Don't log key state values unless verbose is set, or they are in a
weird state.

For expected key states, log a more useful message of the stage of
the rollover. If we are in the middle of a key rollover, don't log
when the next key rollover is scheduled.

Condense the output for better readability.

5 months agoAdd verbose option to rndc dnssec -status
Matthijs Mekking [Wed, 15 Oct 2025 13:52:58 +0000 (15:52 +0200)] 
Add verbose option to rndc dnssec -status

This can be used to hide noisy details such as key states, and keys that
have been fully retired.

5 months agochg: test: Rewrite multisigner system test to pytest
Matthijs Mekking [Fri, 28 Nov 2025 14:30:38 +0000 (14:30 +0000)] 
chg: test: Rewrite multisigner system test to pytest

Merge branch 'matthijs-pytestify-multisigner-system-test' into 'main'

See merge request isc-projects/bind9!11082

5 months agodnskey is now a property of Key class
Matthijs Mekking [Fri, 28 Nov 2025 08:05:21 +0000 (09:05 +0100)] 
dnskey is now a property of Key class

After a rebase, the dnskey() invocations need to be adjusted to
accomodate for !11201 (0bf20f8d).

5 months agoUpdate misleading comments in multisigner test
Matthijs Mekking [Wed, 26 Nov 2025 07:31:45 +0000 (08:31 +0100)] 
Update misleading comments in multisigner test

We are not actually retrieving these records from the other provider,
they are available as key files to us and we are using those files
to send a dynamic update to the server.

5 months agoRemove common kasp shell script
Matthijs Mekking [Sun, 12 Oct 2025 10:23:12 +0000 (12:23 +0200)] 
Remove common kasp shell script

No system test is using the common kasp shell script test anymore, so we
can remove it.

5 months agoClean up shell script remnants
Matthijs Mekking [Sun, 12 Oct 2025 09:54:54 +0000 (11:54 +0200)] 
Clean up shell script remnants

All the cases in this system test have been converted to pytest, so
we can clean up the shell script remnants.

5 months agoConvert model2.secondary test to pytest
Matthijs Mekking [Sun, 12 Oct 2025 09:49:00 +0000 (11:49 +0200)] 
Convert model2.secondary test to pytest

This test is similar to model2.multisigner, but now the two providers
are both secondary, both using the same hidden primary. The DNSKEY,
CDNSKEY, and CDS records need to be published at the hidden primary,
ns5, the zone is transferred to both secondaries, ns3 and ns4.

To avoid intermittent test failures, we wait for the line
"zone {zone}/IN (signed): serial {serial2} (unsigned {serial1})" in
the secondary server logs. This is a signal that the unsigned zone
with serial <serial1> has a signed version ready with serial <serial2>.

To speed up the test, disable 'notify-delay'.

5 months agoUpdate multisigner system test to set primary
Matthijs Mekking [Fri, 10 Oct 2025 16:02:58 +0000 (18:02 +0200)] 
Update multisigner system test to set primary

When testing multi-signer as bump-in-the-wire (upcoming test), we want
to be able to do dynamically updates to a hidden primary. Update the
test functions such that we can set a specific primary server.

5 months agoMake test code flexible for more providers
Matthijs Mekking [Fri, 10 Oct 2025 15:17:38 +0000 (17:17 +0200)] 
Make test code flexible for more providers

The initial test code only allowed for one additional provider. Update
the test function such that more extra keys can be tested.

5 months agoConvert model2.multisigner test to pytest
Matthijs Mekking [Fri, 10 Oct 2025 08:57:50 +0000 (10:57 +0200)] 
Convert model2.multisigner test to pytest

This converts the model2.multisigner tests from the multisigner system
test to pytest based code. Crappy shell test functions such as
'zsks_are_published', 'records_published' and others are replaced with
the standard test code from isctest.kasp and by setting 'private=False'
and 'legacy=True' on the keys from the other providers so we don't do
any key file testing.

5 months agochg: usr: Provide more information when the memory allocation fails
Ondřej Surý [Fri, 28 Nov 2025 13:42:43 +0000 (14:42 +0100)] 
chg: usr: Provide more information when the memory allocation fails

Provide more information about the failure when the memory allocation fails.

Merge branch 'ondrej/print-helpful-message-on-oom' into 'main'

See merge request isc-projects/bind9!11272

5 months agoProvide more information when the memory allocation fails
Ondřej Surý [Mon, 24 Nov 2025 09:06:51 +0000 (10:06 +0100)] 
Provide more information when the memory allocation fails

Instead of just crashing when memory allocation fails, also print a
message saying "Out of memory!", the size of the allocation that failed,
total allocated memory from all memory contexts and value of errno.

5 months agofix: nil: Fix missing field 'merge' initializer for the new cfg_clausedef_t
Ondřej Surý [Fri, 28 Nov 2025 13:34:04 +0000 (14:34 +0100)] 
fix: nil: Fix missing field 'merge' initializer for the new cfg_clausedef_t

In !11121, a .merge member was added to cfg_clausedef_t.  This caused
a build failure with -Werror,-Wmissing-field-initializers enabled.
Add the missing initializer and set them all to NULL to match the
intent.

Merge branch 'ondrej/fix-compilation-on-macos' into 'main'

See merge request isc-projects/bind9!11302

5 months agoFix missing field 'merge' initializer for the new cfg_clausedef_t
Ondřej Surý [Fri, 28 Nov 2025 10:38:41 +0000 (11:38 +0100)] 
Fix missing field 'merge' initializer for the new cfg_clausedef_t

In !11121, a .merge member was added to cfg_clausedef_t.  This caused
a build failure with -Werror,-Wmissing-field-initializers enabled.
Add the missing initializer and set them all to NULL to match the
intent.

5 months agofix: dev: Fix uninitialized pointer check on getipandkeylist
Colin Vidal [Fri, 28 Nov 2025 12:45:06 +0000 (13:45 +0100)] 
fix: dev: Fix uninitialized pointer check on getipandkeylist

Function `named_config_getipandkeylist` could, in case of error in the early code attempting to get the `port` or `tls-port`, make a pointer check on a non-initialized value. This is now fixed.

Merge branch 'colin/getipandkeylist-uinitstate' into 'main'

See merge request isc-projects/bind9!11303

5 months agofix unitiailized pointer check on getipandkeylist
Colin Vidal [Fri, 28 Nov 2025 10:55:32 +0000 (11:55 +0100)] 
fix unitiailized pointer check on getipandkeylist

Function `named_config_getipandkeylist` could, in case of error in the
early code attempting to get the `port` or `tls-port`, make a pointer
check on a non-initialized value. This is now fixed.

5 months agochg: test: Remove obsolete checks for PYTHON executable
Nicki Křížek [Fri, 28 Nov 2025 10:24:22 +0000 (11:24 +0100)] 
chg: test: Remove obsolete checks for PYTHON executable

Python has been required to run the system test suite for quite a while.
Remove the dated checks inside system tests which are no longer needed.

Merge branch 'nicki/cleanup-python-checks-system-tests' into 'main'

See merge request isc-projects/bind9!11292

5 months agoRemove obsolete dnspython prerequisite checks
Nicki Křížek [Thu, 27 Nov 2025 13:13:32 +0000 (14:13 +0100)] 
Remove obsolete dnspython prerequisite checks

dnspython has been mandatory to run system test for quite a while.
Remove all extraneous checks for this module from prereq.sh scipts.

5 months agoRemove extraneous prerequisite script for timeouts test
Nicki Křížek [Thu, 27 Nov 2025 13:00:21 +0000 (14:00 +0100)] 
Remove extraneous prerequisite script for timeouts test

The timeouts test already checks for dnspython>=2.0.0 in
test_tcp_timeouts.py and the prereq.sh file is not needed.

5 months agoRemove obsolete checks for PYTHON executable
Nicki Křížek [Thu, 27 Nov 2025 12:58:28 +0000 (13:58 +0100)] 
Remove obsolete checks for PYTHON executable

Python has been required to run the system test suite for quite a while.
Remove the dated checks inside system tests which are no longer needed.

5 months agofix: usr: Fix caching RRSIG covering cache NODATA record
Ondřej Surý [Fri, 28 Nov 2025 09:51:38 +0000 (10:51 +0100)] 
fix: usr:  Fix caching RRSIG covering cache NODATA record

When a RRSIG for type that we already have cached NODATA record was cached due to mismatch of the records on the upstream nameservers, an assertion failure could trigger.  This has been fixed.

Closes #5633

Merge branch '5633-evict-related-rrsig-when-adding-negative-header' into 'main'

See merge request isc-projects/bind9!11228

5 months agoFix not caching RRSIG covering cache NODATA record
Ondřej Surý [Sat, 8 Nov 2025 11:10:51 +0000 (12:10 +0100)] 
Fix not caching RRSIG covering cache NODATA record

During refactoring, a condition that prevented caching RRSIGs for
records that we already have cached NODATA records was changed in an
invalid way.  This was caught later when a cached NODATA(type) +
RRSIG(type) was found in the cache and caused an assertion failure.

Fix and simplify condition that prevents adding such RRSIGs.

5 months agoRefactor the conditions when adding new NEGATIVE header
Ondřej Surý [Sat, 8 Nov 2025 11:09:18 +0000 (12:09 +0100)] 
Refactor the conditions when adding new NEGATIVE header

Refactor the block when adding existing negative header under common
block, so it is easier to understand that the two conditions inside are
related.

5 months agoEvict the RRSIG when adding negative header
Ondřej Surý [Sat, 8 Nov 2025 11:06:20 +0000 (12:06 +0100)] 
Evict the RRSIG when adding negative header

Formerly, we've evicted the RRSIG(type) only when we were changing
existing header from positive to negative.  Move the eviction routine
for the RRSIG to a common path, so the RRSIG also gets evicted when we
are adding new negative header for a specific type.

5 months agofix: usr: Fix parsing bug in remote-servers with key or tls
Colin Vidal [Fri, 28 Nov 2025 08:51:24 +0000 (09:51 +0100)] 
fix: usr: Fix parsing bug in remote-servers with key or tls

The :any:`remote-servers` clause enable the following pattern using a named ``server-list``:

remote-servers a { 1.2.3.4; ... };
remote-servers b { a key foo; };

However, such configuration was wrongly rejected, with an "unexpected token 'foo'" error. Such configuration is now accepted.

Closes #5646

Merge branch '5646-fix-named-remote-servers-key-tls' into 'main'

See merge request isc-projects/bind9!11252

5 months agoadd checkconf test for named remote-servers
Colin Vidal [Wed, 19 Nov 2025 16:36:17 +0000 (17:36 +0100)] 
add checkconf test for named remote-servers

Add checkconf system test to cover usage of `remote-servers` with a
named server-list and a `key` and/or a `tls` option.

5 months agocheck validity of key and tls in a server-list
Colin Vidal [Tue, 25 Nov 2025 14:45:22 +0000 (15:45 +0100)] 
check validity of key and tls in a server-list

If a `key` or `tls` is associated to an IP address inside a server-list,
only the `tls` existence in the configuration was checked. Also, if
`key` or `tls` is associated to a named server-list inside a
server-list, there was no check at all.

Add the check for making sure a `key` is defined in the configuration,
as well as the check for `key` and `tls` when used on a named
server-list.

5 months agocheck remote-servers list correctness
Colin Vidal [Tue, 25 Nov 2025 14:34:26 +0000 (15:34 +0100)] 
check remote-servers list correctness

`check.c` only checks if `remote-servers`, `primaries`, etc. are not
duplicated inside the configuration file, but does not check the
correctness of its definition. This commit fixes this by calling
`validate_remotes()` for each `remote-servers` (and other aliases),
which validates the correctness of the definition itself (this is the
same call done to validate other cases like `also-notify`, etc.).

5 months agorefactoring of `named_config_getipandkeylist`
Colin Vidal [Tue, 25 Nov 2025 12:56:37 +0000 (13:56 +0100)] 
refactoring of `named_config_getipandkeylist`

Function `named_config_getipandkeylist()` processes the nested lists by
overriding the current local variable of the function, jumping back to
the beginning of the list processing. Of course, in order to go back to
the previous state and process the remaining items of the current list,
a "stack" array is used in order to put and get back the next list
element and associated values.

This makes the logic quite complex and error prone. Instead, this commit
changes the logic by recursing into the nested list (while sharing a
state between all the invocations). The processing is fundamentally
identical, but instead of "manually" handling the stack to go back to
the previous state (and process remaining elements of the current list),
takes advantage of recursion.

5 months agominimal fix for missing `key`/`tls` in named `remote-servers`
Colin Vidal [Tue, 25 Nov 2025 09:16:13 +0000 (10:16 +0100)] 
minimal fix for missing `key`/`tls` in named `remote-servers`

The following case

   remote-servers foo { 10.53.0.5; };
   remote-servers bar { foo key fookey; };

did not work: the `fookey` was silently ignored. No matter how `bar` was
used, the server `10.53.0.5` wouldn't be contacted using the TSIG key
`fookey`. The problem is the same the for `tls` property.

The reason of the problem was that when `named_config_getipandkeylist()`
reached a named server-list (here, `foo`), it modified the current
context in order to immediately process what is inside `foo`, but forgot
to look at the fields `key` and `tls`, to associate those with `foo`
addresses.

Fix the problem by wrapping the `key` and `tls` from the "caller" list
inside the existing `lists` struct which is used to figure out if a
list is already processed or not. That way, the `key` and `tls` values
can be read when adding the addresses of the nested list.

5 months agoremove `dns_notify_dequeue`
Colin Vidal [Tue, 25 Nov 2025 09:15:51 +0000 (10:15 +0100)] 
remove `dns_notify_dequeue`

Function `dns_notify_dequeue` is dead code, removing it.

5 months agotest named remote-servers `key` usage
Colin Vidal [Fri, 21 Nov 2025 16:05:15 +0000 (17:05 +0100)] 
test named remote-servers `key` usage

Even though `remote-servers` now allows using named server-list with `key`
(or `tls`), the `key` or `tls` is not used, in the context of a named
server-list, when configuring the server.

For instance,

   remote-servers foo { 10.53.0.5; };
   also-notify { foo key fookey; };

won't use `fookey`.

Add a system test highlighting the problem.

5 months agoallow named remote-servers list with key or tls
Colin Vidal [Wed, 19 Nov 2025 16:34:16 +0000 (17:34 +0100)] 
allow named remote-servers list with key or tls

The remote-servers clause enables the following pattern:

remote-servers a { 1.2.3.4; ... };
remote-servers b { a key foo; };

However, `check.c` was explicitly throwing an error if a `key` or `tls`
was provided after a named server-list. Remove this check, as this is a
valid use case.

5 months agofix: usr: Fix TLS contexts cache object usage bug in the resolver
Arаm Sаrgsyаn [Thu, 27 Nov 2025 17:41:17 +0000 (17:41 +0000)] 
fix: usr: Fix TLS contexts cache object usage bug in the resolver

:iscman:`named` could terminate unexpectedly when reconfiguring or
reloading, and if client-side TLS transport was in use (for example,
when forwarding queries to a DoT server). This has been fixed.

Closes #5653

Merge branch '5653-tlsctx_cache-reference-bug-fix' into 'main'

See merge request isc-projects/bind9!11295

5 months agoFix a bug where tlsctx_cache could be destroyed while still in use
Aram Sargsyan [Thu, 27 Nov 2025 15:00:26 +0000 (15:00 +0000)] 
Fix a bug where tlsctx_cache could be destroyed while still in use

When named is being reconfigured, it detaches from the old
'isc_tlsctx_cache_t' TLS context cache object and creates a
new one. This can cause an assertion failure within the
resolver when the object is destroyed while still in use,
because the resolver is using the object without getting
attached to it.

Add an attach/detach so that the 'isc_tlsctx_cache_t' doesn't
get destroyed while still being in use.

5 months agofix: usr: Fix the spurious timeouts while resolving names
Ondřej Surý [Thu, 27 Nov 2025 16:34:42 +0000 (17:34 +0100)] 
fix: usr: Fix the spurious timeouts while resolving names

Sometimes the loops in the resolving (e.g. to resolve or validate ns1.example.com we need to resolve ns1.example.com) were not properly detected leading to spurious 10 seconds delay.  This has been fixed and such loops are properly detected.

Closes #3033, #5578

Merge branch '5578-tracker-parent-fetch' into 'main'

See merge request isc-projects/bind9!11138

5 months agoDetect resolution loops between fetches
Ondřej Surý [Wed, 22 Oct 2025 17:25:55 +0000 (19:25 +0200)] 
Detect resolution loops between fetches

Maintain the relationship between the parent and child fetch and when
creating a new child fetch, properly check the resolution loops that
would lead to a new fetch would join one of the parent's fetch contexts.

5 months agochg: usr: Change the QNAME minimization algorithm to follow the standard
Ondřej Surý [Thu, 27 Nov 2025 16:34:07 +0000 (17:34 +0100)] 
chg: usr: Change the QNAME minimization algorithm to follow the standard

In !9155, the QNAME minimization was changed to not leak the query type
to the parent name server.  This violates RFC 9156 Section 3, step (3)
and it is not necessary.  It also breaks some (weird) authoritative DNS
setups, especially when CNAMEs are involved.  Also there is really no
privacy leak with query type.

Closes #5661

Merge branch '5661-dont-minimize-when-QNAME-matches-original-QNAME' into 'main'

See merge request isc-projects/bind9!11293

5 months agoChange the QNAME minimization algorithm to follow the standard
Ondřej Surý [Thu, 27 Nov 2025 13:07:35 +0000 (14:07 +0100)] 
Change the QNAME minimization algorithm to follow the standard

In !9155, the QNAME minimization was changed to not leak the query type
to the parent name server.  This violates RFC 9156 Section 3, step (3)
and it is not necessary.  It also breaks some (weird) authoritative DNS
setups, especially when CNAMEs are involved.  Also there is really no
privacy leak with query type.

5 months agonew: ci: Add Fedora 43
Michal Nowak [Thu, 27 Nov 2025 15:35:22 +0000 (16:35 +0100)] 
new: ci: Add Fedora 43

Merge branch 'mnowak/fedora-43' into 'main'

See merge request isc-projects/bind9!11285

5 months agoAdd Fedora 43
Michal Nowak [Wed, 17 Sep 2025 08:43:55 +0000 (10:43 +0200)] 
Add Fedora 43

5 months agonew: test: Create trust anchors from isctest.kasp.Key
Nicki Křížek [Thu, 27 Nov 2025 13:49:01 +0000 (14:49 +0100)] 
new: test: Create trust anchors from isctest.kasp.Key

Add isctest.kasp.Key.into_ta() method which convert the key into DS /
DNSKEY trust anchor for BIND config. Add a shared template
trusted.conf.j2 which can be linked to in tests to create the trust
anchor configuration from trust anchor data returned from bootstrap()
function.

This is basically a python replacement for the keyfile_to_static_ds (and
friends) from the conf.sh shell framework.

Merge branch 'nicki/pytest-add-trust-anchor-template' into 'main'

See merge request isc-projects/bind9!11201

5 months agoMock DSDigest for compatibility with older dnspython
Nicki Křížek [Thu, 27 Nov 2025 12:16:26 +0000 (13:16 +0100)] 
Mock DSDigest for compatibility with older dnspython

DSDigest class isn't available prior to dnspython 2.0.0 and prior to Add
an isctest.compat.DSDigest compatibility hack to support those versions.