Commit graph

44184 commits

Author SHA1 Message Date
Evan Hunt
fffae65e27 simplify "dnssec-validation" configuration
In the past, "dnssec-validation" was not looked up in the global
defaults unless "dnssec-enable" was true. "dnssec-enable" has been
obsolete for several years, but dnssec-validation was still being
configured in two steps.  This commit removes the vestigial bits of
the old logic.
2025-10-29 18:28:12 +00:00
Evan Hunt
cd921cc7ef fix a "max-cache-size" configuration bug
"max-cache-size default;" is allowed, according to the documentation
and the parser, but when it's configured, named crashes due to an
INSIST that the only legal string value is "unlimited". this has
been fied.

the configuration has also been simplified. previously, we checked for
max-cache-size in view and options, then determined whether to look in
the global default options based on whether the view had recursion set.
the default value set there was only applicable to views with recursion.
now, the default is an explicit "default", which affects views with
and without recursion in different ways.

the cfg type for "max-cache-size" has been changed from
cfg_type_sizeorpercent to cfg_type_maxcachesize.
2025-10-29 18:28:12 +00:00
Štěpán Balážik
655f2452a3 chg: test: Use isctest.asyncserver in the "statistics" test
Reimplement the custom server using the asyncserver Python module.

Behavior change: The new server doesn't copy CD and DO flags and a client cookie to responses.

Merge branch 'stepan/statistics-asyncserver' into 'main'

See merge request isc-projects/bind9!10928
2025-10-29 17:45:14 +00:00
Štěpán Balážik
2ba3726207 Use isctest.asyncserver in the "statistics" test
Reimplement the custom server using the asyncserver Python module.

Behavior change: The new server doesn't copy CD and DO flags and a
client cookie to responses.
2025-10-29 18:09:52 +01:00
Michał Kępień
a556199c7b Add a response handler matching on specific QNAMEs
Add a new ResponseHandler subclass, QnameHandler, which enables
conveniently matching specific QNAMEs (without also matching their
subdomains like DomainHandler does).
2025-10-29 18:09:52 +01:00
Štěpán Balážik
848b721d1d Allow users of AsyncDnsServer to set a default RCODE
This is mostly for cases where no zone is set up and all response stubs
come to response handler with REFUSED as RCODE.

This commit allows to override the RCODE before QueryContext is passed
to response handlers.
2025-10-29 18:09:25 +01:00
Štěpán Balážik
1ff1c4d042 chg: test: Use isctest.asyncserver in the "cookie" test
Replace the custom DNS servers in the "cookie" system test with new code
based on the isctest.asyncserver module. The convoluted test logic is
split into multiple response handlers which are shared between the two
servers.

Behavior change: returned SOA records have the zone name set properly.

Merge branch 'stepan/cookie-asyncserver' into 'main'

See merge request isc-projects/bind9!10691
2025-10-29 16:06:26 +00:00
Štěpán Balážik
02c2f76e30 Use isctest.asyncserver in the "cookie" test
Replace the custom DNS servers in the "cookie" system test with new code
based on the isctest.asyncserver module. The convoluted test logic is
split into multiple response handlers which are shared between the two
servers.

Behavior change: returned SOA records have the zone name set properly.
2025-10-29 16:26:15 +01:00
Štěpán Balážik
9d79b768d7 chg: test: Use isctest.asyncserver in the "rpzrecurse" test
Replace the custom server with new implementation using the
AsyncDnsServer class.

Behavior changes:
- DNS cookie is not copied to the responses.
- CD, DO flags aren't set on responses.

Merge branch 'stepan/rpzrecurse-asyncserver' into 'main'

See merge request isc-projects/bind9!10916
2025-10-29 14:45:35 +00:00
Štěpán Balážik
1faf5c47a5 Use isctest.asyncserver in the "rpzrecurse" test
Replace the custom server with new implementation using the
AsyncDnsServer class.

Behavior changes:
- DNS cookie is not copied to the responses.
- CD, DO flags aren't set on responses.
2025-10-29 15:10:25 +01:00
Štěpán Balážik
eb29b7ff6f chg: test: Use isctest.asyncserver in the "dnssec" test
Reimplement the custom server using isctest.asyncserver. Factor most of
the logic out of the server code to two (identical) zones and only
implement the non-standard behavior.

