Commit graph

43983 commits

Author SHA1 Message Date
Andoni Duarte Pintado
3d508bf12b Add job to assign issues and merge requests to version milestones
After a release is signed (the "sign" job), the "assign-milestones" job
will assign issues and merge requests to the corresponding version
milestones.

(cherry picked from commit ad95cdb9e2)
2026-04-17 09:42:46 +00:00
Andoni Duarte
33f90767c7 [9.20] new: ci: Extend the prepare-release-announcement job to post release links
The prepare-release-announcement job is now extended so that after
creating the announcement MR, it posts a message with links to the newly
released versions to Mattermost.

Backport of MR !11860

Merge branch 'backport-andoni/extend-prepare-release-announcement-with-urls-message-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11869
2026-04-17 08:53:49 +00:00
Andoni Duarte Pintado
bd7a39fb64 Extend the prepare-release-announcement job post release links
The prepare-release-announcement job is now extended so that after
creating the announcement MR, it posts a message with links to the newly
released versions to Mattermost.

(cherry picked from commit a486a38a7f)
2026-04-17 08:52:01 +00:00
Ondřej Surý
3a97d3c583 [9.20] new: doc: Document opt-in 🤖 marker for agent-authored issues and MRs
Add short notes in CONTRIBUTING.md telling automated agents to append
🤖 to the title of issues and merge requests so they can be routed
through the streamlined agent triage/merge process.

Backport of MR !11861

Merge branch 'backport-ondrej/agent-contributing-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11862
2026-04-16 19:10:39 +02:00
Ondřej Surý
f9ccbd95d7
Document opt-in 🤖 marker for agent-authored issues and MRs
Add short notes in CONTRIBUTING.md telling automated agents to append
🤖 to the title of issues and merge requests so they can be routed
through the streamlined agent triage/merge process.

