Commit graph

6846 commits

Author SHA1 Message Date
Aram Sargsyan
074a152c4f Add a new check in the RPZ system test
Check that reloading a response policy zone which has an '$INCLUDE'
directive defined is working as expected.

(cherry picked from commit d81a2457d6)
2026-01-27 12:45:48 +00:00
Nicki Křížek
566f15b039 Resolve the system_test_dir in pytest
If the system_test_dir contains a symlink, then it might cause issues
further down when using relative_to(), unless it is resolved first. This
has been observed on FreeBSD13 in CI where /home is a symlink to
/usr/home.

(cherry picked from commit b1e3469059)
2026-01-27 12:32:37 +01:00
Štěpán Balážik
7a70608cfd Fix bugs in 'resolver/ans2' and 'resolver/ans3'
There were multiple typos and omissions regarding query minimization.

(cherry picked from commit c336c1feab)
2026-01-27 11:49:34 +01:00
Štěpán Balážik
a190f65c43 Reimplement 'resolver/ans10' server using AsyncDnsServer
Ensure packet-for-packet compatibility with the old server.

(cherry picked from commit cef851740b)
2026-01-27 11:48:57 +01:00
Štěpán Balážik
fabad54501 Reimplement 'resolver/ans8' server using AsyncDnsServer
Ensure packet-for-packet compatibility with the old server.

(cherry picked from commit 8f2526a27d)
2026-01-27 11:48:57 +01:00
Štěpán Balážik
fdcdcbc0e2 Reimplement 'resolver/ans3' server using AsyncDnsServer
Ensure packet-for-packet compatibility with the old server including
bugs.

(cherry picked from commit 5004d278e4)
2026-01-27 11:48:57 +01:00
Štěpán Balážik
aa658f80d7 Reimplement 'resolver/ans2' server using AsyncDnsServer
Ensure packet-for-packet compatibility with the old server including
bugs.

(cherry picked from commit d203a39314)
2026-01-27 11:48:48 +01:00
Štěpán Balážik
c11a7877b9 Add common parts of resolver test custom servers
These will be shared by all the ans*/ans.py files.

(cherry picked from commit 23d9055617)
2026-01-27 11:02:31 +01:00
Štěpán Balážik
e466fedcc4 Add StaticResponseHandler to isctest.asyncserver
It is used to prepare and yield one DNS response and avoid the
`get_responses` boiler-plate.

(cherry picked from commit eba89fd38b)
2026-01-27 11:02:31 +01:00
Štěpán Balážik
faec3cb1e1 Add QnameQtypeHandler for matching QNAME, QTYPE pairs
This is a pattern in the resolver system test and also elsewhere.

(cherry picked from commit 8a45f5b485)
2026-01-27 11:02:31 +01:00
Štěpán Balážik
9acda27250 Delete unused ResponseHandlers from statistics ans server
Turns out the original ans.pl implementation before (!10928) was a copy
of an old version of the ans2 server from the resolver system test.

I reimplemented it fully, even though only two ResponseHandlers are
actually used in the statistics test.

(cherry picked from commit 7d5ec7167b)
2026-01-27 11:02:31 +01:00
Štěpán Balážik
f82168a994 Store the most specific matched domain in DomainHandler
Store the most specific matching domain in DomainHandler and
expose it through the `matched_domain` property for subclasses
to use in their implementations of `get_responses`.

(cherry picked from commit b89cc2bd86)
2026-01-27 11:02:31 +01:00
Nicki Křížek
bf303c793e Apply black formatting changes
Generated by black 26.1.0 which got updated in CI.
2026-01-21 22:39:09 +01:00
Nicki Křížek
ad212589bf Silence incorrect pylint warnings for hypothesis.assume()
With hypothesis>6.148.3, pylint generates

W0101: Unreachable code (unreachable)

when any code is present after hypothesis.assume(). Silence these until
it is fixed upstream.

See https://github.com/pylint-dev/pylint/issues/10785#issuecomment-3677224217

(cherry picked from commit 08630ca744)
2026-01-21 16:29:34 +01:00
Nicki Křížek
fe1b33fb7e Remove hypothesis version checks
The minimum required hypothesis version has been set in requirements.txt
and no longer needs to be checked at runtime.

Since the hypothesis package is now a mandatory prerequisite, include it
in isctest as the other subpackages.

(cherry picked from commit 1291fa1a6d)
2026-01-21 16:29:14 +01:00
Nicki Křížek
5c931d8045 Remove compatibility hacks for dnspython<2.7.0
The minimum required dnspython version is now 2.7.0 and those
compatibility hacks can be dropped.