Behavior changes:
- RRSIG Expiration and Inception is now static and covering the whole
  timeline instead of being calculated everytime.
- NXDOMAIN is returned where suitable by standard.
- Returned SOA records have properly set zone names.

Merge branch 'stepan/dnssec-asyncserver' into 'main'

See merge request isc-projects/bind9!10906
2025-10-29 13:56:15 +00:00
Štěpán Balážik
ade2e995a9 Use isctest.asyncserver in the "dnssec" test
Reimplement the custom server using isctest.asyncserver. Factor most of
the logic out of the server code to two (identical) zones and only
implement the non-standard behavior.

Behavior changes:
- RRSIG Expiration and Inception is now static and covering the whole
  timeline instead of being calculated everytime.
- NXDOMAIN is returned where suitable by standard.
- Returned SOA records have properly set zone names.
2025-10-29 14:20:02 +01:00
Mark Andrews
8c009d31ae fix: usr: Fix shutdown INSIST in dns_dispatchmgr_getblackhole
Previously, `named` could trigger an assertion in `dns_dispatchmgr_getblackhole`
while shutting down. This has been fixed.

Closes #5525

Merge branch '5525-attach-to-dispatchmgr-to-fctx' into 'main'

See merge request isc-projects/bind9!11131
2025-10-28 09:37:00 +11:00
Mark Andrews
012a47476d Fix "shutdown system test crashed in dns_dispatchmgr_getblackhole"
While shutting down view->dispatchmgr is no longer valid.  Attach
to it and when creates a fetch context and use that pointer instead
of view->dispatchmgr.  Use dns_view_getdispatchmgr to do the attaching
as view->dispatchmgr is it managed using rcu.
2025-10-28 09:02:12 +11:00
Colin Vidal
d951cedd02 new: dev: introduce cfg_obj_clone to clone a config tree
Introduce `cfg_obj_clone` which takes a `cfg_obj_t` node and clones it.
it allocates a new node, copies its scalar values and recursively
allocates child nodes, copying their scalar values as well and so on.
    
Internally, a new method `cfg_copyfunc_t` copy is added in `cfg_rep_t`,
which enables implementing a copy function specific for each
representation type a node can hold.

This is pre-require work for MR !11121 !11122 !11123

Merge branch 'colin/effective-config-clone' into 'main'

See merge request isc-projects/bind9!11124
2025-10-27 22:15:39 +01:00
Colin Vidal
1439635118 add unit test for cfg_obj_clone
Add a unit test for `cfg_obj_clone` to verify that the cloned tree
indeed has independent child nodes. The test also verifies that the
clone is semantically correct by comparing a text dump of the original
tree and the cloned one.
2025-10-27 21:33:18 +01:00
Colin Vidal
cc91a5d1ec introduce cfg_obj_clone to clone a config tree
Introduce `cfg_obj_clone` which takes a `cfg_obj_t` node and clones it.
it allocates a new node, copies its scalar values and recursively
allocates child nodes, copying their scalar values as well and so on.

Internally, a new method `cfg_copyfunc_t` copy is added in `cfg_rep_t`,
which enables implementing a copy function specific for each
representation type a node can hold.
2025-10-27 21:33:18 +01:00
Mark Andrews
1b0c84bb41 fix: nil: Remove unnecessary NULL checks causing Coverity warnings
In cfg_parse_buffer and cfg_parse_file 'pctx' was being checked
for being non-NULL when it was guaranteed to be non-NULL.  This
raised Coverity issues ID 637688 and ID 637689.

Closes #5599

Merge branch '5599-remove-unnecessary-null-checks' into 'main'

See merge request isc-projects/bind9!11154
2025-10-28 07:05:27 +11:00
Mark Andrews
3594ad04e5 Remove unnecessary NULL checks in parser.c
In cfg_parse_buffer and cfg_parse_file 'pctx' was being checked
for being non-NULL when it was guarenteed to be non-NULL.  This
raised Coverity issues ID 637688 and ID 637689.
2025-10-28 06:28:52 +11:00
Mark Andrews
b6917630f4 fix: test: Fix "hooks/conf/good-viewzonelevel.conf.j2 has hard coded library extension"
Use @DYLIB@ instead of hard coded extension "so".

