2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-29 05:28:00 +00:00

43024 Commits

Author SHA1 Message Date
Michal Nowak
20b189178a [9.20] fix: ci: Revert "Capture scripts for Coverity Scan analysis"
This reverts commit b4a2674d98902983e8096c99b747343482d30673.

The --fs-capture-search option is no more. The ability to analyse Python
scripts in Coverity turned out to be questionable anyways.

Closes #5456

Backport of MR !10808

Merge branch 'backport-5456-coverity-scan-drop-fs-capture-search-option-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10810
2025-07-31 13:22:49 +02:00
Michal Nowak
2bfb7cc5b0
Revert "Capture scripts for Coverity Scan analysis"
This reverts commit b4a2674d98902983e8096c99b747343482d30673.

The --fs-capture-search option is no more. The ability to analyse Python
scripts in Coverity turned out to be questionable anyways.

(cherry picked from commit 310884c259fff325e9051ad123fe96600b848903)
2025-07-31 12:51:39 +02:00
Petr Špaček
515aeb828a [9.20] Fix system test compatibility with old Python
Backport of MR !10797

Merge branch 'backport-pspacek/test-compatibility-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10802
2025-07-30 14:38:54 +00:00
Petr Špaček
2dd7144e70 Fix compatibility with Python < 3.10
Dataclass kw_only argument was added only in Python 3.10 but EL9 image
has only 3.9.21.

(cherry picked from commit b0c7f8b598d8a37fa7560d0d1b6c87e429b2446a)
2025-07-30 14:36:38 +00:00
Petr Špaček
b19bc50ef0 Fix minimal dnspython version test
Wrong version number was uncovered by Ubuntu 22.04 Jammy which actually
has dnspython 2.1.0.

(cherry picked from commit 6ae224fc9c7ed96f1e06ad8f929b20ea6ce32f25)
2025-07-30 14:36:38 +00:00
Evan Hunt
4bf7d412ff [9.20] new: test: add helper functions to isctest
added some helper functions in isctest to reduce code repetition
in dnssec-related tests:

- isctest.check.adflag() - checks that a response contains AD=1
- isctest.check.noadflag() - checks that a response contains AD=0

- isctest.check.rdflag() - checks that a response contains RD=1
- isctest.check.nordflag() - checks that a response contains RD=0

- isctest.check.raflag() - checks that a response contains RA=1
- isctest.check.noraflag() - checks that a response contains RA=0

- isctest.check.rr_count_eq() - checks the number of RRsset in a section

- isctest.check.same_data() - checks that two message have the
                              same rcode and data
- isctest.check.same_answer() - checks that two message have the same
                                rcode and answer

- isctest.query.create() - a wrapper for dns.message.make_query() that
                           creates a query message similar to dig +dnssec

Backport of MR !10760

Merge branch 'backport-each-isctest-helpers-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10793
2025-07-30 00:02:38 +00:00
Evan Hunt
9dcfe0ee1a Use isctest.query.create across system tests
Rather than using the dnspython's facilities and defaults to create the
queries, use the isctest.query.create function in all the cases that
don't require special handling to have consistent defaults.

(cherry picked from commit 64143ea077c3ddb48f808af2d0b05e21209cd268)
2025-07-29 16:02:32 -07:00
Nicki Křížek
9decbd88a3 Add RA flag checks to isctest.check
(cherry picked from commit f2a4c5dcb0556e109f7e77807c98564450b4c22a)
2025-07-29 22:58:06 +00:00
Nicki Křížek
a26f1e4f27 Refactor and move query helper to isctest.query.create
Make the query helper function more universal and reusable across our
system tests -- default to using EDNS and sending AD=1.

(cherry picked from commit 989e64b9b0e2a65b8b4b0f2bc75b1f2e2a327272)
2025-07-29 22:58:06 +00:00
Nicki Křížek
070197b884 Unify RR counting in isctest.check helper
Use a common function to count the number of RRs in any section of the
DNS message. For the ADDITIONAL section, stick with the dnspython
convention of not including OPT and TSIG.

