]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
11 months agochg: ci: Run CI danger job even if user canceled it while it was running
Petr Špaček [Mon, 2 Jun 2025 11:52:35 +0000 (11:52 +0000)] 
chg: ci: Run CI danger job even if user canceled it while it was running

Merge branch 'pspacek/always-hazard' into 'main'

See merge request isc-projects/bind9!10490

11 months agoRun CI danger job even if user canceled it while it was running
Petr Špaček [Wed, 28 May 2025 13:46:14 +0000 (15:46 +0200)] 
Run CI danger job even if user canceled it while it was running

Limitation: The after_script is not executed if the job did not start at
all, i.e. if the user canceled the job before it got onto a runner.
See https://gitlab.com/groups/gitlab-org/-/epics/10158

11 months agochg: test: Use "digit" class instead of character range in rndc_dumpdb()
Michal Nowak [Mon, 2 Jun 2025 11:03:17 +0000 (11:03 +0000)] 
chg: test: Use "digit" class instead of character range in rndc_dumpdb()

The tr range did not work on Solaris 11.4. Let's use a class that is
defined in POSIX.

Closes #5326

Merge branch '5326-make-rndc_dumpdb-work-on-solaris' into 'main'

See merge request isc-projects/bind9!10530

11 months agoUse "digit" class instead of character range in rndc_dumpdb()
Michal Nowak [Fri, 30 May 2025 10:26:42 +0000 (12:26 +0200)] 
Use "digit" class instead of character range in rndc_dumpdb()

The tr range did not work on Solaris 11.4. Let's use a class that is
defined in POSIX.

11 months agochg: test: Rewrite kasp system test to pytest (5)
Matthijs Mekking [Mon, 2 Jun 2025 09:21:21 +0000 (09:21 +0000)] 
chg: test: Rewrite kasp system test to pytest (5)

Rollover scenarios.

Merge branch 'matthijs-pytest-rewrite-kasp-system-test-5' into 'main'

See merge request isc-projects/bind9!10292

11 months agoAdd dynamic update facility to NamedInstance
Nicki Křížek [Mon, 26 May 2025 15:10:15 +0000 (17:10 +0200)] 
Add dynamic update facility to NamedInstance

Deduplicate the code for dynamic updates and increase code clarity by
using an actual dns.update.UpdateMessage rather than an undefined
intermediary format passed around as a list of arguments.

11 months agoConvert csk rollover test cases to pytest
Matthijs Mekking [Wed, 19 Mar 2025 09:10:13 +0000 (10:10 +0100)] 
Convert csk rollover test cases to pytest

Move the 'csk-roll1' and 'csk-roll2' zones to the rollover test dir and
convert CSK rollover tests to pytest.

The DS swap spans multiple steps. Only the first time we should check
if the "CDS is now published" log is there, and only the first time we
should run 'rndc dnssec -checkds' on the keys. Add a new key to the
step dictionary to disable the DS swap checks.

This made me realize that we need to check for "is not None" in case
the value in the dictionary is False. Update check_rollover_step()
accordingly, and also add a log message which step/zone we are currently
checking.

11 months agoConvert the 'three is a crowd' test case to pytest
Matthijs Mekking [Tue, 18 Mar 2025 14:13:17 +0000 (15:13 +0100)] 
Convert the 'three is a crowd' test case to pytest

This test shows similarities with the Double KSK rollover method, so
put the test in there.

11 months agoConvert ksk rollover test case to pytest
Matthijs Mekking [Tue, 18 Mar 2025 13:20:54 +0000 (14:20 +0100)] 
Convert ksk rollover test case to pytest

Move the 'ksk-doubleksk' zones to the rollover test dir and convert KSK
rollover test to pytest.

Since the 'ksk-doubleksk' policy publishes different CDNSKEY/CDS RRsets,
update the 'check_rollover_step' to check which CDNSKEY/CDS RRsets should
be published and which should be prohibited. Update 'isctest.kasp'
accordingly.

We are changing the ZSK lifetime to unlimited in this test case as it
is of no importance (this actually discovered a bug in setting the
next time the keymgr should run).

11 months agoConvert zsk rollover test case to pytest
Matthijs Mekking [Tue, 18 Mar 2025 11:18:34 +0000 (12:18 +0100)] 
Convert zsk rollover test case to pytest

Move the 'zsk-prepub' zones to the rollover test dir and convert ZSK
rollover test to pytest.

We need a way to signal a smooth rollover is going on. Signatures are
being replaced gradually during a ZSK rollover, so the existing
signatures of the predecessor ZSK are still being used. Add a smooth
operator to set the right expectations on what signatures are being
used.

Setting expected key relationships is a bit crude: a list of two
elements where the first element is the index of the expected keys that
is the predecessor, and the second element is the index of the expected
keys that is the successor.

We are changing the KSK lifetime to unlimited in this test case as it
is of no importance.

11 months agoConvert enable dnssec test case to pytest
Matthijs Mekking [Tue, 18 Mar 2025 09:34:53 +0000 (10:34 +0100)] 
Convert enable dnssec test case to pytest

Move the 'enable-dnssec' to the rollover test dir and convert to pytest.

This requires new test functionality to check that "CDS is published"
messages are logged (or prohibited).

The setup part is slightly adapted such that it no longer needs to
set the '-P sync' value in most cases (this is then set by 'named'),
and to adjust for the inappropriate safety intervals fix.

11 months agoConvert kasp multi-signer tests to pytest
Matthijs Mekking [Tue, 18 Mar 2025 07:41:02 +0000 (08:41 +0100)] 
Convert kasp multi-signer tests to pytest

Move the multi-signer test scenarios to the rollover directory and
convert tests to pytest.

- If the KeyProperties set the "legacy" to True, don't set expected
  key times, nor check them. Also, when a matching key is found, set
  key.external to True.
- External keys don't show up in the 'rndc dnssec -status' output so
  skip them in the 'check_dnssecstatus' function. External keys never
  sign RRsets, so also skip those keys in the '_check_signatures'
  function.