Closes #5600

Merge branch '5600-fix-hooks-conf-good-viewzonelevel-conf-j2' into 'main'

See merge request isc-projects/bind9!11156
2025-10-28 06:15:32 +11:00
Mark Andrews
ba5053cddf Fix "good-viewzonelevel.conf.j2 has hard coded library extension"
Use @DYLIB@ instead of hard coded extension "so".
2025-10-28 05:40:28 +11:00
Andoni Duarte
40e8baf6d5 new: ci: Add tarball publication process to pipeline
Tarball uploading steps are to be included in the pipeline.

They are manual jobs that:

1. uploads a release tarball prepared by the "sign" job.
2. publish a previously staged release to a destination.
3. publishes a previously staged release to a well-known URL.

A template has been included since all three follow the same pattern.
Besides, rules commonly used by tag pipeline jobs.

Merge branch 'andoni/ci-release-process' into 'main'

See merge request isc-projects/bind9!11158
2025-10-27 15:51:58 +00:00
Michał Kępień
0734ec2a68 Deduplicate triggering rules for tag pipeline jobs
Define and use more YAML anchors for triggering rules commonly used by
tag pipeline jobs.  This builds on top of the work done in commit
675d9c7425, improving readability and
reuse.
2025-10-27 16:16:48 +01:00
Andoni Duarte Pintado
a27b1954f2 Add the "publish" job
Add a new SSH-confirmed GitLab CI job that publishes a previously staged
release to a well-known URL.  The details of what specifically this
entails are controlled by the staging environment.
2025-10-27 16:16:48 +01:00
Andoni Duarte Pintado
1d88db4d63 Add the "publish-private" job
Add a new SSH-confirmed GitLab CI job that publishes a previously staged
release to a destination that is not a well-known URL.  The details of
what specifically this entails are controlled by the staging
environment.
2025-10-27 16:16:48 +01:00
Andoni Duarte Pintado
a7fd3ebd0b Add the "staging" job
Add a new SSH-confirmed GitLab CI job that uploads a release tarball
prepared by the "sign" job to a staging environment specified using CI
variables.
2025-10-27 16:16:48 +01:00
Michał Kępień
868887ac65 Rework the "sign" job
Adapt the "sign" job to use the YAML template for SSH-confirmed jobs.
Make the signing process user-agnostic.
2025-10-27 16:16:48 +01:00
Michał Kępień
c61767453d Add a template for SSH-confirmed jobs
Add a YAML template for jobs that require an SSH connection to a
dedicated, locked-down runner for signing off on sensitive operations
(e.g. signing, publishing).

These jobs all follow a similar scheme:

 1. Runner prepares the necessary files in a well-known location (/tmp).
 2. Runner generates a shell script to be run by an authorized user.
 3. Runner sleeps while waiting for a signal that the script was run.
 4. Authorized user logs in to the runner over SSH and runs the script.
 5. Runner collects the relevant files and logs as job artifacts.

One additional complication is that each of the above steps needs to be
carried out under the assumption that GitLab Runner is running under a
different user account than the one used for logging in over SSH,
necessitating careful file permission handling.

Having a YAML template for jobs that need to follow the above scheme
significantly improves readability and reuse as each job only needs to
define (via the "variables" YAML key):

  - SSH_SCRIPT_RUNNER_PRE: the code the runner should execute before an
    authorized user logs in over SSH (typically: setting up files in a
    well-known location),

  - SSH_SCRIPT_CLIENT: contents of the shell script to be run by an
    authorized user,

  - SSH_SCRIPT_RUNNER_POST: the code the runner should execute after an
    authorized user runs the script over SSH (typically: artifact
    collection and cleanup).