(cherry picked from commit 2ec8d3ce7c)
2026-04-16 19:04:44 +02:00
Ondřej Surý
30b6c25c8b
Change the CONTRIBUTING to use Developer's Certificate of Origin 1.1
(cherry picked from commit 845eb2ebbc)
2026-04-16 19:04:36 +02:00
Štěpán Balážik
18e0fe880c [9.20] chg: ci: Test development version of libuv in CI
Recently, a broken version of libuv was released breaking BIND on
several platforms. The offending [commit](https://github.com/libuv/libuv/issues/5030) was on the development branch
for months, but we didn't notice.

In nightly pipelines, build the current 'main' (actually 'v1.x') branch
of libuv and run the unit and system tests against it.

Backport of MR !11647

Merge branch 'backport-stepan/prelease-testing-for-libuv-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11842
2026-04-15 14:49:04 +00:00
Štěpán Balážik
df1bde488c Test development version of libuv in CI
Recently, a broken version of libuv was released breaking BIND on
several platforms. The offending commit [1] was on the development
branch for months, but we didn't notice.

In nightly pipelines, build the current 'main' (actually 'v1.x') branch
of libuv and run the unit and system tests against it.

[1]: https://github.com/libuv/libuv/issues/5030

(cherry picked from commit 23d11de2b4)
2026-04-15 13:42:20 +00:00
Mark Andrews
35d94fffb0 [9.20] fix: usr: Remove unnecessary dns_name_free call
When processing a catalog zone member's primaries definition and
there is a TXT record containing an invalid name TSIG key name,
dns_name_free was incorrectly called triggering an assertion.
This has been fixed.

Closes #5858

Backport of MR !11832

Merge branch 'backport-5858-remove-unnecessary-dns-name-free-call-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11848
2026-04-15 13:53:52 +10:00
Mark Andrews
5daf7102a5 Checking invalid TSIG key name in a catalog zone
(cherry picked from commit 213e59ccf5)
2026-04-15 12:30:22 +10:00
Mark Andrews
35a5e29800 Remove unnecessary dns_name_free call
When processing a catalog zone member's primaries definition and
there is a TXT record containing an invalid name TSIG key name,
dns_name_free was incorrectly called triggering an assertion.
This has been fixed.

(cherry picked from commit 9f411c93c4)
2026-04-15 12:30:22 +10:00
Mark Andrews
de4a9b4fa6 [9.20] fix: usr: Fix zone verification of NSEC3 signed zones
Previously, when computing the compressed bitmap during verification of an NSEC3-signed zone, an undersized buffer was used that resulted in an out-of-bounds write if there were too many active windows in the bitmap. This impacted mirror zones which are NSEC3-signed, `dnssec-signzone` and `dnssec-verifyzone`. This has been fixed.

Closes #5834

Backport of MR !11804

Merge branch 'backport-5834-fix-cbm-size-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11833
2026-04-10 18:08:15 +10:00
Mark Andrews
c9671ebfe6 Checking maximal sized compresses bit map works
Add records that will be at end of each compressed bitmap less 1
of the NSEC3 record. Zone verification should still work.

(cherry picked from commit e9a58de251)
2026-04-10 17:21:42 +10:00
Mark Andrews
6d38c398c8 Use the correct maximal compressed bit map buffer size
There are up to 256 windows in a NSEC/NSEC3 compressed bit
map of 32 + 2 octets each.

(cherry picked from commit e43e4bd20a)
2026-04-10 06:23:53 +00:00
Michal Nowak
5f6c1d9113 [9.20] new: test: System test requires the h2 module
Backport of MR !11829

Merge branch 'backport-mnowak/require-h2-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11830
2026-04-09 17:55:47 +02:00
Michal Nowak
7d281668d0 System test requires the h2 module
(cherry picked from commit 8b4b1aa6d9)
2026-04-09 15:39:12 +00:00
Michał Kępień
b391abcb2b [9.20] fix: ci: Purge distros token in a separate CI job
The "publish" job runs on a dedicated, locked-down runner that lacks the
Python modules necessary to execute the manage_distros_token.py script.
Instead of deleting the token within the "publish" job, purge it in a
separate job that automatically runs on the "base" image after the
"publish" job succeeds.  Define "rules" for the new job so that the
token is only deleted for security releases, as it should have been
initially.

Backport of MR !11817

Merge branch 'backport-michal/purge-distros-token-in-a-separate-ci-job-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11826
2026-04-09 13:48:45 +02:00
Michał Kępień
3b92df2b76 Purge distros token in a separate CI job
The "publish" job runs on a dedicated, locked-down runner that lacks the
Python modules necessary to execute the manage_distros_token.py script.
Instead of deleting the token within the "publish" job, purge it in a
separate job that automatically runs on the "base" image after the
"publish" job succeeds.  Define "rules" for the new job so that the
token is only deleted for security releases, as it should have been
initially.

(cherry picked from commit 36411e7c84)
2026-04-09 11:25:38 +00:00
Michal Nowak
08709d5f66 [9.20] chg: test: Bump ns6 reconfigure timeout to 30 seconds
Rarely, RNDC fails to reconfigure zones on FreeBSD in the default 10
seconds.

Backport of MR !11820

Merge branch 'backport-mnowak/xfer-bump-reconfigure-timeout-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11821
2026-04-09 06:46:19 +02:00
Michal Nowak
c52838b835 Bump ns6 reconfigure timeout to 30 seconds
Rarely, RNDC fails to reconfigure zones on FreeBSD in the default 10
seconds.

(cherry picked from commit 723c199daa)
2026-04-09 06:46:06 +02:00
Mark Andrews
dcd040dea9 [9.20] fix: doc: nsupdate does not handle zero length RDATA well
Nsupdate does not distinguish between a non-existing RDATA field
and an empty RDATA field when determining which action is desired
when the RDATA field is empty. This only affects a few data types,
like APL, which allow an empty RDATA field.  Document a workaround
of using the '\# 0' form for entering these specific records. e.g.

    # delete the APL RRset
    update delete IN APL
    # delete the APL record with a zero length rdata
    update delete IN APL \# 0

Closes #5835

Backport of MR !11775

Merge branch 'backport-5835-nsupdate-doc-zero-length-rdata-how-to-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11823
2026-04-09 12:07:26 +10:00
Mark Andrews
bc9c2539e3 nsupdate does not handle zero length RDATA well
Nsupdate does not distinguish between a non-existing RDATA field
and an empty RDATA field when determining which action is desired
when the RDATA field is empty. This only affects a few data types,
like APL, which allow an empty RDATA field.  Document a workaround
of using the '\# 0' form for entering these specific records. e.g.

    # delete the APL RRset
    update delete IN APL
    # delete the APL record with a zero length rdata
    update delete IN APL \# 0

(cherry picked from commit f45762a5be)
2026-04-09 00:34:15 +00:00
Michal Nowak
dbfc344e63 fix: test: Fix strstr const inheritance issue in test code
The const property was discarded by a strstr call in test-data.c.
This has been fixed.

Closes #5861

Merge branch '5861-fix-const-inheritance-issue-in-test' into 'bind-9.20'

See merge request isc-projects/bind9!11815
2026-04-08 11:40:42 +02:00
Mark Andrews
5ccfb936ca Fix strstr const inheritance issue in test code
A strstr call discarded the const attribute.  Rework the code
preserving the const attribute.
2026-04-08 08:57:05 +10:00
Mark Andrews
60288be50f [9.20] fix: test: Check exit status of dig and nsupdate in nsupdate system test
Add missing failure checks to six dig and nsupdate invocations in nsupdate system test so that command failures are properly caught instead of silently ignored.

Backport of MR !11811

Merge branch 'backport-marka/check-return-codes-in-nsupdate-test-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11813
2026-04-08 07:58:22 +10:00
Mark Andrews
6982d10993 Check exit status of dig and nsupdate in nsupdate system test
Add missing `|| ret=1` to six dig and nsupdate invocations in
tests.sh so that command failures are properly caught instead
of silently ignored.

(cherry picked from commit 9ba03a1848)
2026-04-07 17:32:53 +00:00
Michal Nowak
9cef150dee [9.20] new: doc: Use ubuntu-24.04 for RTD, bump Python version
Backport of MR !11806

Merge branch 'backport-mnowak/rtd-image-bump-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11809
2026-04-07 17:32:31 +02:00
Michal Nowak
a83db4cc20 Use ubuntu-24.04 for RTD, bump Python version
(cherry picked from commit 3a8e2f7427)
2026-04-07 14:12:20 +00:00
Matthijs Mekking
819df0d19e [9.20] chg: dev: Fix off by one error in dnssec-ksr sign
If the inception time of the signature is exactly equal to the inactive time of the key, add the signature.

Backport of MR !11791

Merge branch 'backport-matthijs-skr-off-by-one-bug-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11795
2026-04-07 08:33:13 +00:00
Matthijs Mekking
eed010c3a5 Also fix off by one error in system test
The system test was also subject to the same off by one bug that also
existed in the code. That is: if the inception time of the signature
is exactly equal to the inactive time of the key, we still have to
expect the signature.

(cherry picked from commit d9b6036e0f)
2026-04-07 08:32:58 +00:00
Matthijs Mekking
14be941e78 Add fast test case
This specific test case triggered a bug where the SKR included bundles
with unsigned DNSKEY RRsets (signatures where omitted because the
inception time was equal to the inactive time of the key).

(cherry picked from commit 784a441e2d)
2026-04-07 08:32:58 +00:00
Matthijs Mekking
ad45cdd383 Fix off by one error in dnssec-ksr sign
If the inception time of the signature is exactly equal to the
inactive time of the key, still include the signature. Otherwise there
may be corner cases where signatures are omitted erroneously.

(cherry picked from commit bc6dad585d)
2026-04-07 08:32:58 +00:00
Matthijs Mekking
6d89bfdf03 [9.20] chg: dev: Revert isdelegation() to return boolean value again
Closes #5838

Backport of MR !11792

Merge branch 'backport-5838-cid-645252-control-flow-issues-deadcode-in-validator-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11802
2026-04-07 08:23:57 +00:00
Matthijs Mekking
f58554d05a Rename isdelegation() to is_insecure_referral()
The name 'isdelegation()' was confusing. This function is not checking
whether this message is a delegation, but whether the denial of
existence proofs in this message is a proof of a referral to an
unsigned zone.

The name 'is_unsecure_referral()' is more appropriate.

(cherry picked from commit e0f09bb374)
2026-04-07 09:44:30 +02:00
Matthijs Mekking
bd852b1f97 Revert isdelegation() to return boolean value again
The isdelegation() was changed to return an isc_result_t because the
idea was to have a separate return value DNS_R_NSEC3ITERRANGE to signal
to the caller we could not verify the proof because of too many
iterations in the NSEC3 record, or perhaps ISC_R_UNEXPECTED for a more
generic cause that verification was not done.

But this would make error handling more fragile and all we care about
is whether we can reliably say the NS bit was not set.

If we can not reliably say so, we have to treat it as an insecure
referrral.

Since the answer is either yes or no, we can revert back to returning
a boolean value.

(cherry picked from commit 3ac1bb1c39)
2026-04-07 09:44:19 +02:00
Arаm Sаrgsyаn
a48b287d9f [9.20] fix: usr: Fix a possible race condition during zone transfers
The :iscman:`named` process could terminate unexpectedly
when processing an IXFR message during a zone transfer.
This has been fixed.

Closes #5767

Backport of MR !11781

Merge branch 'backport-5767-use-after-free-xfrin_reset-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11799
2026-04-03 13:42:15 +00:00
Nicki Křížek
dcc78517be Rewrite xfer/ans11/ans.py to use AsyncDnsServer
Replace the hand-rolled threaded socket server with the standard
AsyncDnsServer framework used by other ans.py servers in the test suite.

The DNS wire-format message builders (IXFR diff, AXFR, SOA, SERVFAIL)
are retained unchanged since they produce carefully crafted messages
needed to trigger the IXFR->AXFR race condition. The server
infrastructure is replaced:

- Manual TCP/UDP socket management and threading replaced by
  AsyncDnsServer, which handles both protocols, pidfile lifecycle,
  and signal handling.
- Query parsing replaced by the framework's dns.message-based parser;
  query dispatch moved into IxfrRaceHandler.get_responses().
- The axfr_done_event threading.Event replaced by a boolean instance
  variable on IxfrRaceHandler, safe within the single asyncio event
  loop.
- For IXFR over TCP, the handler yields two BytesResponseSend actions
  (msg1 then msg2) so the framework sends both with TCP length prefixes,
  preserving the race-triggering sequence.
- For IXFR over UDP, the TC flag is set on the response to force TCP
  retry.
- Unused encode_name_compressed() and parse_dns_query() removed.

Also fix a timing issue that might result in the initial transfer not
being done by the time the test is executed -- since ns11 is started
after ns6. Ensure the initial transfer has happened before running the
ixfr_race test.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit 187e571f4d)
2026-04-03 12:05:44 +00:00
Aram Sargsyan
913f290e75 Fix a race condition in xfrin_recv_done() when calling xfrin_reset()
When the xfrin_recv_done() function decides to retry the transfer
using AXFR because of a previous error, it calls the xfrin_reset()
function which calls dns_db_closeversion() on 'xfr->ver'. The problem
is that the ixfr processing of a previous message could be still
in process in a worker thread, which then can use freed 'xfr->ver'.