- Key properties strings now can set expected key tag ranges, and if
  KeyProperties have tag ranges set, they are checked.

11 months agoMove rollover test cases to separate test dir
Matthijs Mekking [Fri, 28 Feb 2025 14:52:20 +0000 (15:52 +0100)] 
Move rollover test cases to separate test dir

In order to keep the kasp system test somewhat approachable, let's
move all rollover scenarios to its own test directory. Starting with
the manual rollover test cases.

A new test function is added to 'isctest.kasp', to verify that the
relationship metadata (Predecessor, Successor) is set correctly.

The configuration and setup for the zone 'manual-rollover.kasp' are
almost copied verbatim, the only exception is the keytimes. Similar
to the test kasp cases, we no longer set "SyncPublish/PublishCDS" in
the setup script. In addition to that, the offset is changed from one
day ago to one week ago, so that the key states match the timing
metadata (one day is too short to move a key from "hidden" to
"omnipresent").

11 months agofix: dev: Allow commandline.c to compile on Solaris
Michal Nowak [Mon, 2 Jun 2025 09:01:09 +0000 (09:01 +0000)] 
fix: dev: Allow commandline.c to compile on Solaris

commandline.c failed to compile on Solaris because NAME_MAX was
undefined.  Include 'isc/dir.h' which defines NAME_MAX for platforms
that don't define it.

    In file included from commandline.c:54:
    ./include/isc/commandline.h:31:38: error: 'NAME_MAX' undeclared here (not in a function)
       31 | extern char isc_commandline_progname[NAME_MAX];
          |                                      ^~~~~~~~

Merge branch 'mnowak/fix-solaris-commandline-h' into 'main'

See merge request isc-projects/bind9!10524

11 months agoAllow commandline.c to compile on Solaris
Michal Nowak [Fri, 30 May 2025 08:22:48 +0000 (10:22 +0200)] 
Allow commandline.c to compile on Solaris

commandline.c failed to compile on Solaris because NAME_MAX was
undefined.  Include 'isc/dir.h' which defines NAME_MAX for platforms
that don't define it.

    In file included from commandline.c:54:
    ./include/isc/commandline.h:31:38: error: 'NAME_MAX' undeclared here (not in a function)
       31 | extern char isc_commandline_progname[NAME_MAX];
          |                                      ^~~~~~~~

11 months agochg: doc: Add text about no bug bounties
Petr Špaček [Mon, 2 Jun 2025 07:02:59 +0000 (07:02 +0000)] 
chg: doc: Add text about no bug bounties

Vicky and Ondrej have agreed that we should add text to explain that we do not give bug bounties.

Merge branch 'sgoldlust-main-bug-bounty' into 'main'

See merge request isc-projects/bind9!10246

11 months agoUpdate URL for bug reports
Suzanne Goldlust [Fri, 14 Mar 2025 15:27:14 +0000 (15:27 +0000)] 
Update URL for bug reports

11 months agoAdd text about no bug bounties
Suzanne Goldlust [Thu, 13 Mar 2025 17:56:01 +0000 (17:56 +0000)] 
Add text about no bug bounties

11 months agochg: test: Use isctest.asyncserver in the "chain" test
Michał Kępień [Fri, 30 May 2025 17:37:53 +0000 (17:37 +0000)] 
chg: test: Use isctest.asyncserver in the "chain" test

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

For ans3, replace the sequence of logical conditions present in Perl
code with zone files and a limited amount of custom logic applied on top
of them where necessary.

For ans4, replace the ctl_channel() and create_response() functions with
a custom control command handler coupled with a dynamically instantiated
response handler, making the code more robust and readable.

Migrate sendcmd() and its uses to the new way of sending control queries
to custom servers used in system tests.

Depends on !10409

Merge branch 'michal/chain-asyncserver' into 'main'

See merge request isc-projects/bind9!10410

11 months agoUse isctest.asyncserver in the "chain" test
Michał Kępień [Fri, 30 May 2025 16:23:21 +0000 (18:23 +0200)] 
Use isctest.asyncserver in the "chain" test

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

For ans3, replace the sequence of logical conditions present in Perl
code with zone files and a limited amount of custom logic applied on top
of them where necessary.

For ans4, replace the ctl_channel() and create_response() functions with
a custom control command handler coupled with a dynamically instantiated
response handler, making the code more robust and readable.

Migrate sendcmd() and its uses to the new way of sending control queries
to custom servers used in system tests.

11 months agoImprove readability of sendcmd() calls
Michał Kępień [Fri, 30 May 2025 16:23:21 +0000 (18:23 +0200)] 
Improve readability of sendcmd() calls

To improve readability of sendcmd() calls used for controlling
isctest.asyncserver-based custom DNS servers, pass the command's name
and arguments as separate parameters.

11 months agonew: test: Handle alias records in zone files loaded by AsyncDnsServer
Michał Kępień [Fri, 30 May 2025 16:18:07 +0000 (16:18 +0000)] 
new: test: Handle alias records in zone files loaded by AsyncDnsServer

dnspython does not treat CNAME records in zone files in any special way;
they are just RRsets belonging to zone nodes.  Process CNAMEs when
preparing zone-based responses just like a normal authoritative DNS
server would.

Adding proper DNAME support to AsyncDnsServer would add complexity to
its code for little gain: DNAME use in custom system test servers is
limited to crafting responses that attempt to trigger bugs in named.

This fact will not be obvious to AsyncDnsServer users as it
automatically loads all zone files it finds and handles CNAME records
like a normal authoritative DNS server would.

Therefore, to prevent surprises:

- raise an exception whenever DNAME records are found in any of the
zone files loaded by AsyncDnsServer,

- add a new optional argument to the AsyncDnsServer constructor that
enables suppressing this new behavior, enabling zones with DNAME
records to be loaded anyway.

This enables response handlers to use the DNAME records present in zone
files in arbitrary ways without complicating the "base" code.

Merge branch 'michal/asyncserver-alias-records' into 'main'

See merge request isc-projects/bind9!10409