(cherry picked from commit ce385d8100)
2026-01-21 16:29:01 +01:00
Nicki Křížek
a78d19c597 Bump the minimum required python version to 3.10
Drop support of EoL python versions for running system tests. The
maintenance cost of supporting end of life ecosystem, especially Python
3.6 on EL8 and the related outdated packages (pytest, dnspython, ...),
has become unreasonable.

(cherry picked from commit ac8e2905b8)
2026-01-21 16:28:52 +01:00
Nicki Křížek
1830df3fc5 Remove pytest<7 compatibility hacks
Minimum pytest version has been bumped to 7.0.0, thus these are no
longer needed.

(cherry picked from commit e276c3d5bd)
2026-01-21 16:28:43 +01:00
Nicki Křížek
7c2a8e63f6 Add support for pytest>=9.0.0
Use collection_path rather than the deprecated path argument for
pytest_ignore_collect() hook.

The collection_path argument was added in pytest 7.0.0, which is the
minimum supported pytest version from now on.

(cherry picked from commit 093bef9211)
2026-01-21 16:28:33 +01:00
Nicki Křížek
6e98ed3b2b Add requirements.txt for system tests
This file lists the required Python packages and versions for running
system tests. The easiest way to obtain them is:

    pip install -r requirements.txt

The minimum dnspython version is 2.7.0 because it supports TSIG parsing
without validation (for tsig/tests_tsig_hypothesis.py) and wire() (for
names/tests_names.py).

The minimum pytest version was bumped to 7.0.0 because it supports the
collection hook API required by pytest 9.

The minimum hypothesis version was set to 4.41.2 as prior versions might
have issues on FIPS systems.

(cherry picked from commit 628e16d057)
2026-01-21 16:26:25 +01:00
Mark Andrews
8dc183f598 Fix timing issues in nsec3/tests_nsec3_reconfig.py
ns3/nsec3-ent.kasp.db is regenerated too fast resulting in
the subsequent 'rndc reload' call failing.  This has been
fixed.

(cherry picked from commit f01497e05b)
2026-01-21 10:26:46 +00:00
Michal Nowak
2cd2f82c15 Portions of two dnssec-malformed-dnskey tests need querytrace
Without querytrace set, test_malformed_ecdsa and test_multiple_rrsigs
fail on the log_validation_failed string.

(cherry picked from commit d03b3f5a1d)
2026-01-15 13:08:03 +00:00
Štěpán Balážik
ecbce10790 Use isctest.asyncserver in the "ixfr" system test
Replace the usage of the `bin/tests/system/ans.pl` server with an
instance of ControllableAsyncServer.

(cherry picked from commit 46ecbbed0a)
2026-01-14 12:22:06 +00:00
Štěpán Balážik
8a088183e6 Add SwitchControlCommand for ControllableAsyncServer
To provide feature parity with `bin/tests/system/ans.pl` add a control
command to allow easy switching between different sequences of
ResponseHandlers.

(cherry picked from commit 2302fe1235)
2026-01-14 12:22:06 +00:00
Štěpán Balážik
5284dfd4fe Use variadic positional parameters for plural install_* methods
It saves an indent and brackets on the call sites.

Also sort the handlers alphabetically where their order doesn't matter
and split the fallback handlers into a separate call to signify that
their position in the end matters.

(cherry picked from commit 7e587201a4)
2026-01-14 12:22:06 +00:00
Aram Sargsyan
0004175c64 Ignore case for some messages in the catz system test
RBT and QP builds output some log messages in different cases. Ignore
the case of the affected log messages.
2026-01-12 15:52:35 +00:00
Aram Sargsyan
e2bfce435f Test that catalog zones' entry names are case-insensitive
(cherry picked from commit 4e9d97b4f7)
2026-01-12 13:01:53 +00:00
Aram Sargsyan
5a00d2ffe0 Test that catalog zone names are case-insensitive
Change one of the existing catalog zone names to test that
catalog zones are now case-insensitive.

(cherry picked from commit 6d0e6454ac)
2026-01-12 13:01:53 +00:00
Nicki Křížek
5e02d42a23 Renumber ans7->ans6 and ans8->ans7 in digdelv test
Since there was no 10.53.0.6 server in the test, renumber the remaining
ones so that there's no gap in the server names.

This commit simply moves the ans.py files without any changes and
renumbers the IP addresses in tests.