(cherry picked from commit efd60348b9280383fe5d50042a94ea363390356d)
2025-07-29 22:58:06 +00:00
Nicki Křížek
dc8884d894 Refactor isctest.check.section_equal comparison
Use the same logic as dnspython uses in dns.message.Message.

(cherry picked from commit b24dd20e5a8efa2ba4c277e0c48fa08ebea96702)
2025-07-29 22:58:06 +00:00
Evan Hunt
3a3bcd5aa1 add helper functions to isctest
added some helper functions in isctest to reduce code repetition
in dnssec-related tests:

- isctest.check.adflag() - checks that a response contains AD=1
- isctest.check.noadflag() - checks that a response contains AD=0

- isctest.check.rdflag() - checks that a response contains RD=1
- isctest.check.nordflag() - checks that a response contains RD=0

- isctest.check.answer_count_eq() - checks the answer count is correct
- isctest.check.additional_count_eq() - same for authority count
- isctest.check.authority_count_eq() - same for additional count

- isctest.check.same_data() - check that two message have the
                              same rcode and data
- isctest.check.same_answer() - check that two message have the same
                                rcode and answer

- isctest.dnssec.msg() - a wrapper for dns.message.make_query() that
                         creates a query message similar to dig +dnssec:
                         use_edns=True, want_dnssec=True,
                         and flags are set to (RD|AD) by default, but
                         options exist to disable AD or enable CD.
                         (to generate non-DNSSEC queries, use
                         message.make_query() directly.)

(cherry picked from commit b69097f139154ca0d2177f35632400200d220bdc)
2025-07-29 22:58:06 +00:00
Matthijs Mekking
39e82071f4 [9.20] fix: test: Improve key collision detection in ksr system test
MR !10238 added key collision detection in the ksr system test but it was flawed because for every "collide" in the output we also log
"Generating an new key" and for each "Generating" we add the counter by one, nullifying the subtract by one.

Fix by splitting the output on ':' rather than on the default whitespace. Also make the substring matching more strict.

Closes #5229 (again)

Backport of MR !10775

Merge branch 'backport-5229-ksr-key-collision-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10791
2025-07-29 13:22:03 +00:00
Matthijs Mekking
bd80774ffc Improve key collision detection in ksr system test
MR !10238 added key collision detection in the ksr system test but it
was flawed because for every "collide" in the output we also log
"Generating an new key" and for each "Generating" we add the counter
by one, nullifying the subtract by one.

Use regular expressions to search in the output and make the string
expression more strict.

(cherry picked from commit abdb9a133483f3a1968646289ae355e3cdddbf72)
2025-07-29 12:46:59 +00:00
Michal Nowak
9c43b55419 fix: test: Import isc/list.h after cmocka to avoid redefinition errors
Closes #5451

Merge branch '5451-fix-diff_test-inclusions' into 'bind-9.20'

See merge request isc-projects/bind9!10790
2025-07-29 14:08:18 +02:00
Michal Nowak
cb96d9c8e2 Import isc/list.h after cmocka to avoid redefinition errors
In file included from diff_test.c:25:
    /usr/local/include/cmocka.h:2333:1: error: unknown attribute '_Noreturn' ignored [-Werror,-Wunknown-attributes]
     2333 | CMOCKA_NORETURN void _fail(const char * const file, const int line);
          | ^~~~~~~~~~~~~~~
    /usr/local/include/cmocka.h:129:41: note: expanded from macro 'CMOCKA_NORETURN'
      129 | #define CMOCKA_NORETURN __attribute__ ((noreturn))
          |                                         ^~~~~~~~
    /usr/include/stdnoreturn.h:36:19: note: expanded from macro 'noreturn'
       36 | #define noreturn                _Noreturn
          |                                 ^~~~~~~~~
2025-07-29 14:07:05 +02:00
Petr Špaček
da561d6b28 [9.20] new: test: Robust tests for NSEC3 nonexistent QNAME proof
Related to #5292

Backport of MR !10416