11 months agoForce manual DNAME handling to be acknowledged
Michał Kępień [Fri, 30 May 2025 16:08:54 +0000 (18:08 +0200)] 
Force manual DNAME handling to be acknowledged

Adding proper DNAME support to AsyncDnsServer would add complexity to
its code for little gain: DNAME use in custom system test servers is
limited to crafting responses that attempt to trigger bugs in named.

This fact will not be obvious to AsyncDnsServer users as it
automatically loads all zone files it finds and handles CNAME records
like a normal authoritative DNS server would.

Therefore, to prevent surprises:

  - raise an exception whenever DNAME records are found in any of the
    zone files loaded by AsyncDnsServer,

  - add a new optional argument to the AsyncDnsServer constructor that
    enables suppressing this new behavior, enabling zones with DNAME
    records to be loaded anyway.

This enables response handlers to use the DNAME records present in zone
files in arbitrary ways without complicating the "base" code.

11 months agoDrop unused AsyncDnsServer constructor argument
Michał Kępień [Fri, 30 May 2025 16:08:54 +0000 (18:08 +0200)] 
Drop unused AsyncDnsServer constructor argument

The constructor for the AsyncDnsServer class takes a 'load_zones'
argument that is not used anywhere and is not expected to be useful in
the future: zone files are not required for an AsyncDnsServer instance
to start and, if necessary, zone-based answers can be suppressed or
modified by installing a custom response handler.

11 months agoProperly handle CNAMEs when preparing responses
Michał Kępień [Fri, 30 May 2025 16:08:54 +0000 (18:08 +0200)] 
Properly handle CNAMEs when preparing responses

dnspython does not treat CNAME records in zone files in any special way;
they are just RRsets belonging to zone nodes.  Process CNAMEs when
preparing zone-based responses just like a normal authoritative DNS
server would.

11 months agoAdd debug logs for outgoing DNS messages
Michał Kępień [Fri, 30 May 2025 16:08:54 +0000 (18:08 +0200)] 
Add debug logs for outgoing DNS messages

Since AsyncDnsServer logs incoming DNS messages as seen on the wire, do
the same for the responses sent by the server.

11 months agofix: dev: use proper flexible arrays in rrl
Aydın Mercan [Fri, 30 May 2025 11:18:08 +0000 (11:18 +0000)] 
fix: dev: use proper flexible arrays in rrl

The single-element array hack can trip newer sanitizers or fortification levels.

Found with UBSAN triggering the RRL system test with meson.

Merge branch 'aydin/rrl-flex-array' into 'main'

See merge request isc-projects/bind9!10509

11 months agouse proper flexible arrays in rrl
Aydın Mercan [Thu, 29 May 2025 11:03:11 +0000 (11:03 +0000)] 
use proper flexible arrays in rrl

The single-element array hack can trip newer sanitizers or fortification
levels.

11 months agoadd attribute macro for counted_by
Aydın Mercan [Thu, 29 May 2025 10:50:25 +0000 (10:50 +0000)] 
add attribute macro for counted_by

Using C23 attributes for `counted_by` is broken with clang.

`__has_attribute` is used since `__has_c_attribute` only works with C23
attributes, (`gnu::counted_by`/`clang::counted_by`)

11 months agofix: dev: Allow keystore.c to compile on Solaris
Mark Andrews [Fri, 30 May 2025 06:34:57 +0000 (06:34 +0000)] 
fix: dev: Allow keystore.c to compile on Solaris

keystore.c failed to compile on Solaris because NAME_MAX was
undefined.  Include 'isc/dir.h' which defines NAME_MAX for platforms
that don't define it.

Closes #5327

Merge branch '5327-fix-solaris-keystore-build' into 'main'

See merge request isc-projects/bind9!10522

11 months agoAllow keystore.c to compile on Solaris
Mark Andrews [Fri, 30 May 2025 05:14:38 +0000 (15:14 +1000)] 
Allow keystore.c to compile on Solaris

keystore.c failed to compile on Solaris because NAME_MAX was
undefined.  Include 'isc/dir.h' which defines NAME_MAX for platforms
that don't define it.

11 months agochg: ci: Use AlmaLinux for FIPS testing in AWS
Michal Nowak [Thu, 29 May 2025 17:15:58 +0000 (17:15 +0000)] 
chg: ci: Use AlmaLinux for FIPS testing in AWS

Merge branch 'mnowak/alma-linux-with-fips' into 'main'

See merge request isc-projects/bind9!10433

11 months agoCheck system is FIPS-aware when BIND 9 FIPS mode is enabled
Michal Nowak [Wed, 30 Apr 2025 11:47:21 +0000 (13:47 +0200)] 
Check system is FIPS-aware when BIND 9 FIPS mode is enabled

11 months agoUse AlmaLinux for FIPS testing in AWS
Michal Nowak [Wed, 30 Apr 2025 11:46:57 +0000 (13:46 +0200)] 
Use AlmaLinux for FIPS testing in AWS

11 months agochg: ci: Replace Oracle Linux Docker images with AlmaLinux ones
Michal Nowak [Thu, 29 May 2025 15:11:10 +0000 (15:11 +0000)] 
chg: ci: Replace Oracle Linux Docker images with AlmaLinux ones

To be consistent with the replacing of Oracle Linux QCOW2 images with
AlmaLinux AWS AMIs, also replace Docker images.

Merge branch 'mnowak/replace-oracle-linux-with-almalinux' into 'main'

See merge request isc-projects/bind9!10434

11 months agoReplace Oracle Linux Docker images with AlmaLinux ones
Michal Nowak [Wed, 30 Apr 2025 15:34:13 +0000 (17:34 +0200)] 
Replace Oracle Linux Docker images with AlmaLinux ones

To be consistent with the replacing of Oracle Linux QCOW2 images with
AlmaLinux AWS AMIs, also replace Docker images.

11 months agofix: test: Fix intermittent kasp pytest failures
Nicki Křížek [Thu, 29 May 2025 12:34:15 +0000 (12:34 +0000)] 
fix: test: Fix intermittent kasp pytest failures