2025-10-27 16:16:48 +01:00
Michał Kępień
8d548cbb58 Revise release directory naming
Include the Git tag in the name of the release directory rather than
just the version number.  Revise the script for the "release" job
accordingly.  This enables using the $CI_COMMIT_TAG variable in job
scripts without the need to resort to string manipulation to strip the
leading "v", improving readability.  The only place where string
manipulation is applied to the Git tag is now the "release" job itself,
to verify that the Git tag matches the version number embedded in the
source tarball name.
2025-10-27 14:00:04 +01:00
Mark Andrews
b14a6935ea fix: test: test-syncplugin.c:plugin_register was broken
The variables example2com, example3com, and example4com where not
being initalised on all paths leading to Coverity issues ID 637690,
ID 637691 and ID 637692 being raised.  In addition the tests to free
them were wrong as they depended on the unintialised variables. This
has been fixed.

Closes #5598

Merge branch '5598-properly-determine-if-name-is-dynamic' into 'main'

See merge request isc-projects/bind9!11155
2025-10-27 23:46:39 +11:00
Mark Andrews
de81887c2a test-syncplugin.c:plugin_register was broken
The variables example2com, example3com, and example4com where not
being initalised on all paths leading to Coverity issues ID 637690,
ID 637691 and ID 637692 being raised.  In addition the tests to free
them were wrong as they depended on the unintialised variables. This
has been fixed.
2025-10-27 23:00:08 +11:00
Michał Kępień
90408b813d chg: dev: Stop prettifying JSON statistics
Passing the JSON_C_TO_STRING_PRETTY flag to
json_object_to_json_string_ext() makes the latter produce prettified
JSON output.  This results in a huge amount of redundant whitespace
being inserted into each HTTP response (whitespace amounts to about 40%
of the entire JSON payload).

The bandwidth cost can be amortized by enabling HTTP compression on the
client side ("Accept-Encoding: deflate"), but that does not affect the
size of data at rest.

Use the JSON_C_TO_STRING_PLAIN flag instead of JSON_C_TO_STRING_PRETTY
to minimize the size of JSON responses sent via the statistics channel.
External tools should be used for prettifying JSON data.

Closes #3304

Merge branch '3304-stop-prettifying-json-statistics' into 'main'

See merge request isc-projects/bind9!10786
2025-10-27 10:57:58 +01:00
Michał Kępień
4797b2a155
Stop prettifying JSON statistics
Passing the JSON_C_TO_STRING_PRETTY flag to
json_object_to_json_string_ext() makes the latter produce prettified
JSON output.  This results in a huge amount of redundant whitespace
being inserted into each HTTP response (whitespace amounts to about 40%
of the entire JSON payload).

The bandwidth cost can be amortized by enabling HTTP compression on the
client side ("Accept-Encoding: deflate"), but that does not affect the
size of data at rest.

Use the JSON_C_TO_STRING_PLAIN flag instead of JSON_C_TO_STRING_PRETTY
to minimize the size of JSON responses sent via the statistics channel.
External tools should be used for prettifying JSON data.
2025-10-27 10:56:38 +01:00
Michał Kępień
3219874fe7 chg: test: Properly process JSON and XML in tests
Processing JSON and XML using `grep` and `sed` is error-prone, overly
lax in some ways, overly strict in others, and neither accurate nor
expressive.  Use `jq` and `xmllint` with XPath expressions to make
things right in system tests.

See #3304

Merge branch '3304-properly-process-json-and-xml-in-tests' into 'main'

