Commit graph

11206 commits

Author SHA1 Message Date
Ondřej Surý
c9d6f0e400
Deprecate 'dnssec-must-be-secure' option
The dnssec-must-be-secure feature was added in the early days of BIND 9
and DNSSEC and it makes sense only as a debugging feature.

Remove the feature to simplify the code.

(cherry picked from commit 9e0b348a2b)
2023-09-04 17:27:14 +02:00
Mark Andrews
74f9d749bf Clear OpenSSL error stack when exiting
(cherry picked from commit eaedba6621)
2023-09-01 13:45:34 +10:00
Mark Andrews
b5b13771f2 Clear OpenSSL errors on EVP_PKEY_new failures
(cherry picked from commit 6df53cdb87)
2023-09-01 13:37:02 +10:00
Matthijs Mekking
804f4b8d5d Add serve-stale test settings after flush
Add a test case to ensure that after 'rndc flush', the serve-stale
settings are not reset.

(cherry picked from commit 0f593fd70a)
2023-08-31 11:12:59 +02:00
Mark Andrews
b4694e7551 Check that removal of nonexistent PTR and SRV records work
There was a bug in rr_exists that caused it to fail when the
name didn't exist in the zone.

(cherry picked from commit 2b7192c5be)
2023-08-30 10:05:08 +10:00
Tony Finch
525afc666a
Parse statschannel Content-Length: more carefully
A negative or excessively large Content-Length could cause a crash
by making `INSIST(httpd->consume != 0)` fail.