The `pytest` cases checks if a zone is signed by looking at the `NSEC` record at the apex. If that has an RRSIG record, it is considered signed. But `named` signs zones incrementally (in batches) and so the zone may still lack some signatures. In other words, the tests may consider a zone signed while in fact signing is not yet complete, then performs additional checks such as is a subdomain signed with the right key. If this check happens before the zone is actually fully
signed, the check will fail.

Fix this by using `check_dnssec_verify` instead of `check_is_zone_signed`. We were already doing this check, but we now move it up. This will transfer the zone and then run `dnssec-verify` on the response. If the zone is partially signed, the check will fail, and it will retry for up to ten times.

Closes #5303

Merge branch '5303-kasp-pytest-intermittent-test-failures' into 'main'

See merge request isc-projects/bind9!10445

11 months agoFix intermittent kasp pytest failures
Matthijs Mekking [Wed, 7 May 2025 15:17:27 +0000 (17:17 +0200)] 
Fix intermittent kasp pytest failures

The pytest cases checks if a zone is signed by looking at the NSEC
record at the apex. If that has an RRSIG record, it is considered
signed. But 'named' signs zones incrementally (in batches) and so
the zone may still lack some signatures. In other words, the tests
may consider a zone signed while in fact signing is not yet complete,
then performs additional checks such as is a subdomain signed with the
right key. If this check happens before the zone is actually fully
signed, the check will fail.

Fix this by using 'check_dnssec_verify' instead of
'check_is_zone_signed'. We were already doing this check, but we now
move it up. This will transfer the zone and then run 'dnssec-verify'
on the response. If the zone is partially signed, the check will fail,
and it will retry for up to ten times.

11 months agochg: test: Add utility module to import correct version of hypothesis
Nicki Křížek [Thu, 29 May 2025 09:04:04 +0000 (09:04 +0000)] 
chg: test: Add utility module to import correct version of hypothesis

On FIPS-enabled platforms, we need to ensure a minimal version of
hypothesis which no longer uses MD5. This doesn't need to be enforced
for other platforms.

Move the import magic to a utility module to avoid copy-pasting the
boilerplate code around.

Merge branch 'nicki/pytest-import-hypothesis' into 'main'

See merge request isc-projects/bind9!10442

11 months agoEnsure supported version of hypothesis is available
Nicki Křížek [Mon, 5 May 2025 16:00:07 +0000 (18:00 +0200)] 
Ensure supported version of hypothesis is available

On FIPS-enabled platforms, we need to ensure a minimal version of
hypothesis which no longer uses MD5. This doesn't need to be enforced
for other platforms.

Move the import magic to a utility module to avoid copy-pasting the
boilerplate code around.

11 months agofix: nil: silence tainted scalar in client.c
Mark Andrews [Thu, 29 May 2025 06:59:00 +0000 (06:59 +0000)] 
fix: nil: silence tainted scalar in client.c

Coverity detected that 'optlen' was not being checked in 'process_opt'.
This is actually already done when the OPT record was initially
parsed.  Add an INSIST to silence Coverity as is done in message.c.

Closes #5330

Merge branch '5330-tainted-scalar-in-client-c' into 'main'

See merge request isc-projects/bind9!10500

11 months agoSilence tainted scalar in client.c
Mark Andrews [Wed, 28 May 2025 23:42:08 +0000 (09:42 +1000)] 
Silence tainted scalar in client.c

Coverity detected that 'optlen' was not being checked in 'process_opt'.
This is actually already done when the OPT record was initially
parsed.  Add an INSIST to silence Coverity as is done in message.c.

11 months agofix: nil: Remove spurious zconf.h include
Ondřej Surý [Thu, 29 May 2025 04:35:08 +0000 (04:35 +0000)] 
fix: nil: Remove spurious zconf.h include

The #include <zconf.h> got spuriously included into isc_commandline
unit.  The #include <limits.h> needs to be used instead.

Merge branch 'ondrej/unify-handling-of-the-program-name-fix' into 'main'

See merge request isc-projects/bind9!10503

11 months agoRemove spurious zconf.h include
Ondřej Surý [Thu, 29 May 2025 04:30:59 +0000 (06:30 +0200)] 
Remove spurious zconf.h include

The #include <zconf.h> got spuriously included into isc_commandline
unit.  The #include <limits.h> needs to be used instead.

11 months agochg: dev: Unify handling of the program name in all the utilities
Ondřej Surý [Thu, 29 May 2025 04:24:26 +0000 (04:24 +0000)] 
chg: dev: Unify handling of the program name in all the utilities

There were several methods how we used 'argv[0]'.  Some programs had a
static value, some programs did use isc_file_progname(), some programs
stripped 'lt-' from the beginning of the name.  And some used argv[0]
directly.

Unify the handling and all the variables into isc_commandline_progname
that gets populated by the new isc_commandline_init(argc, argv) call.

Merge branch 'ondrej/unify-handling-of-the-program-name' into 'main'

See merge request isc-projects/bind9!10502

11 months agoUnify handling of the program name in all the utilities
Ondřej Surý [Wed, 28 May 2025 20:43:38 +0000 (22:43 +0200)] 
Unify handling of the program name in all the utilities

There were several methods how we used 'argv[0]'.  Some programs had a
static value, some programs did use isc_file_progname(), some programs
stripped 'lt-' from the beginning of the name.  And some used argv[0]
directly.

Unify the handling and all the variables into isc_commandline_progname
that gets populated by the new isc_commandline_init(argc, argv) call.

11 months agochg: dev: Set name for all the isc_mem context from isc_mem_create()
Ondřej Surý [Thu, 29 May 2025 03:50:44 +0000 (03:50 +0000)] 
chg: dev: Set name for all the isc_mem context from isc_mem_create()

Instead of giving the memory context names with an explicit call to
isc_mem_setname(), add the name to isc_mem_create() call to have all the
memory contexts an unconditional name.

Merge branch 'ondrej/ondrej-isc_mem_create-with-name' into 'main'