(cherry picked from commit 9b63187a99)
2026-01-12 10:53:23 +00:00
Nicki Křížek
25540fdead Add dnspython>=2.0.0 requirement for digdelv
Now that the test uses AsyncDnsServer, require the appropriate dnspython
version for the test.

(cherry picked from commit 6c69abf783)
2026-01-12 10:53:23 +00:00
Nicki Křížek
5c2dc5ad3b Replace digdelv/ans8 with AsyncDnsServer
Previously, the ans8 server had different response modes that applied to
all queries. Replace it with AsyncDnsServer that has serves the different
response modes under different domains without the need to change the
server behaviour at runtime.

Add the new queries that require an ns3 fallback to the ns3/example.db
zone.

(cherry picked from commit 0b7a089c7f)
2026-01-12 10:53:23 +00:00
Nicki Křížek
4a1f4d67a9 Replace digdelv/ans5 with ControllableAsyncDnsServer
The server has three modes of operation - either no response, a partial
AXFR or a complete AXFR. To test the fallback behaviour of dig, these
actions are be combined in a specific sequences. To set up the desired
server behaviour, use the _control queries for the server.

(cherry picked from commit 575f0e3916)
2026-01-12 10:53:23 +00:00
Nicki Křížek
9d8cd877a0 Rename ResponseDropAndCloseConnection action
The action can be used to close the connection even after some response
was sent, depending on the ordering of actions in the handler that uses
it. Rename it to CloseConnection to use a more fitting name.

(cherry picked from commit 20887ff80f)
2026-01-12 10:53:23 +00:00
Nicki Křížek
4fddae6100 Replace digdelv/ans7 with AsyncDnsServer
ans7 server always replies with an UPDATE opcode in the message.

(cherry picked from commit c50a7d2de1)
2026-01-12 10:53:23 +00:00
Nicki Křížek
0e6c9cae68 Replace digdelv/ans4 with AsyncDnsServer
Configure the AsyncDnsServer to ignore all queries to ensure the same
behaviour as with "//" command for ans.pl.

(cherry picked from commit 648f2534b1)
2026-01-12 10:53:23 +00:00
Nicki Křížek
808e84d1b9 Remove unused digdelv/ans6 server
This server receives no queries during the test and doesn't affect the
test outcome.

(cherry picked from commit 3a6b977a92)
2026-01-12 10:53:23 +00:00
Štěpán Balážik
d65174595d Avoid sending manually created responses in asyncserver
If at all possible, all the responses should be created by
AsyncDnsServer's internal methods. To ensure this, mark them with a
magic attribute and check it on send and crash the server if a manually
created response is detected.

Fix the qmin test server which uses `make_response`.

(cherry picked from commit 1fc206556b)
2026-01-09 15:23:58 +00:00
Michal Nowak
d77b8be2b1
Add ans10 blackhole server to xfer system test
On FreeBSD 15.0, sending requests to non-existent address produces
unexpected results. Add a blackhole server instead.

(cherry picked from commit b4c0408d81)
2026-01-06 22:47:47 +01:00
Nicki Křížek
ccfe50a9b1 Test zone with truncated revoked DNSKEY
Ensure that named can handle a situation where the zone is signed with a
truncated, self-signed revoked DNSKEY. The signatures are inevitably
bogus and a SERVFAIL is expected. However, prior to CVE-2025-8677 fix,
this could trigger an assertion failure.

(cherry picked from commit 0ddfa108a7)
2026-01-05 15:02:51 +01:00
Nicki Křížek
024d67eca9 Test that DNSSEC validation is aborted on malformed DNSKEY
Create a signed zone file that contains malformed ZSKs with colliding
key tags. The ZSKs don't represent valid ECDSA keys and will cause a
crypto failure when attempting to use them. Sign the zone with KSK, with
the exception of one record which is "signed" with the invalid ZSKs.

Check that the resolver aborts the DNSSEC verification after
encountering the first crypto failure, indicating malformed DNSKEY.

(cherry picked from commit 1a2e46d364)
2026-01-05 15:02:51 +01:00
Štěpán Balážik
6e2fbe7081 Set default_aa on AsyncDnsServer to False by default
In 6e684d44 I mistakenly set the default for `default_aa` for
`AsyncDnsServer()` to `True` and then explicitly set it to True in
cases where all the `ResponseHandlers` said
`yield DnsResponseSend(..., authoritative=True)` as if the default was
`False`.