See merge request isc-projects/bind9!10942
2025-10-25 08:00:41 +02:00
Michał Kępień
5110dbacb9
Remove unused Perl scripts
The traffic-json.pl and traffic-xml.pl scripts that were used in the
"statschannel" system test in the past became dead code when commit
1202fd912a rewrote parts of that test to
Python.  Remove those scripts.
2025-10-25 07:37:48 +02:00
Michał Kępień
d08addc2be
Remove unused xmllint-html.sh script
There are no longer any HTML files in the BIND 9 source repository.
Remove the xmllint-html.sh script that was used in the past to check
those for errors.
2025-10-25 07:37:48 +02:00
Michał Kępień
5872000d9e
Use xmllint in system tests inspecting XML data
Inspecting XML data using sed and grep is error-prone, overly lax in
some ways, overly strict in others, and neither accurate nor expressive.
Use xmllint and XPath expressions for inspecting XML data in the
"statistics", "statschannel", and "synthfromdnssec" system tests to
address these deficiencies.
2025-10-25 07:37:48 +02:00
Michał Kępień
85773d4d21
Detect xmllint at build time
Detect whether and where the xmllint utility is available at build time,
so that it can be used in system tests.  If the tool is not found,
specific checks employing it will be skipped.
2025-10-25 07:37:48 +02:00
Michał Kępień
b494e02761
Use jq in system tests inspecting JSON data
Inspecting JSON data using grep is error-prone, overly lax in some ways,
overly strict in others, and neither accurate nor expressive.  Use jq
for inspecting JSON data in the "statschannel" and "synthfromdnssec"
system tests to address these deficiencies.
2025-10-25 07:37:48 +02:00
Michał Kępień
273b4bbfd7
Detect jq at build time
Detect whether and where the jq utility is available at build time, so
that it can be used in system tests.  If the tool is not found, specific
checks employing it will be skipped.
2025-10-25 07:37:48 +02:00
Ondřej Surý
08ccc8bea8 chg: dev: Fix assertion failure from arc4random_uniform with invalid limit
When the arc4random_uniform() is called on NetBSD with upper_bound that
makes no sense statistically (0 or 1), the call crashes the calling
program.  Fix this by returning 0 when upper bound is < 2 as does Linux,
FreeBSD and NetBSD.  (Hint: System CSPRNG should never crash.)

Closes #5596

Merge branch '5596-fix-isc_random_uniform-on-NetBSD' into 'main'

See merge request isc-projects/bind9!11147
2025-10-24 22:20:51 +02:00
Ondřej Surý
871bce312b Fix assertion failure from arc4random_uniform with invalid limit
When the arc4random_uniform() is called on NetBSD with upper_bound that
makes no sense statistically (0 or 1), the call crashes the calling
program.  Fix this by returning 0 when upper bound is < 2 as does Linux,
FreeBSD and NetBSD.  (Hint: System CSPRNG should never crash.)
2025-10-24 22:20:43 +02:00
Ondřej Surý
92dfbbff9e rem: test: Drop the unit test for testing randomness
Since we are using system routines for randomness, there's no point
in spending time and run the statistical suite for testing PRNG.

Merge branch 'ondrej/drop-random-unit-test' into 'main'

See merge request isc-projects/bind9!11137
2025-10-24 21:17:08 +02:00
Ondřej Surý
90b3def5e9
Drop the unit test for testing randomness
Since we are using system routines for randomness, there's no point
in spending time and run the statistical suite for testing PRNG.
2025-10-24 21:16:55 +02:00
Michal Nowak
6badc6e939 chg: pkg: minimal meson version required is 1.3.0
The minimal required meson version is 1.3.0.

Where distribution repositories don't provide meson 1.3.0 or newer, meson from PyPI may be used instead.

Merge branch 'aydin/meson-bump-version' into 'main'

See merge request isc-projects/bind9!10997
2025-10-24 18:35:00 +02:00
Aydın Mercan
9fd2632155
add muon's static analyzer to CI
Muon features a basic static analyzer that is functional enough to have
caught several meson mistakes.
2025-10-24 16:42:29 +02:00
Michal Nowak
c4f3aaeea1
Drop the NO_BUILD_TEST_PREREQ hack
With the updated meson, jammy does not need to avoid the
"meson-test-prereq" target.
2025-10-24 16:42:27 +02:00
Aydın Mercan
881ecfd8e5
get rid of unused meson variables
Found by muon's own static analyzer.
2025-10-24 16:42:26 +02:00
Aydın Mercan
9eaf32db1a
bump the minimum meson version to 1.3.0
After a couple releases, it appears that the minimum version can be
increased without much trouble.

Because meson only requires python 3.7 or greater, most supported
distributions can run a newer meson without having to deal with
additional dependencies or a new python version.
2025-10-24 16:42:24 +02:00
Michal Nowak
365f9f04d6 fix: pkg: fix fuzzing builds
Previously fuzzing builds were broken due to some typos in the `meson.build`.

Merge branch 'aydin/fuzz-meson-fix' into 'main'

See merge request isc-projects/bind9!11052
2025-10-24 15:37:36 +02:00