See merge request isc-projects/bind9!10426

11 months agoGive every memory pool a name
Ondřej Surý [Wed, 28 May 2025 21:00:24 +0000 (23:00 +0200)] 
Give every memory pool a name

Instead of giving the memory pools names with an explicit call to
isc_mempool_setname(), add the name to isc_mempool_create() call to have
all the memory pools an unconditional name.

11 months agoGive every memory context a name
Ondřej Surý [Fri, 21 Feb 2025 11:45:08 +0000 (12:45 +0100)] 
Give every memory context a name

Instead of giving the memory context names with an explicit call to
isc_mem_setname(), add the name to isc_mem_create() call to have all the
memory contexts an unconditional name.

11 months agofix: nil: simplify code around isc_mem_put() and isc_mem_free()
Evan Hunt [Thu, 29 May 2025 00:51:17 +0000 (00:51 +0000)] 
fix: nil: simplify code around isc_mem_put() and isc_mem_free()

it isn't necessary to set a pointer to NULL after calling
isc_mem_put() or isc_mem_free(), because those macros take
care of it automatically.

Merge branch 'each-memfree-null' into 'main'

See merge request isc-projects/bind9!10485

11 months agococcinelle patch for isc_mem_free()/isc_mem_put()
Colin Vidal [Wed, 28 May 2025 20:55:52 +0000 (22:55 +0200)] 
coccinelle patch for isc_mem_free()/isc_mem_put()

add a Coccinelle patch to ensure the pointer being used by
isc_mem_free() and isc_mem_put() is not explicitly set to NULL (those
mecros are taking care of it).

11 months agosimplify code around isc_mem_put() and isc_mem_free()
Evan Hunt [Wed, 28 May 2025 06:04:33 +0000 (23:04 -0700)] 
simplify code around isc_mem_put() and isc_mem_free()

it isn't necessary to set a pointer to NULL after calling
isc_mem_put() or isc_mem_free(), because those macros take
care of it automatically.

11 months agofix: dev: Set name for all the isc_mem contexts
Ondřej Surý [Wed, 28 May 2025 20:46:14 +0000 (20:46 +0000)] 
fix: dev: Set name for all the isc_mem contexts

Merge branch 'ondrej/fix-isc_mem_setname-usage' into 'main'

See merge request isc-projects/bind9!10425

11 months agoSet name for all the isc_mem context
Ondřej Surý [Fri, 25 Apr 2025 11:01:16 +0000 (13:01 +0200)] 
Set name for all the isc_mem context

The memory context for isc_managers and dst_api units had no name and
that was causing trouble with the statistics channel output.  Set the
name for the two memory context that were missing a proper name.

11 months agofix: usr: Fix zone deletion issue
Ondřej Surý [Wed, 28 May 2025 17:48:57 +0000 (17:48 +0000)] 
fix: usr: Fix zone deletion issue

A secondary zone could initiate a new zone transfer from the
primary server after it had been already deleted from the
secondary server, and before the internal garbage collection
was activated to clean it up completely. This has been fixed.

Closes #5291

Merge branch '5291-zone-delete-bug' into 'main'

See merge request isc-projects/bind9!10449

11 months agoPrepare a zone for shutting down when deleting it from a view
Aram Sargsyan [Mon, 12 May 2025 13:58:38 +0000 (13:58 +0000)] 
Prepare a zone for shutting down when deleting it from a view

After b171cacf4f0123ba96bef6eedfc92dfb608db6b7, a zone object can
remain in the memory for a while, until garbage collection is run.
Setting the DNS_ZONEFLG_EXITING flag should prevent the zone
maintenance function from running while it's in that state.
Otherwise, a secondary zone could initiate a zone transfer after
it had been deleted.

11 months agofix: usr: Fix a zone refresh bug
Ondřej Surý [Wed, 28 May 2025 16:51:33 +0000 (16:51 +0000)] 
fix: usr: Fix a zone refresh bug

A secondary zone could fail to further refresh with new
versions of the zone from a primary server if named was
reconfigured during the SOA request step of an ongoing
zone transfer. This has been fixed.

Closes #5307

Merge branch '5307-zone-refresh-stuck-after-reconfiguration-fix' into 'main'

See merge request isc-projects/bind9!10468

11 months agoEmit a ISC_R_CANCELED result instead of ISC_R_SHUTTINGDOWN
Aram Sargsyan [Wed, 21 May 2025 15:27:53 +0000 (15:27 +0000)] 
Emit a ISC_R_CANCELED result instead of ISC_R_SHUTTINGDOWN

When request manager shuts down, it also shuts down all its ongoing
requests. Currently it calls their callback functions with a
ISC_R_SHUTTINGDOWN result code for the request. Since a request
manager can shutdown not only during named shutdown but also during
named reconfiguration, instead of sending ISC_R_SHUTTINGDOWN result
code send a ISC_R_CANCELED code to avoid confusion and errors with
the expectation that a ISC_R_SHUTTINGDOWN result code can only be
received during actual shutdown of named.

All the callback functions which are passed to either the
dns_request_create() or the dns_request_createraw() functions have
been analyzed to confirm that they can process both the
ISC_R_SHUTTINGDOWN and ISC_R_CANCELED result codes. Changes were
made where it was necessary.

11 months agoTest named reconfiguration during zone transfer's SOA request
Aram Sargsyan [Wed, 21 May 2025 14:57:47 +0000 (14:57 +0000)] 
Test named reconfiguration during zone transfer's SOA request

This new test checks that named can correctly process an interrupted
SOA request during zone transfer, caused by reconfiguration.

Co-authored-by: Michał Kępień <michal@isc.org>
11 months agoAdd a debug log in zone.c:refresh_callback()
Aram Sargsyan [Wed, 21 May 2025 14:56:04 +0000 (14:56 +0000)] 
Add a debug log in zone.c:refresh_callback()

The new debug message logs the request result in the SOA request
callback function.

11 months agoFix a zone refresh bug in zone.c:refresh_callback()
Aram Sargsyan [Wed, 21 May 2025 14:44:50 +0000 (14:44 +0000)] 
Fix a zone refresh bug in zone.c:refresh_callback()