Also the rest of `AsyncDnsServer` code (namely `_prepare_responses`)
reads like `default_aa` is `False` by default.

This accidentally changed the behavior of servers which don't set the
`default_aa` and where AA is not set from the zone data
(e.g. `dispatch/ans3`).

(cherry picked from commit dc58c73264)
2026-01-05 13:05:08 +00:00
Matthijs Mekking
056d73dd08 Wait for "sending notifies" for step3.zsk-prepub
Commit c17ac42608 changed some tests to
wait for "zone_needdump" messages instead of "sending notifies", because
notifies are rate limited and "zone_needdump" happen on every change.

However, inspecting the logs, the "zone_needdump" changes happen more
than once (likely because the re-signing is done in batches):

    received control channel command 'sign step3.zsk-prepub.manual'
    zone_journal: zone step3.zsk-prepub.manual/IN (signed): enter
    zone_needdump: zone step3.zsk-prepub.manual/IN (signed): enter
    zone_journal: zone step3.zsk-prepub.manual/IN (signed): enter
    zone_needdump: zone step3.zsk-prepub.manual/IN (signed): enter
    zone_journal: zone step3.zsk-prepub.manual/IN (signed): enter
    zone_needdump: zone step3.zsk-prepub.manual/IN (signed): enter
    zone step3.zsk-prepub.manual/IN (signed): sending notifies

This means we are running the rollover step checks too fast in some
test runs.

Revert the wait for log change for the rollover-zsk-prepub test.

(cherry picked from commit 22c02a4df9)
2026-01-02 08:13:31 +00:00
Matthijs Mekking
705cfac99f Drop and replace CmdHelper with EnvCmd
A generic helper that calls environment-specified binaries has been added,
drop and replace the introduced CmdHelper for the more generic method.

(cherry picked from commit 594ff0816a)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
ddd532ace0 rollover-zsk-prepub: From setup.sh to pytest bootstrap
Symlink ns1 and ns2 to rollover/ns1 and rollover/ns2.
Symlink ns3/template.db.j2.manual to rollover/ns3/template.db.j2.manual.

Since the bootstrapping is done before the templates are rendered
automatically, replace @DEFAULT_ALGORITHM@ in ns3/kasp.conf.j2 to
ecdsa256 and rename to ns3/kasp.conf.

(cherry picked from commit e172b4ff1a)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
74ed63eb8d rollover-straight2none: From setup.sh to pytest bootstrap
Similar to rollover-going-insecure.

(cherry picked from commit da04c75cec)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
e403f6dc2c rollover-lifetime: Update templates
This test does not require a trust chain. Merely update the template
zone files to not point to the common template.

(cherry picked from commit 0016791c91)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
f814553696 rollover-multisigner: Update templates
This test does not require a trust chain. However, it does have a setup
script. Rewrite the setup shell script to a pytest bootstrap method.

(cherry picked from commit b6c091d113)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
7b92adde63 rollover-ksk-3crowd: From setup.sh to pytest bootstrap
Similar to rollover-ksk-doubleksk.

(cherry picked from commit 4ed35f02b1)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
f8ce10ea24 rollover-ksk-doubleksk: From setup.sh to pytest bootstrap
Symlink ns1 and ns2 to rollover/ns1 and rollover/ns2.
Symlink ns3/template.db.j2.manual to rollover/ns3/template.db.j2.manual.

Since the bootstrapping is done before the templates are rendered
automatically, replace @DEFAULT_ALGORITHM@ in ns3/kasp.conf.j2 to
ecdsa256 and rename to ns3/kasp.conf.

(cherry picked from commit 08236f4bd6)
2025-12-22 15:25:12 +00:00
Matthijs Mekking
40330867b1 rollover-going-insecure: From setup.sh to pytest bootstrap
Symlink ns1 and ns2 to rollover/ns1 and rollover/ns2.
Symlink ns3/template.db.j2.manual to rollover/ns3/template.db.j2.manual.

Since the bootstrapping is done before the templates are rendered
automatically, replace @DEFAULT_ALGORITHM@ in ns3/kasp.conf.j2 to
ecdsa256 and rename to ns3/kasp.conf.

Now we have to fake different lifetimes, so adjust fake_lifetime
to update a single key.

Note that we have changed the setup slightly: We also sign the
step2 zones, but with post validation disabled. This is more
accurate because we need to test that the public keys and signatures
are being removed from the zone.

(cherry picked from commit cc4244f384)
2025-12-22 15:25:12 +00:00