(cherry picked from commit 26e10e8fb5)
2023-08-23 15:44:11 +02:00
Tom Krizek
764161d8cf
Allow re-runs of rrl system test
The rrl system test has been unstable and producing false positive
results for years (GL #172). Allow the test to be re-run (once) to
reduce the noise it causes.

(cherry picked from commit 40289d5440)
2023-08-23 14:50:24 +02:00
Tom Krizek
ac465416f9
Allow re-runs of reclimit system test
The reclimit system test has been unstable and producing false positive
results for years (GL #1587). Allow the test to be re-run (once) to
reduce the noise it causes.

(cherry picked from commit 8c5833fe39)
2023-08-23 14:50:24 +02:00
Tom Krizek
83cde47734
Allow re-runs of qmin system test
The qmin test is inherently unstable. It fails quite often with failure
modes described in GL #904. Allow the pytest runner to re-run the test
up to 3 times to only detect a more persistent and reproducible failures
rather than random noise caused by the nature of the test.

(cherry picked from commit be2123a8e9)
2023-08-23 14:50:24 +02:00
Tom Krizek
0c5d718849
Disable loadtime check in statschannel test
It is better to disable the specific check that causes the test to fail
rather than mark the entire test as xfail, which can mask other issues
which the test is capable of detecting.

(cherry picked from commit 7522583b57)
2023-08-23 14:50:24 +02:00
Tom Krizek
71f96aa1e6
Clean up pytest .gitignore file
The _last_test_run entry was accidentally added in !8194. It came from a
work-in-progress version of the MR and was left there during a rebase.

(cherry picked from commit 1b3db25adf)
2023-08-23 14:50:24 +02:00
Tom Krizek
7a42a6b409
Skip checkds test on Python<3.7
checkds test requires the capture_output argument for subprocess.run()
which was added in Python 3.7.

(cherry picked from commit 0361233b3d)
2023-08-23 14:50:22 +02:00
Matthijs Mekking
a0a95fb997 Make nsupdate honor -v for SOA queries
nsupdate offers the switch -v to use TCP for update requests. But
before sending that update request nsupdate was using UDP connection
to gather the SOA for determining the zone if not given explicitly.

Only use TCP if not using the default servers, because the SOA
query lookup is a different server with different capabilities (and
usually not for the better of it).
2023-08-23 09:58:17 +02:00
Tom Krizek
ae18bc33c5
Compile system test binaries during make
Using check_PROGRAMS would postpone compiling the binaries needed by
system tests until `make check` would be called. Since it's preferable
to invoke pytest directly to run the system test suite, compile these
binaries without installing them during `make all` instead by using
noinst_PROGRAMS.

This removes the need to use TESTS= make -e check hack invoked from
pytest to work around this issue.

(cherry picked from commit 21980b43b8)
2023-08-22 15:40:44 +02:00
Michal Nowak
8738309e24
Drop the rndc "-t" option from shudown system test
BIND 9.18 rndc does not know about the "-t" option, that results in an
silent "invalid argument" error.

The "-t" option originally came with
184eddb595 (a backport from the main
branch).
2023-08-22 10:58:58 +02:00
Michal Nowak
c3cc8aa429
Mark test_send_timeout as flaky
In some cases, BIND is not fast enough to fill the send buffer and
manages to answer all queries, contrary to what the test expects.
Repeat the check up to 3 times to limit this test instability.

(cherry picked from commit 681b23c398)
2023-08-22 08:55:03 +02:00
Tom Krizek
71a9e152f1
Add custom flaky decorator to handle unstable tests
If the flaky plugin for pytest is available, use its decorator to
support re-running unstable tests. In case the package is missing,
execute the test as usual without attempts to re-run it in case of
failure.

This is mostly intended to increase the test stability in CI. Using a
custom decorator enables us to keep the flaky package as an optional
dependency.

(cherry picked from commit 5b703de733)
2023-08-22 08:55:03 +02:00
Tom Krizek
b6e522ad03
.gitignore temporary directories and symlinks in system test dir
(cherry picked from commit 355dc73391)
2023-08-21 16:07:30 +02:00
Tom Krizek
303de3e089
Add clean-local target to clean pytest runner artifacts
The command finds all directories in bin/tests/system which contain an
underscore. Underscore indicates either a temporary directory (_tmp_), a
symlink to test artifacts (TESTNAME_MODULENAME), or a python-related
cache. Using underscore for a system test name is invalid and a hyphen
must be used instead.

(cherry picked from commit d66ff81543)
2023-08-21 16:07:30 +02:00
Tom Krizek
4b3d0c0f46
Silence pylint's refactoring suggestions for system_test_dir()
While it'd be fairly easy to split the function up into smaller ones,
the readability wouldn't be improved in this case. Silence the
suggestions instead.

(cherry picked from commit 83ddca7690)
2023-08-21 16:07:30 +02:00
Tom Krizek
4f6ea4fa1b
Improve tempdir logging for pytest runner
At the end of the test, display the symlink path to the artifact
directory in case it's preserved. Log the full tempdir name in debug
log.

(cherry picked from commit f91d0b13e8)
2023-08-21 16:07:30 +02:00
Tom Krizek
89e6d1bc26
Create symlinks to test artifacts for pytest runner
While temporary directories are useful for test execution to keep
everything clean, they are difficult to work with manually. Create a
symlink for each test artifact directory with a stable and predictable
path. The symlink always either points to the latest artifacts, or is
missing in case the last run succeeded.

Ensure these symlinked directories aren't detected as test suites by the
pytest runner.

(cherry picked from commit e1ca5c8071)
2023-08-21 16:07:28 +02:00
Tom Krizek
57b2966d0b
Improve pytest message when sanitizer report is found
(cherry picked from commit b1a9d1fe25)
2023-08-21 15:16:53 +02:00
Mark Andrews
86b9e02600 Remove bind9.xsl.1, bind9.xsl.2 and bind9.xsl.3
(cherry picked from commit 7da47fd858)
2023-08-15 14:25:11 +10:00
Mark Andrews
5097911f51 Add sleeps so that the modification time changes
The mkeys system test could fail because root zone was resigned
within the same second as it was previously signed causing reloads
to fail.  Add delays to the test to prevent this.

(cherry picked from commit 40e3529379)
2023-08-15 09:38:00 +10:00
Tony Finch
57069556eb
Fix a stack buffer overflow in the statistics channel
A long timestamp in an If-Modified-Since header could overflow a
fixed-size buffer.

(cherry picked from commit b22c87ca61)
2023-08-14 13:07:47 +02:00
Mark Andrews
2dd9c3a5f3 Fix 'addr', 'ckresult' and 'drop' functions
'addr', 'ckresult' and 'drop' should return 0 rather than 1 after
calling 'setret' as the error has been logged and these functions
are not expect to fail.

(cherry picked from commit 1394f12a1c)
2023-08-10 09:37:11 +10:00
Michał Kępień
dbdc70cbe0
Convert setup.pl into static configurations
The setup.pl script has been replaced with static BIND configurations,
and in the course of this change, the unused ns1 server was removed.
This enhancement has greatly improved the overall test's readability.

(cherry picked from commit 08a8906cfc)
2023-08-08 14:30:34 +02:00
Michal Nowak
624c20b191
Rewrite stress test to pytest
The shell version of the test was completed only after all DNS zone
updates were sent, even if the BIND server crashed while processing
them, leading to prolonged execution and potential hang in the CI
environment. The Python rewrite of the test ensures that DNS update
tasks finish within five minutes of starting, irrespective of a BIND
crash possibility or DNS zone updates not finishing in time.

(cherry picked from commit ecd7b30d0a)
2023-08-08 14:30:27 +02:00
Michał Kępień
a1800c23a0
Wait until fstrm_capture is ready
The fstrm_capture utility is started in the background during the
"dnstap" system test.  Consequently, "rndc dnstap-reopen" and similar
commands may be executed before fstrm_capture starts listening on the
Unix domain socket it is configured to receive dnstap data on.  This
results in the dnstap data sent to that socket in the meantime to be
lost; while the fstrm writer thread is able to recover from such a
scenario within a couple of seconds (by reopening the configured dnstap
destination itself), only one write attempt is made for data
successfully queued to the writer thread, so dnstap frames can still be
lost in the process.  This may happen during the "dnstap" system test,
leading to the dnstap output file being empty, which in turn causes the
test to fail.

Fix by waiting until fstrm_capture starts listening on the Unix domain
socket it is configured to use before asking named to reopen the
configured dnstap destination.  Since various fstrm_capture versions log
different messages when the listening socket is set up, wait for a
common string that works for all fstrm_capture versions released to
date.  Add a few extra debug messages indicating test progress and make
the test fail if the expected fstrm_capture log message is not generated
within 10 seconds.

(cherry picked from commit 26d3d97f12)
2023-08-07 13:59:35 +02:00
Michał Kępień
7db6129f62
Capture all fstrm_capture output
The fstrm_capture.out file is overwritten when the fstrm_capture utility
is restarted during the "dnstap" system test.  Use a separate output
file for each fstrm_capture instance to ensure all output produced by
that tool during the "dnstap" system test is preserved for forensic
purposes.

(cherry picked from commit bd2941fc72)
2023-08-07 13:59:35 +02:00
Mark Andrews
4e8b3f9893 Set ret=1 if _wait_for_stats does not succeed
Errors getting transfer statistics from named.run where not detected
as ret was not set to one if there hadn't been a success after looping
for a while.

(cherry picked from commit 287a1ac09b)
2023-08-07 19:20:13 +10:00
Evan Hunt
3cc1e5e12a deprecate "dialup" and "heartbeat-interval"
these options concentrate zone maintenance actions into
bursts for the benefit of servers with intermittent connections.
that's no longer something we really need to optimize.

(cherry picked from commit eeeccec67c)
2023-08-01 18:41:49 -07:00
Mark Andrews
0e4872a12a Use $() instead of backticks
(cherry picked from commit 162db75e2b)
2023-08-02 00:31:30 +00:00
Mark Andrews
b1a9077011 Use sub shell to isolate enviroment changes
'HOME=value command' should only change HOME for command but on
some platforms this occasionally sets HOME for the rest of the
test. Explicitly isolate the enviroment change using a sub shell.

(cherry picked from commit 96f75bba18)
2023-08-02 09:56:27 +10:00
Aram Sargsyan
18ba295abe Fix dig help message typo in the http-plain-get option
The option name is misspelled as 'https-plain-get'. Fix the error.

(cherry picked from commit 77d1476c46)
2023-08-01 11:22:10 +00:00
Matthijs Mekking
a21407d062 Ignore max-zone-ttl on dnssec-policy insecure
Allow larger TTL values in zones that go insecure. This is necessary
because otherwise the zone will not be loaded due to the max-zone-ttl
of P1D that is part of the current insecure policy.

In the keymgr.c code, default back to P1D if the max-zone-ttl is set
to zero.

(cherry picked from commit dc6dafdad1)
2023-08-01 09:53:03 +02:00
Mark Andrews
022397a2c7 Check GSS-API TKEY against non configured server
Check for the expected error message which includes rcode REFUSED
then reload the server to specify the keytab for the rest of the
GSSAPI tests.

(cherry picked from commit 3a2a24903c)
2023-07-29 05:46:32 +10:00
Mark Andrews
aeab068adc Report TKEY query errors in nsupdate
(cherry picked from commit f244619680)
2023-07-29 05:46:32 +10:00
Štěpán Balážik
ffe0cb4bb0
Fix ecdsa256 check in ecdsa system test setup
Probably by copy-paste mistake, ecdsa384 was checked twice.

(cherry picked from commit 10194baa07)
2023-07-28 09:15:06 +02:00
Tom Krizek
774b9bc629
Disable resolve checks under TSAN
The resolve binary is affected by GL#4119 which occassionally makes it
hand during system tests when running with TSAN. This is a workaround to
avoid wasting resources caused by a CI timeout for the system test tsan
jobs.
2023-07-25 14:05:28 +02:00
Tom Krizek
0d88cd444b
Reproducer for CVE-2023-2911
The conditions that trigger the crash:
- a stale record is in cache
- stale-answer-client-timeout is 0
- multiple clients query for the stale record, enough of them to exceed
  the recursive-clients quota
- the response from the authoritative is sufficiently delayed so that
  recursive-clients quota is exceeded first

The reproducer attempts to simulate this situation. However, it hasn't
proven to be 100 % reproducible, especially in CI. When reproducing
locally, the priming query also seems to sometimes interfere and prevent
the crash. When the reproducer is ran twice, it appears to be more
reliable in reproducing the issue.

(cherry picked from commit f617512d37)
2023-07-25 10:34:33 +02:00
Tom Krizek
744185f524
Clean up keys directory in checkconf test
The keys directory should be cleaned up in clean.sh. Doing that in the
test itself isn't reliable which may lead to failing mkdir which causes
the test to fail with set -e.

(cherry picked from commit 062dfac28e)
2023-07-25 09:21:50 +02:00
Aram Sargsyan
67f4b9d2a6 Fix a bug in an utility script for the statschannel system test
Because of a typo, the fetch.pl script tries to extract the server
address from the input parameter 'a' instead of 's'. Fix the typo.

(cherry picked from commit aa7538fd38)
2023-07-19 13:25:17 +00:00
Tom Krizek
42d7c0e92a Merge tag 'v9.18.17' into bind-9.18 2023-07-19 14:36:57 +02:00
Mark Andrews
d865ca788f Use absolute path to locate run.gdb
(cherry picked from commit 3f7723cdff)
2023-07-19 12:37:48 +10:00
Michal Nowak
add15bd083
Remove remnants of Windows support in system test
The "uname -o" command is harmful on OpenBSD because this platform does
not know about the "-o" option. It is a permanent failure since system
tests are started with "set -e".

(cherry picked from commit ad3efede4d)
2023-07-18 17:45:35 +02:00
Tom Krizek
915e633a5d
Handle curl without HTTP/2 support in doth test 2023-07-17 16:28:49 +02:00
Tom Krizek
854b50db32
Check return codes from commands in inline test
To improve the compatibility of the inline test with the `set -e`
option, ensure all commands which are expected to pass are explicitly
checked for return code and non-zero return codes are handled.

(cherry picked from commit e5f2addcaa)
2023-07-17 15:37:18 +02:00
Tom Krizek
bca32c0c30
Handle non-zero return codes in autosign test 2023-07-17 15:30:14 +02:00