When the zone.c:refresh_callback() callback function is called during
a SOA request before a zone transfer, it can receive a
ISC_R_SHUTTINGDOWN result for the sent request when named is shutting
down, and in that case it just destroys the request and finishes the
ongoing transfer, without clearing the DNS_ZONEFLG_REFRESH flag of the
zone. This is alright when named is going to shutdown, but currently
the callback can get a ISC_R_SHUTTINGDOWN result also when named is
reconfigured during the ongoibg SOA request. In that case, leaving the
DNS_ZONEFLG_REFRESH flag set results in the zone never being able
to refresh again, because any new attempts will be caneled while
the flag is set. Clear the DNS_ZONEFLG_REFRESH flag on the 'exiting'
error path of the callback function.

11 months agofix: test: enable shell-based rndc system tests
Colin Vidal [Wed, 28 May 2025 15:44:21 +0000 (15:44 +0000)] 
fix: test: enable shell-based rndc system tests

Enable existing rndc system tests (the python test function calling the
shell file was missing). Also update the extra artifacts list to remove
one generated file which was left behind.

Merge branch 'colin/rndc-tests' into 'main'

See merge request isc-projects/bind9!10489

11 months agoenable shell-based rndc system tests
Colin Vidal [Wed, 28 May 2025 13:15:56 +0000 (15:15 +0200)] 
enable shell-based rndc system tests

Enable existing rndc system tests (the python test function calling the
shell file was missing). Also update the extra artifacts list to remove
one generated file which was left behind.

11 months agochg: doc: Update security issue reporting procedure
Petr Špaček [Wed, 28 May 2025 14:51:00 +0000 (14:51 +0000)] 
chg: doc: Update security issue reporting procedure

Merge branch 'pspacek/update-reporting-procedure-sec-md' into 'main'

See merge request isc-projects/bind9!10487

11 months agoUpdate security issue reporting procedure
Petr Špaček [Wed, 28 May 2025 10:53:48 +0000 (12:53 +0200)] 
Update security issue reporting procedure

We have a new template for people to use. It saves lots of back and
forth if people use it.

11 months agochg: test: DNSTAP test cleanup
Petr Špaček [Wed, 28 May 2025 11:16:17 +0000 (11:16 +0000)] 
chg: test: DNSTAP test cleanup

Merge branch 'pspacek/dnstap-test-cleanup' into 'main'

See merge request isc-projects/bind9!10478

11 months agoUse Pytest mark to guard dnstap features
Petr Špaček [Fri, 23 May 2025 15:37:19 +0000 (17:37 +0200)] 
Use Pytest mark to guard dnstap features

11 months agoFix DNSTAP feature detection for pytest
Petr Špaček [Fri, 23 May 2025 15:36:54 +0000 (17:36 +0200)] 
Fix DNSTAP feature detection for pytest

11 months agoPort dnstap test to use isctest utilities
Petr Špaček [Fri, 23 May 2025 15:27:02 +0000 (17:27 +0200)] 
Port dnstap test to use isctest utilities

11 months agofix: dev: Add more iteration macros
Evan Hunt [Wed, 28 May 2025 04:40:40 +0000 (04:40 +0000)] 
fix: dev: Add more iteration macros

Add more macros for iteration: `DNS_RDATASET_FOREACH`, `CFG_LIST_FOREACH`, `DNS_DBITERATOR_FOREACH`, and `DNS_RDATASETITER_FOREACH`.

Merge branch 'each-rdataset-foreach' into 'main'

See merge request isc-projects/bind9!10350

11 months agoadd DNS_DBITERATOR_FOREACH and DNS_RDATASETITER_FOREACH
Evan Hunt [Thu, 27 Mar 2025 05:49:03 +0000 (22:49 -0700)] 
add DNS_DBITERATOR_FOREACH and DNS_RDATASETITER_FOREACH

when iterating databases, use DNS_DBITERATOR_FOREACH and
DNS_DNSRDATASETITER_FOREACH macros where possible.

11 months agoadd CFG_LIST_FOREACH macro
Evan Hunt [Thu, 27 Mar 2025 01:54:05 +0000 (18:54 -0700)] 
add CFG_LIST_FOREACH macro

replace the pattern `for (elt = cfg_list_first(x); elt != NULL;
elt = cfg_list_next(elt))` with a new `CFG_LIST_FOREACH` macro.

11 months agoadd DNS_RDATASET_FOREACH macro
Evan Hunt [Sat, 22 Mar 2025 06:32:27 +0000 (23:32 -0700)] 
add DNS_RDATASET_FOREACH macro

replace the pattern `for (result = dns_rdataset_first(x); result ==
ISC_R_SUCCES; result = dns_rdataset_next(x)` with a new
`DNS_RDATASET_FOREACH` macro throughout BIND.

11 months agoimport_rdataset() can't fail
Evan Hunt [Sat, 22 Mar 2025 06:48:01 +0000 (23:48 -0700)] 
import_rdataset() can't fail

the import_rdataset() function can't return any value other
than ISC_R_SUCCESS, so it's been changed to void and its callers
don't rely on its return value any longer.

11 months agofix: nil: correct the DbC assertions in message.c
Evan Hunt [Tue, 27 May 2025 23:11:27 +0000 (23:11 +0000)] 
fix: nil: correct the DbC assertions in message.c

the comments for some calls in the dns_message API specified
requirements which were not actually enforced in the functions.
in most cases, this has now been corrected by adding the missing
REQUIREs. in one case, the comment was incorrect and has been
revised.

Merge branch 'each-fix-message-requires' into 'main'

See merge request isc-projects/bind9!10466

11 months agocorrect the DbC assertions in message.c
Evan Hunt [Thu, 15 May 2025 17:30:29 +0000 (10:30 -0700)] 
correct the DbC assertions in message.c

the comments for some calls in the dns_message API specified
requirements which were not actually enforced in the functions.