Merge branch 'backport-5292-wrong-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10788
2025-07-29 10:52:36 +00:00
Michał Kępień
55979e4566 Adjust type hints for the "nsec3-answer" test
Add missing type hints in the tests_nsec3.py module.  Tweak the syntax
used for type hints for better consistency with other Python code in
bin/tests/system/.

(cherry picked from commit adb931f70005f900437dc121097db54cd608de94)
2025-07-29 11:31:56 +02:00
Petr Špaček
c8ec836fe1 Add more empty non-terminals to test zone
I don't know exactly why, I just have a feeling there might be
interesting corner cases somewhere.

(cherry picked from commit fc3d5e5918dde168290d97ad122d0948bdc61db1)
2025-07-29 11:31:56 +02:00
Petr Špaček
67a8ada1b7 Randomize NSEC3 salt
This should prevent the case where are are unlucky enough that static
values hash 'just right' for the test to pass, but only accidentally.

(cherry picked from commit 46781845ea96f5e1e6052141b1ac844c5483a8ca)
2025-07-29 11:31:56 +02:00
Petr Špaček
4680f50dc5 Test proof of nonexistance of DS in insecure referrals
Currently this test is limited only to auth because currently BIND
resolver does not send DS proof of nonexistence for RD=0 queries.

(cherry picked from commit 548632b18aee8fa05c67a0284522a1e19183310c)
2025-07-29 11:31:56 +02:00
Petr Špaček
f1e885bee8 Test dangling DNAME answers come with NXDOMAIN proofs
Simplistic test. Ignores the possibility of DNAME chain going through
multiple zones and/or wildcard expansions.

(cherry picked from commit 73e4201331fb468664aa72faa785acabe97fc820)
2025-07-29 11:31:56 +02:00
Petr Špaček
785009354c Test dangling CNAMEs come with NXDOMAIN proofs
Simplistic test. Ignores the possibility of CNAME chain going through
multiple zones and/or wildcard expansions.

(cherry picked from commit d0e413dd5763fbe81ba37abeec650f26a9248feb)
2025-07-29 11:31:56 +02:00
Petr Špaček
8926c20af7 Move query outside of check_() functions
This allows better check() code reuse.

(cherry picked from commit cc6544b41730234e2c5820c5b40a42db31d66b07)
2025-07-29 11:31:56 +02:00
Petr Špaček
f0b5967f10 Separate test into a new directory
The test actually needs just two servers - auth and resolver. The rest
was not needed and made test setup only slower and harder to debug.

(cherry picked from commit ac58b580021902a52291583fecc13a76ee5f2db2)
2025-07-29 11:31:56 +02:00
Petr Špaček
6f37f5dc85 Test simple NODATA answers with NSEC3
(cherry picked from commit a92391f60f749f133f80a8ee9e3cee38265f3045)
2025-07-29 11:31:56 +02:00
Petr Špaček
827258fb37 Detect extraneous NSEC3 RRs in responses
We expect minimal possible answers which prove what they have to
according to DNSSEC protocol.

(cherry picked from commit b854d5a3f5d60ceb275a4d1813e56bc9f5b5c4ea)
2025-07-29 11:31:56 +02:00
Petr Špaček
a76fa47bda Move proof checking into a NSEC3Checker class
(cherry picked from commit c45ad518607d26854329a2535f8b9c5485fb7d46)
2025-07-29 11:31:56 +02:00
Petr Špaček
f05b396193 Add consistency checks to responses with NSEC3
Basic sanity checks - limited to responses from a single zone:
- NSEC3 type cannot be present in type bitmap:
  By definition, the type bitmap describes state of the unhashed name
  but NSEC3 RR is present at a different owner name. RFC 7129 section 5
- NSEC3 owner names cannot be duplicated:
  Unless the response crosses zone boundary, parent zone has insecure
  delegation for child, but child is signed ... don't do that.
- All parameters are consistent across all RRs present in answer:
  RFC 5155 section 7.2, last paragraph - at least when we don't cross
  zone boundary.