If there is an ongoing worker thread delay the AXFR retry until after
the worker thread has finished its work.

(cherry picked from commit 141ff7bfa7)
2026-04-03 12:05:44 +00:00
Aram Sargsyan
d1537583a7 Add a test to check for IXFR->AXFR race-condition
The test initiates a zone transfer with IXFR, which produces
a big amount of differences and then generates an error. The
secondary should be able to gracefully shutdown the ongoing
IXFR transfer and retry with AXFR without race conditions
between them.

This test checks for an issue (GL#5767) but since a race
condition is usually time-sensitive it might require several
attempts before it reproduces the issue.

(cherry picked from commit 5c248e7d1a)
2026-04-03 12:05:44 +00:00
Ondřej Surý
c830233fb7 [9.20] new: test: Add regression test for NSEC proof after unsigned-to-signed IXFR
Test that a secondary receiving an IXFR transitioning a zone from
unsigned to NSEC-signed returns the correct covering NSEC record
for empty non-terminal names.

Backport of MR !11786

Merge branch 'backport-ondrej/fix-nsec-ixfr-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11797
2026-04-03 07:16:29 +02:00
Ondřej Surý
1be03f3a10 Add regression test for NSEC proof after unsigned-to-signed IXFR
Test that a secondary receiving an IXFR transitioning a zone from
unsigned to NSEC-signed returns the correct covering NSEC record
for empty non-terminal names.

Add isctest.query.wait_for_serial() shared helper for waiting until
a server has a specific SOA serial.

(cherry picked from commit 8a4990d6ff)
2026-04-03 04:34:20 +00:00
Evan Hunt
097c14da45 [9.20] fix: usr: Use the zone file's basename as origin in DNSSEC tools
In `dnssec-signzone` and `dnssec-verify`, when the zone origin is not specified using the `-o` parameter, the default behavior is to try to sign using the zone's file name as the origin. So, for example, `dnssec-signzone -S example.com` will work, so long as the file name matches the zone name.

This now also works if the zone is in a different directory. For example, `dnssec-signzone -S zones/example.com` will set the origin value to `example.com`.

Closes #5678

Backport of MR !11360

Merge branch 'backport-5678-signzone-basename-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11784
2026-04-02 06:48:14 +00:00
Matthijs Mekking
52abfa3e07 Test dnssec tools using zone file basename as origin
Add test cases where dnssec-signzone and dnssec-verify use the
zone file's basename as the origin when '-o' is omitted.

(cherry picked from commit 1251ae896c)
2026-04-01 23:08:14 -07:00
Evan Hunt
96da856018 use the zone file's basename as origin in dnssec tools
In dnssec-signzone and dnssec-verify, if the zone origin is not
specified using the `-o` parameter, the default behavior is to try
to use the zone's file name as the origin. So, for example,
`dnssec-signzone -S example.com` or 'dnssec-verify example.com'
will work, so long as the file name matches the zone name.

This now also works if the zone is in a different directory.
For example, `dnssec-signzone -S zones/example.com` or
'dnssec-verify zones/example.com' will set the origin value
to `example.com`.

(cherry picked from commit b8cb65db93)
2026-04-01 20:48:09 +00:00
Michal Nowak
b370aacc2d Merge tag 'v9.20.22' into bind-9.20 2026-04-01 14:55:45 +00:00
Michal Nowak
e6099075cd
Update BIND version for release 2026-03-31 18:31:08 +02:00
Michal Nowak
be696478c7 new: doc: Prepare documentation for BIND 9.20.22
This has been reverted.

Merge branch 'mnowak/prepare-documentation-for-bind-9.20.22' into 'v9.20.22-release'

See merge request isc-private/bind9!972
2026-03-31 18:24:44 +02:00
Michal Nowak
f497fdcbb9
Remove changelog for GL #5747 2026-03-31 18:05:04 +02:00
Nicki Křížek
b04dcddf6c [9.20] chg: nil: License test data files in REUSE.toml
In order to avoid the need to repeat the license header in named.conf
files and zone files, add the paths to REUSE.toml to assign the license.

Backport of MR !11766

Merge branch 'backport-nicki/reuse-cover-configs-and-zones-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!11773
2026-03-31 17:57:42 +02:00
Michal Nowak
f27cdfd1c4
Remove release note for GL #5747
This has been reverted.
2026-03-31 17:46:18 +02:00