in most cases, this has now been corrected by adding the missing
REQUIREs. in one case, the comment was incorrect and has been
revised.

11 months agofix: dev: Make all ISC_LIST_FOREACH calls safe
Evan Hunt [Tue, 27 May 2025 23:08:35 +0000 (23:08 +0000)] 
fix: dev: Make all ISC_LIST_FOREACH calls safe

Previously, `ISC_LIST_FOREACH` and `ISC_LIST_FOREACH_SAFE` were
two separate macros, with the _SAFE version allowing entries
to be unlinked during the loop. `ISC_LIST_FOREACH` is now also
safe, and the separate `_SAFE` macro has been removed.

Similarly, the `ISC_LIST_FOREACH_REV` macro is now safe, and
`ISC_LIST_FOREACH_REV_SAFE` has also been removed.

Merge branch 'each-isc-list-foreach' into 'main'

See merge request isc-projects/bind9!10479

11 months agomake all ISC_LIST_FOREACH calls safe
Evan Hunt [Fri, 23 May 2025 20:02:22 +0000 (13:02 -0700)] 
make all ISC_LIST_FOREACH calls safe

previously, ISC_LIST_FOREACH and ISC_LIST_FOREACH_SAFE were
two separate macros, with the _SAFE version allowing entries
to be unlinked during the loop. ISC_LIST_FOREACH is now also
safe, and the separate _SAFE macro has been removed.

similarly, the ISC_LIST_FOREACH_REV macro is now safe, and
ISC_LIST_FOREACH_REV_SAFE has also been removed.

11 months ago[CVE-2025-40775] sec: test: Add a bad TSIG algorithm hypothesis python test
Nicki Křížek [Fri, 23 May 2025 11:30:58 +0000 (11:30 +0000)] 
[CVE-2025-40775] sec: test: Add a bad TSIG algorithm hypothesis python test

Closes #5300

Merge branch '5300-tsig-unknown-alg-test' into 'main'

See merge request isc-projects/bind9!10475

11 months agoAdd a bad TSIG algorithm hypothesis python test
Nicki Křížek [Wed, 30 Apr 2025 04:06:23 +0000 (21:06 -0700)] 
Add a bad TSIG algorithm hypothesis python test

Co-authored-by: Petr Špaček <pspacek@isc.org>
11 months agochg: dev: Adaptive memory allocation strategy for qp-tries
Alessio Podda [Thu, 22 May 2025 22:53:48 +0000 (22:53 +0000)] 
chg: dev: Adaptive memory allocation strategy for qp-tries

qp-tries allocate their nodes (twigs) in chunks to reduce allocator
pressure and improve memory locality. The choice of chunk size presents
a tradeoff: larger chunks benefit qp-tries with many values (as seen
in large zones and resolvers) but waste memory in smaller use cases.

Previously, our fixed chunk size of 2^10 twigs meant that even an
empty qp-trie would consume 12KB of memory, while reducing this size
would negatively impact resolver performance.

This commit implements an adaptive chunking strategy that:
 - Tracks the size of the most recently allocated chunk.
 - Doubles the chunk size for each new allocation until reaching a
   predefined maximum.

This approach effectively balances memory efficiency for small tries
while maintaining the performance benefits of larger chunk sizes for
bigger data structures.

Merge branch 'alessio/qp-small-alloc' into 'main'

See merge request isc-projects/bind9!10245

11 months agoTune min and max chunk size
Alessio Podda [Mon, 5 May 2025 09:43:44 +0000 (11:43 +0200)] 
Tune min and max chunk size

Before implementing adaptive chunk sizing, it was necessary to ensure
that a chunk could hold up to 48 twigs, but the new logic will size-up
new chunks to ensure that the current allocation can succeed.

We exploit the new logic in two ways:
 - We make the minimum chunk size smaller than the old limit of 2^6,
   reducing memory consumption.
 - We make the maximum chunk size larger, as it has been observed that
   it improves resolver performance.

11 months agoAdaptive memory allocation strategy for qp-tries
alessio [Sun, 9 Mar 2025 08:13:16 +0000 (09:13 +0100)] 
Adaptive memory allocation strategy for qp-tries

qp-tries allocate their nodes (twigs) in chunks to reduce allocator
pressure and improve memory locality. The choice of chunk size presents
a tradeoff: larger chunks benefit qp-tries with many values (as seen
in large zones and resolvers) but waste memory in smaller use cases.

Previously, our fixed chunk size of 2^10 twigs meant that even an
empty qp-trie would consume 12KB of memory, while reducing this size
would negatively impact resolver performance.

This commit implements an adaptive chunking strategy that:
 - Tracks the size of the most recently allocated chunk.
 - Doubles the chunk size for each new allocation until reaching a
   predefined maximum.

This approach effectively balances memory efficiency for small tries
while maintaining the performance benefits of larger chunk sizes for
bigger data structures.

This commit also splits the callback freeing qpmultis into two
phases, one that frees the underlying qptree, and one that reclaims
the qpmulti memory. In order to prevent races between the qpmulti
destructor and chunk garbage collection jobs, the second phase is
protected by reference counting.

11 months agofix: doc: Update CVE checklist
Michał Kępień [Thu, 22 May 2025 12:25:24 +0000 (12:25 +0000)] 
fix: doc: Update CVE checklist

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

See merge request isc-projects/bind9!10473

11 months agoFix duplicate Markdown reference
Michał Kępień [Thu, 22 May 2025 12:21:04 +0000 (14:21 +0200)] 
Fix duplicate Markdown reference

Commit 7e429463f527ab80d17ddf8c6c3418de7b5fc11e added a second
definition of the "step_asn_send" reference.  Make the relevant links
distinct.

11 months agoSend pre-announcement emails for all ISC projects
Michał Kępień [Thu, 22 May 2025 12:21:04 +0000 (14:21 +0200)] 
Send pre-announcement emails for all ISC projects

There is no reason for the public pre-announcements of security issues
to only be sent for BIND 9.  Remove the "BIND 9 only" annotation from
the relevant checklist step as it caused confusion in practice.