(cherry picked from commit cfaf5c997f73e1d91735d6c87a2a21cab391eabd)
2025-07-29 11:31:56 +02:00
Petr Špaček
1c906025e8 Split NXDOMAIN/NOERROR/NODATA test cases
Untangling individual cases allows for clearer documentation and makes
it easier to build similar but slightly different test cases.  Wildcard
NODATA answer was added.

(cherry picked from commit 9ca2077274908d86599e0161cf2c0ccc140b224f)
2025-07-29 11:31:56 +02:00
Petr Špaček
c45c748d50 Extract closest encloser and source of synthesis logic into ZoneAnalyzer
As a side-effect, we now have set of all existing names in a zone with a
test, too. These parts should be shared with new NSEC tests.

(cherry picked from commit f0592de608af06792dbc14829a0ac3671b9ed868)
2025-07-29 11:31:56 +02:00
Petr Špaček
27fc20bfeb Use isctest library to check hypothesis version
Side-effect of importing from isctest.hypothesis first is a version
check and clean Pytest skip if version is too old.

(cherry picked from commit 9cea2af25ca90b206c1a8a9255883b15097a9973)
2025-07-29 11:31:56 +02:00
Petr Špaček
15126a6315 Generate comprehensive tests for ZoneAnalyzer utility class
Test all combinations of wildcard, ENT, DNAME, NS, and ordinary
TXT records.

Test zone and expected outputs are generated by another script which
encodes node content into node name. This encoding removes 'node
content' level of indirection and thus enables simpler implementation of
same logic which needs to be in ZoneAnalyzer itself.

For humans the generated zone file also lists expected 'categories' a
name belongs to as dot-separated list on right hand side of a generated
RR.

(cherry picked from commit 42b60a3819ea48ad38fe9bcf5ff1ccfb752315ef)
2025-07-29 11:31:56 +02:00
Petr Špaček
47bea54971 Test ZoneAnalyzer utility class
I've considered writing hypothesis test for this but I would have to
reimplement the same thing, which would probably have the same logic
bugs, so I will leave it as an exercise for someone else.

(cherry picked from commit cad48e56ab5e08ccb7bde55948a511538cef2649)
2025-07-29 11:31:56 +02:00
Petr Špaček
26bd3f2019 Separate zone analyzer from NSEC3 test
Code to generate ENTs, detect wildcards, occlusion etc. is generic
enough to be in an utility module.

(cherry picked from commit dbba59f48b8ec0fa12e7519fda206272c2893011)
2025-07-29 11:31:56 +02:00
Petr Špaček
b6b6b6f45b Shorten syntax to access Name object
dns.name all over the place does not make it easier to read the code at
all, and I'm going to add lot more code here.

(cherry picked from commit 3fb6b990af3ec44e0b0d4e14d76d8c4bfba9692b)
2025-07-29 11:31:56 +02:00
Petr Špaček
fa9ca7f3ee Move multi-subdomain name generator into shared utilities
(cherry picked from commit bd8be10329d1db72a57c8151c0cfc0f42021ee1e)
2025-07-29 11:31:56 +02:00
Evan Hunt
6931586fad Add property based test for nsec3hash utility
Check the correctness of NSEC3 hash generation by generating random
combinations of name, salt, and iterations and comparing the outputs
of the nsec3hash tool against the dnspython nsec3_hash function
for the same inputs.

(cherry picked from commit e263df8848b9998d0578d03ffb48a6235f60aada)
2025-07-29 11:31:56 +02:00
Petr Špaček
0472b39835 Test also with subdomains of existing names
Composite strategy makes sure we always test with a subdomain of an
existing name.

(cherry picked from commit 84ad35e7affd1c17e29721a3d84e283642cf6af2)
2025-07-29 11:31:56 +02:00
Petr Špaček
09856ee296 Dedup NSEC3 get_next_name function
(cherry picked from commit f9e12a840d80add44fc3a8240b93329959f94f35)
2025-07-29 11:31:56 +02:00
Matthijs Mekking
0b9a129990 Add a property based test for NSEC3 proofs for non-existent QNAMEs
For any given NSEC3 signed zone, when doing queries for non-existent
names, the response must contain:
- NSEC3 RR that matches the closest encloser,
- NSEC3 RR that covers the next closer name,
- NSEC3 RR that covers the wildcard.