11 months agoUpdate CVE checklist template
Suzanne Goldlust [Wed, 21 May 2025 14:37:34 +0000 (14:37 +0000)] 
Update CVE checklist template

Clarify a confusing step in the CVE checklist.

11 months agoMerge tag 'v9.21.8'
Michał Kępień [Wed, 21 May 2025 19:23:09 +0000 (21:23 +0200)] 
Merge tag 'v9.21.8'

11 months agorem: dev: Clean up the DST cryptographic API
Ondřej Surý [Tue, 20 May 2025 23:39:34 +0000 (23:39 +0000)] 
rem: dev: Clean up the DST cryptographic API

The DST API has been cleaned up, duplicate functions has been squashed
into single call (verify and verify2 functions), and couple of unused
functions have been completely removed (createctx2, computesecret,
paramcompare, and cleanup).

Merge branch 'ondrej/dst_api-cleanup' into 'main'

See merge request isc-projects/bind9!10345

11 months agoDeprecate max-rsa-exponent-size, always use 4096 instead
Ondřej Surý [Mon, 28 Apr 2025 15:22:18 +0000 (17:22 +0200)] 
Deprecate max-rsa-exponent-size, always use 4096 instead

The `max-rsa-exponent-size` could limit the exponents of the RSA
public keys during the DNSSEC verification.  Instead of providing
a cryptic (not cryptographic) knob, hardcode the max exponent to
be 4096 (the theoretical maximum for DNSSEC).

11 months agoCleanup the DST cryptographic API
Ondřej Surý [Sun, 21 Jul 2024 09:30:09 +0000 (11:30 +0200)] 
Cleanup the DST cryptographic API

The DST API has been cleaned up, duplicate functions has been squashed
into single call (verify and verify2 functions), and couple of unused
functions have been completely removed (createctx2, computesecret,
paramcompare, and cleanup).

12 months agonew: usr: Implement a new 'notify-defer' configuration option
Arаm Sаrgsyаn [Thu, 15 May 2025 13:26:44 +0000 (13:26 +0000)] 
new: usr: Implement a new 'notify-defer' configuration option

This new option sets a delay (in seconds) to wait before sending
a set of NOTIFY messages for a zone. Whenever a NOTIFY message is
ready to be sent, sending will be deferred for this duration. This
option is not to be confused with the :any:`notify-delay` option.
The default is 0 seconds.

Closes #5259

Merge branch '5259-implement-zone-notify-defer' into 'main'

See merge request isc-projects/bind9!10419

12 months agoImplement a new 'notify-defer' configuration option
Aram Sargsyan [Tue, 22 Apr 2025 13:33:48 +0000 (13:33 +0000)] 
Implement a new 'notify-defer' configuration option

This new option sets the delay, in seconds, to wait before sending
a set of NOTIFY messages for a zone. Whenever a NOTIFY message is
ready to be sent, sending will be deferred for this duration.

12 months agoUpdate the dns_zone_setnotifydelay() function's documentation
Aram Sargsyan [Thu, 17 Apr 2025 14:38:44 +0000 (14:38 +0000)] 
Update the dns_zone_setnotifydelay() function's documentation

Add a note that the delay is in seconds.

12 months agoDelete the unused dns_zone_getnotifydelete() function
Aram Sargsyan [Thu, 17 Apr 2025 14:37:28 +0000 (14:37 +0000)] 
Delete the unused dns_zone_getnotifydelete() function

The function is unused, delete it.

12 months agofix: test: Fix catz system test errors
Arаm Sаrgsyаn [Thu, 15 May 2025 12:19:46 +0000 (12:19 +0000)] 
fix: test: Fix catz system test errors

Merge branch 'aram/catz-system-test-errors-fix' into 'main'

See merge request isc-projects/bind9!10444

12 months agoFix more catz system test errors
Aram Sargsyan [Wed, 7 May 2025 13:34:04 +0000 (13:34 +0000)] 
Fix more catz system test errors

A quick grep check discovered a couple of more errors similar to the
one fixed in the previous commit. Fix them too.

12 months agoFix catz system test error
Aram Sargsyan [Wed, 7 May 2025 13:32:15 +0000 (13:32 +0000)] 
Fix catz system test error

The '|| ret=1' is omitted from the check. This was introduced in the
b171cacf4f0123ba96bef6eedfc92dfb608db6b7 commit. Fix the error.

12 months agochg: test: Mark test_idle_timeout as flaky on FreeBSD 13
Michał Kępień [Wed, 14 May 2025 17:17:11 +0000 (17:17 +0000)] 
chg: test: Mark test_idle_timeout as flaky on FreeBSD 13

The test_idle_timeout check in the "timeouts" system test has been
failing often on FreeBSD 13 AWS hosts.  Adding timestamped debug logging
shows that the time.sleep() calls used in that check are returning
significantly later than asked to on that platform (e.g. after 4 seconds
when just 1 second is requested), breaking the test's timing assumptions
and triggering false positives.  These failures are not an indication of
a bug in named and have not been observed on any other platform.  Mark
the problematic check as flaky, but only on FreeBSD 13, so that other
failure modes are caught appropriately.

Merge branch 'michal/mark-test_idle_timeout-as-flaky-on-freebsd-13' into 'main'

See merge request isc-projects/bind9!10459

12 months agoMark test_idle_timeout as flaky on FreeBSD 13
Michał Kępień [Wed, 14 May 2025 07:50:33 +0000 (09:50 +0200)] 
Mark test_idle_timeout as flaky on FreeBSD 13

The test_idle_timeout check in the "timeouts" system test has been
failing often on FreeBSD 13 AWS hosts.  Adding timestamped debug logging
shows that the time.sleep() calls used in that check are returning
significantly later than asked to on that platform (e.g. after 4 seconds
when just 1 second is requested), breaking the test's timing assumptions
and triggering false positives.  These failures are not an indication of
a bug in named and have not been observed on any other platform.  Mark
the problematic check as flaky, but only on FreeBSD 13, so that other
failure modes are caught appropriately.