(cherry picked from commit 955e3ccf3e3cfb7f622733a6966d292856b062ae)
2025-07-29 11:31:56 +02:00
Mark Andrews
4b2eeca477 Check that correct NSEC3 proofs are returned
(cherry picked from commit 132e68fddbdcdbb1009ffd100721e9c108f191c2)
2025-07-29 11:31:52 +02:00
Michal Nowak
848262808e [9.20] new: ci: Add AlmaLinux 10 FIPS
Backport of MR !10722

Merge branch 'backport-mnowak/add-almalinux-10-fips-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10781
2025-07-28 20:55:16 +02:00
Michal Nowak
b0949d960b
Add AlmaLinux 10 FIPS
(cherry picked from commit 1f459470883bf7ea9958a29caa98294499293cb3)
2025-07-28 19:38:24 +02:00
Michal Nowak
b35b501f8d Do not add AlmaLinux 8 FIPS unit and system test in MR pipelines
(cherry picked from commit 3b274e59935cef229d41866a5863b1d5107ea6bd)
2025-07-28 17:30:32 +00:00
Štěpán Balážik
3c80f205ae [9.20] chg: test: Use isctest.asyncserver in the "dispatch" test
Replace the custom DNS server used in the "dispatch" system test with
new code based on the isctest.asyncserver module.

Backport of MR !10689

Merge branch 'backport-stepan/dispatch-asyncserver-9.20' into 'bind-9.20'

See merge request isc-projects/bind9!10773
2025-07-24 13:52:19 +00:00
Michał Kępień
576e41a853 Account for idle timeouts in the "dispatch" test
When the tests-connreset.py module was initially implemented in commit
5c17919019ef0af8226e5bb61214b805bb3e2451, the dispatch code did not
properly apply the idle timeout to TCP connections.  This allowed the
check in that test module to reset the TCP connection after 5 seconds as
named did not attempt to tear the connection down earlier than that.
However, as the dispatch code was improved, the idle timeout started
being enforced for TCP dispatches; the exact value it is set to in the
current code depends on a given server's SRTT, but it defaults to about
1.2 seconds for responsive servers.  This means that the code paths
triggered by the "dispatch" system test are now different than the ones
it was originally supposed to trigger because it is now named itself
that shuts the TCP connection down cleanly before the ans3 server gets a
chance to reset it.

Account for the above by lowering the amount of time after which the
ans3 server in the "dispatch" system test resets TCP connections to just
1 second, so that the test actually does what its name implies.

(cherry picked from commit 48e705d738bcd34f6f868810503af4236504afcb)
2025-07-24 13:17:07 +00:00
Štěpán Balážik
c6c149f0b6 Use isctest.asyncserver in the "dispatch" test
Replace the custom DNS server used in the "dispatch" system test with
new code based on the isctest.asyncserver module.

(cherry picked from commit 316b7d55900229e7e16304603dde23fb55d45424)
2025-07-24 13:17:07 +00:00
Michał Kępień
746fc9701c Enable resetting TCP connections
Add a TCP connection handler, ConnectionReset, which enables closing TCP
connections without emptying the client socket buffer, causing the
kernel to send an RST segment to the client.  This relies on a horrible
asyncio hack that can break at any point in the future due to abusing
implementation details in the Python Standard Library.  Despite the eye
bleeding this code may cause, the approach it takes was still deemed
preferable to implementing an asyncio transport from scratch just to
enable triggering connection resets.

(cherry picked from commit e4078885073a6c5b59729f4313108e3e7637efdb)
2025-07-24 13:17:07 +00:00
Štěpán Balážik
a7be55a3f0 Add support for TCP connection handlers
Add a new abstract class, ConnectionHandler, instances of which can be
installed on AsyncDnsServer to manipulate TCP connections upon
accepting.

(cherry picked from commit b4d53e7287436be8510b8d280428a8cb6c8b628f)
2025-07-24 13:17:07 +00:00