]> git.ipfire.org Git - thirdparty/pdns.git/log
thirdparty/pdns.git
7 months agodnsdist: Support inline and "detached to a file" Lua code in YAML
Remi Gacogne [Tue, 7 Jan 2025 15:28:45 +0000 (16:28 +0100)] 
dnsdist: Support inline and "detached to a file" Lua code in YAML

7 months agodnsdist: Fix a small formatting issue
Remi Gacogne [Mon, 30 Dec 2024 08:20:38 +0000 (09:20 +0100)] 
dnsdist: Fix a small formatting issue

7 months agodnsdist: Reduce the complexity of the YAML loading function
Remi Gacogne [Fri, 27 Dec 2024 16:30:42 +0000 (17:30 +0100)] 
dnsdist: Reduce the complexity of the YAML loading function

7 months agodnsdist: Implement XSK and eBPF via YAML
Remi Gacogne [Fri, 27 Dec 2024 14:54:43 +0000 (15:54 +0100)] 
dnsdist: Implement XSK and eBPF via YAML

7 months agodnsdist: Add more YAML example to the documentation
Remi Gacogne [Fri, 27 Dec 2024 12:23:33 +0000 (13:23 +0100)] 
dnsdist: Add more YAML example to the documentation

7 months agodnsdist: Remove unused Rust validation functions
Remi Gacogne [Fri, 27 Dec 2024 12:01:11 +0000 (13:01 +0100)] 
dnsdist: Remove unused Rust validation functions

7 months agodnsdist: Handle the default LB policy in YAML configuration
Remi Gacogne [Fri, 27 Dec 2024 11:59:47 +0000 (12:59 +0100)] 
dnsdist: Handle the default LB policy in YAML configuration

7 months agodnsdist: Handle DNSCrypt in the YAML configuration
Remi Gacogne [Fri, 27 Dec 2024 11:58:58 +0000 (12:58 +0100)] 
dnsdist: Handle DNSCrypt in the YAML configuration

7 months agodnsdist: Generate the YAML documentation
Remi Gacogne [Fri, 27 Dec 2024 11:57:19 +0000 (12:57 +0100)] 
dnsdist: Generate the YAML documentation

7 months agodnstap: Clean up the dnstap header
Remi Gacogne [Tue, 24 Dec 2024 16:14:14 +0000 (17:14 +0100)] 
dnstap: Clean up the dnstap header

7 months agodnsdist: Add regression tests using the yaml configuration
Remi Gacogne [Tue, 24 Dec 2024 16:13:05 +0000 (17:13 +0100)] 
dnsdist: Add regression tests using the yaml configuration

7 months agodnsdist: Clean up the dnsdist protobuf header
Remi Gacogne [Tue, 24 Dec 2024 16:12:34 +0000 (17:12 +0100)] 
dnsdist: Clean up the dnsdist protobuf header

7 months agodnsdist: Add a tool to generate the yaml configuration
Remi Gacogne [Tue, 24 Dec 2024 16:10:08 +0000 (17:10 +0100)] 
dnsdist: Add a tool to generate the yaml configuration

7 months agodnsdist: Load the yaml configuration
Remi Gacogne [Tue, 24 Dec 2024 16:06:44 +0000 (17:06 +0100)] 
dnsdist: Load the yaml configuration

7 months agodnsdist: Use the rules factory to unit test them
Remi Gacogne [Tue, 24 Dec 2024 15:59:24 +0000 (16:59 +0100)] 
dnsdist: Use the rules factory to unit test them

7 months agodnsdist: Add yaml configuration
Remi Gacogne [Tue, 24 Dec 2024 15:53:19 +0000 (16:53 +0100)] 
dnsdist: Add yaml configuration

7 months agodnsdist: Actually move selectors and actions to proper factories
Remi Gacogne [Tue, 24 Dec 2024 15:33:37 +0000 (16:33 +0100)] 
dnsdist: Actually move selectors and actions to proper factories

7 months agodnsdist: Generate C++ factory and Lua bindings code from YAML definitions
Remi Gacogne [Tue, 24 Dec 2024 15:17:37 +0000 (16:17 +0100)] 
dnsdist: Generate C++ factory and Lua bindings code from YAML definitions

7 months agodnsdist: Add an optional YAML configuration switch
Remi Gacogne [Fri, 23 Aug 2024 13:17:33 +0000 (15:17 +0200)] 
dnsdist: Add an optional YAML configuration switch

7 months agodnsdist: Move the Lua bindings for single items to a separate file
Remi Gacogne [Tue, 24 Dec 2024 14:34:15 +0000 (15:34 +0100)] 
dnsdist: Move the Lua bindings for single items to a separate file

7 months agoQClass: Construct from a string
Remi Gacogne [Tue, 24 Dec 2024 14:20:51 +0000 (15:20 +0100)] 
QClass: Construct from a string

7 months agodnsdist: Fix error message for invalid TLS version
Remi Gacogne [Tue, 24 Dec 2024 14:20:19 +0000 (15:20 +0100)] 
dnsdist: Fix error message for invalid TLS version

7 months agodnsdist: Move rules to dnsdist-rules-factory.hh
Remi Gacogne [Tue, 24 Dec 2024 14:10:46 +0000 (15:10 +0100)] 
dnsdist: Move rules to dnsdist-rules-factory.hh

7 months agodnsdist: Move DNSRule declaration to dnsdist-rules.hh
Remi Gacogne [Tue, 24 Dec 2024 14:06:29 +0000 (15:06 +0100)] 
dnsdist: Move DNSRule declaration to dnsdist-rules.hh

7 months agodnsdist: Add a dynamic block rules group register
Remi Gacogne [Tue, 24 Dec 2024 13:48:35 +0000 (14:48 +0100)] 
dnsdist: Add a dynamic block rules group register

7 months agodnsdist: Move HTTP rules to dnsdist-rules.cc
Remi Gacogne [Tue, 24 Dec 2024 13:41:29 +0000 (14:41 +0100)] 
dnsdist: Move HTTP rules to dnsdist-rules.cc

7 months agodnsdist: Stop using Actions for regular processing
Remi Gacogne [Tue, 24 Dec 2024 11:50:41 +0000 (12:50 +0100)] 
dnsdist: Stop using Actions for regular processing

7 months agodnsdist: Stop using `LimitTTLResponseAction` to limit TTL
Remi Gacogne [Tue, 24 Dec 2024 11:17:36 +0000 (12:17 +0100)] 
dnsdist: Stop using `LimitTTLResponseAction` to limit TTL

7 months agodnsdist: Move handling of backend parameters out of the Lua code
Remi Gacogne [Tue, 24 Dec 2024 11:08:30 +0000 (12:08 +0100)] 
dnsdist: Move handling of backend parameters out of the Lua code

7 months agodnsdist: Properly handle built-in LB policies
Remi Gacogne [Tue, 24 Dec 2024 10:57:28 +0000 (11:57 +0100)] 
dnsdist: Properly handle built-in LB policies

7 months agodnsdist: Make SNMP configuration immutable
Remi Gacogne [Tue, 24 Dec 2024 10:53:30 +0000 (11:53 +0100)] 
dnsdist: Make SNMP configuration immutable

7 months agodnsdist: Fix automatic computation of the number of TCP workers
Remi Gacogne [Tue, 24 Dec 2024 10:43:07 +0000 (11:43 +0100)] 
dnsdist: Fix automatic computation of the number of TCP workers

The previous method didn't account for TCP workers for backends.

7 months agodnsdist: Move functions from dnsdist-actions.hh to dnsdist-actions.cc
Remi Gacogne [Tue, 24 Dec 2024 10:38:59 +0000 (11:38 +0100)] 
dnsdist: Move functions from dnsdist-actions.hh to dnsdist-actions.cc

7 months agodnsdist: Add a yaml-based description of settings
Remi Gacogne [Tue, 24 Dec 2024 10:27:12 +0000 (11:27 +0100)] 
dnsdist: Add a yaml-based description of settings

7 months agodnsdist: Add yaml-based descriptions of actions and selectors
Remi Gacogne [Tue, 24 Dec 2024 10:26:50 +0000 (11:26 +0100)] 
dnsdist: Add yaml-based descriptions of actions and selectors

7 months agoMerge pull request #15030 from rgacogne/ddist-remove-tlscontext
Remi Gacogne [Thu, 16 Jan 2025 08:41:48 +0000 (09:41 +0100)] 
Merge pull request #15030 from rgacogne/ddist-remove-tlscontext

dnsdist: Remove `TLSContext`

7 months agoMerge pull request #15037 from rgacogne/ddist-document-stat-node-ffi-children
Remi Gacogne [Thu, 16 Jan 2025 08:31:18 +0000 (09:31 +0100)] 
Merge pull request #15037 from rgacogne/ddist-document-stat-node-ffi-children

dnsdist: Document `dnsdist_ffi_stat_node_get_children_*` return children+node stats

7 months agoIf the control console fd is closed, handle this as a "quit" command. 15041/head
Miod Vallat [Wed, 15 Jan 2025 14:43:13 +0000 (15:43 +0100)] 
If the control console fd is closed, handle this as a "quit" command.

Fixes #1694

7 months agoConst me if you can. 15039/head
Miod Vallat [Wed, 15 Jan 2025 13:03:13 +0000 (14:03 +0100)] 
Const me if you can.

7 months agoAppease clang-tidy
Otto Moerbeek [Wed, 15 Jan 2025 12:06:31 +0000 (13:06 +0100)] 
Appease clang-tidy

7 months agoRepresent scope as a prefix length and not a full Netmask (ip + prefix) object
Otto Moerbeek [Tue, 14 Jan 2025 16:03:39 +0000 (17:03 +0100)] 
Represent scope as a prefix length and not a full Netmask (ip + prefix) object

7 months agoThrow a few bones to clang-tidy.
Miod Vallat [Wed, 15 Jan 2025 09:24:17 +0000 (10:24 +0100)] 
Throw a few bones to clang-tidy.

7 months agoUse a container to simplify command dispatch.
Miod Vallat [Wed, 15 Jan 2025 08:40:46 +0000 (09:40 +0100)] 
Use a container to simplify command dispatch.

7 months agoSplit main() into one routine per command.
Miod Vallat [Wed, 15 Jan 2025 07:48:17 +0000 (08:48 +0100)] 
Split main() into one routine per command.

This unfortunately removes the "hash-password" easter egg.

7 months agoUpdate docs/settings.rst
Dyno Wibowo [Wed, 15 Jan 2025 00:56:52 +0000 (07:56 +0700)] 
Update docs/settings.rst

Co-authored-by: Peter van Dijk <peter.van.dijk@powerdns.com>
7 months agoTidy
Otto Moerbeek [Tue, 14 Jan 2025 15:20:36 +0000 (16:20 +0100)] 
Tidy

7 months agoFix estimate of bitmask type 15038/head
Otto Moerbeek [Tue, 14 Jan 2025 13:13:42 +0000 (14:13 +0100)] 
Fix estimate of bitmask type

7 months agoMerge pull request #15036 from rgacogne/ddist-improve-secpoll-msgs
Remi Gacogne [Tue, 14 Jan 2025 11:18:56 +0000 (12:18 +0100)] 
Merge pull request #15036 from rgacogne/ddist-improve-secpoll-msgs

dnsdist: Improve error messages on security polling failures

7 months agoIntroduce size *estimate* for record cache allocated size
Otto Moerbeek [Wed, 18 Dec 2024 11:33:58 +0000 (12:33 +0100)] 
Introduce size *estimate* for record cache allocated size

7 months agodnsdist: Document `dnsdist_ffi_stat_node_get_children_*` return children+node stats 15037/head
Remi Gacogne [Tue, 14 Jan 2025 10:17:38 +0000 (11:17 +0100)] 
dnsdist: Document `dnsdist_ffi_stat_node_get_children_*` return children+node stats

The `dnsdist_ffi_stat_node_get_children_*` methods return the sum of
the queries or responses received for the children of a node AND the node
itself. It's quite unexpected but breaking the existing behaviour now would be painful.

7 months agoMerge pull request #15029 from rgacogne/ddist-doh3-set-http-response
Remi Gacogne [Tue, 14 Jan 2025 10:13:26 +0000 (11:13 +0100)] 
Merge pull request #15029 from rgacogne/ddist-doh3-set-http-response

dnsdist: Add the ability to set custom HTTP responses over DoH3

7 months agodnsdist: Delint dnsdist-secpoll.cc 15036/head
Remi Gacogne [Tue, 14 Jan 2025 10:10:46 +0000 (11:10 +0100)] 
dnsdist: Delint dnsdist-secpoll.cc

7 months agochore: Brush up of PowerDNS Documentation Site 15034/head
milzi234 [Tue, 14 Jan 2025 09:02:13 +0000 (10:02 +0100)] 
chore: Brush up of PowerDNS Documentation Site

- Upgraded to Bootstrap 5.3.3 for improved styling and responsiveness.
- Redesigned the documentation site to align with the visual style of other PowerDNS sites.
- Enhanced the version selector functionality:
  - Fetches and displays available versions from a `versions.json` file.
  - Supports additional and legacy versions with a dropdown for more options.
  - Highlights the latest version and provides a fallback for legacy versions if fetching fails.
- Improved user interface with a modern look and feel, including updated navigation, hero section, and product cards.

7 months agodnsdist: Reformat dnsdist-secpoll.cc
Remi Gacogne [Tue, 14 Jan 2025 09:43:26 +0000 (10:43 +0100)] 
dnsdist: Reformat dnsdist-secpoll.cc

7 months agodnsdist: Improve error messages on security polling failures
Remi Gacogne [Tue, 14 Jan 2025 09:42:37 +0000 (10:42 +0100)] 
dnsdist: Improve error messages on security polling failures

7 months agoMerge pull request #15031 from omoerbeek/rec-prep-5.2.0
Otto Moerbeek [Tue, 14 Jan 2025 09:02:32 +0000 (10:02 +0100)] 
Merge pull request #15031 from omoerbeek/rec-prep-5.2.0

rec: prep for rec-5.2.0

7 months agoupdated docs for 'direct-dnskey-signature'
d-wibowo [Tue, 14 Jan 2025 01:19:15 +0000 (08:19 +0700)] 
updated docs for 'direct-dnskey-signature'

7 months agoended regression test file in newline
d-wibowo [Tue, 14 Jan 2025 01:14:27 +0000 (08:14 +0700)] 
ended regression test file in newline

7 months agoMerge pull request #15033 from omoerbeek/rec-rpz-tmp-file-deleter
Otto Moerbeek [Mon, 13 Jan 2025 16:03:54 +0000 (17:03 +0100)] 
Merge pull request #15033 from omoerbeek/rec-rpz-tmp-file-deleter

rec: delete temp file on failure to dump RPZ file

7 months agoDon't forget to delete the pointer itself 15033/head
Otto Moerbeek [Mon, 13 Jan 2025 14:45:00 +0000 (15:45 +0100)] 
Don't forget to delete the pointer itself

7 months agorec: delete temp file on failure to dump RPZ file
Otto Moerbeek [Mon, 13 Jan 2025 13:21:35 +0000 (14:21 +0100)] 
rec: delete temp file on failure to dump RPZ file

7 months agoUpdate dnsdist-resolver.lua 15032/head
Denis Kadyshev [Mon, 13 Jan 2025 11:54:35 +0000 (18:54 +0700)] 
Update dnsdist-resolver.lua

7 months agoDelete dockerdata/dnsdist-resolver.py
Denis Kadyshev [Mon, 13 Jan 2025 11:48:41 +0000 (18:48 +0700)] 
Delete dockerdata/dnsdist-resolver.py

7 months agoUpdate Dockerfile-dnsdist
Denis Kadyshev [Mon, 13 Jan 2025 11:46:59 +0000 (18:46 +0700)] 
Update Dockerfile-dnsdist

7 months agoMerge pull request #15025 from miodvallat/dare-to-fail
Miod Vallat [Mon, 13 Jan 2025 10:49:41 +0000 (11:49 +0100)] 
Merge pull request #15025 from miodvallat/dare-to-fail

pdnsutil add-zone-key: more checks

7 months agorec: prep for rec-5.2.0 15031/head
Otto Moerbeek [Mon, 13 Jan 2025 08:48:44 +0000 (09:48 +0100)] 
rec: prep for rec-5.2.0

7 months agoMerge pull request #14996 from miodvallat/lua_finer_intervals
Miod Vallat [Mon, 13 Jan 2025 10:12:18 +0000 (11:12 +0100)] 
Merge pull request #14996 from miodvallat/lua_finer_intervals

Lua up checks: finer control

7 months agoMerge pull request #15004 from miodvallat/old_lmdb_schema_leftovers
Miod Vallat [Mon, 13 Jan 2025 10:08:58 +0000 (11:08 +0100)] 
Merge pull request #15004 from miodvallat/old_lmdb_schema_leftovers

[lmdb] Ignore unreachable TSIG keys in getTSIGKeys

7 months agoImplement optional interval and minimumFailure options in if*up. 14996/head
Miod Vallat [Wed, 18 Dec 2024 14:11:23 +0000 (15:11 +0100)] 
Implement optional interval and minimumFailure options in if*up.

7 months agoMerge pull request #10692 from n0tlu5/sulton/self-weighted
Miod Vallat [Mon, 13 Jan 2025 08:15:28 +0000 (09:15 +0100)] 
Merge pull request #10692 from n0tlu5/sulton/self-weighted

auth: added self weighted lua function

7 months agoMore clang-tidy conformance. 10692/head
Miod Vallat [Mon, 13 Jan 2025 06:41:16 +0000 (07:41 +0100)] 
More clang-tidy conformance.

7 months agodnsdist: clang-tidy 15029/head
Remi Gacogne [Fri, 10 Jan 2025 11:51:15 +0000 (12:51 +0100)] 
dnsdist: clang-tidy

7 months agodnsdist: Fix indentation
Remi Gacogne [Fri, 10 Jan 2025 10:53:38 +0000 (11:53 +0100)] 
dnsdist: Fix indentation

7 months agodnsdist: Apply Miod's suggestion
Remi Gacogne [Fri, 10 Jan 2025 10:50:08 +0000 (11:50 +0100)] 
dnsdist: Apply Miod's suggestion

Co-authored-by: Miod Vallat <miod.vallat@open-xchange.com>
7 months agodnsdist: Add the ability to set custom HTTP responses over DoH3
Remi Gacogne [Fri, 10 Jan 2025 10:29:15 +0000 (11:29 +0100)] 
dnsdist: Add the ability to set custom HTTP responses over DoH3

7 months agodnsdist: Remove `TLSContext` 15030/head
Remi Gacogne [Fri, 10 Jan 2025 14:13:33 +0000 (15:13 +0100)] 
dnsdist: Remove `TLSContext`

This PR removes the `TLSContext` class which is a duplicate of the
more powerful `TLSFrontend` one, and rename `showTLSContexts` to
`showTLSFrontends` to be consistent.

7 months agoMerge pull request #15021 from omoerbeek/rec-daily-bulk
Otto Moerbeek [Fri, 10 Jan 2025 13:42:20 +0000 (14:42 +0100)] 
Merge pull request #15021 from omoerbeek/rec-daily-bulk

rec: run daily bulk test on ubicloud

7 months agoRename var to UBICLOUD_DAILY_REC_BULKTEST 15021/head
Otto Moerbeek [Fri, 10 Jan 2025 12:49:05 +0000 (13:49 +0100)] 
Rename var to UBICLOUD_DAILY_REC_BULKTEST

7 months agoMerge pull request #15028 from omoerbeek/dnsdist-fix-build-no-doh3
Otto Moerbeek [Fri, 10 Jan 2025 11:40:50 +0000 (12:40 +0100)] 
Merge pull request #15028 from omoerbeek/dnsdist-fix-build-no-doh3

dnsdist: fix doh3-less compile

7 months agodnsdist: fix doh3-less compile 15028/head
Otto Moerbeek [Fri, 10 Jan 2025 10:11:56 +0000 (11:11 +0100)] 
dnsdist: fix doh3-less compile

7 months agoMerge pull request #15018 from omoerbeek/rec-bulktest-ubicloud
Otto Moerbeek [Fri, 10 Jan 2025 10:16:04 +0000 (11:16 +0100)] 
Merge pull request #15018 from omoerbeek/rec-bulktest-ubicloud

rec: add bigger (and v6 enabled) bulk test on ubicloud

7 months agoMerge pull request #14617 from omoerbeek/rec-dedup-recs
Otto Moerbeek [Fri, 10 Jan 2025 09:13:28 +0000 (10:13 +0100)] 
Merge pull request #14617 from omoerbeek/rec-dedup-recs

rec: dedup records

7 months agoMerge pull request #15026 from omoerbeek/dnsdist-testrunner-libssl
Remi Gacogne [Fri, 10 Jan 2025 09:12:17 +0000 (10:12 +0100)] 
Merge pull request #15026 from omoerbeek/dnsdist-testrunner-libssl

dnsdist:: add -lssl to testrunner link, needed on OpenBSD at least

7 months agoWe also want to run this new regression test on PRs, but those do not get the vars... 15018/head
Otto Moerbeek [Fri, 10 Jan 2025 08:55:24 +0000 (09:55 +0100)] 
We also want to run this new regression test on PRs, but those do not get the vars from the pdns repo

7 months agoMerge pull request #14948 from neheb/ll
Remi Gacogne [Fri, 10 Jan 2025 08:50:11 +0000 (09:50 +0100)] 
Merge pull request #14948 from neheb/ll

clang-tidy: simplify some algorithms

7 months agoMerge pull request #14970 from neheb/jj
Peter van Dijk [Fri, 10 Jan 2025 08:43:50 +0000 (09:43 +0100)] 
Merge pull request #14970 from neheb/jj

boost > std optional

7 months agoMove workflow to misc-dailies and rename
Otto Moerbeek [Fri, 10 Jan 2025 08:41:32 +0000 (09:41 +0100)] 
Move workflow to misc-dailies and rename

7 months agodnsdist:: add -lssl to testrunner link, needed on OpenBSD at least 15026/head
Otto Moerbeek [Fri, 10 Jan 2025 08:36:22 +0000 (09:36 +0100)] 
dnsdist:: add -lssl to testrunner link, needed on OpenBSD at least

7 months agoSeparate speedtest setup, process review comments 14617/head
Otto Moerbeek [Tue, 7 Jan 2025 08:56:35 +0000 (09:56 +0100)] 
Separate speedtest setup, process review comments

7 months agoMake add-zone-key try to retrieve it back to confirm operation. 15025/head
Miod Vallat [Thu, 9 Jan 2025 14:55:16 +0000 (15:55 +0100)] 
Make add-zone-key try to retrieve it back to confirm operation.

7 months agoSilence clang-tidy
Miod Vallat [Thu, 9 Jan 2025 14:14:29 +0000 (15:14 +0100)] 
Silence clang-tidy

7 months agoMove add-zone-key logic to its own routine. NFC
Miod Vallat [Thu, 9 Jan 2025 14:05:55 +0000 (15:05 +0100)] 
Move add-zone-key logic to its own routine. NFC

7 months agoMerge pull request #14946 from rgacogne/ddist-add-test-for-rewriting-response-code...
Remi Gacogne [Thu, 9 Jan 2025 13:16:36 +0000 (14:16 +0100)] 
Merge pull request #14946 from rgacogne/ddist-add-test-for-rewriting-response-code-via-lua

dnsdist: Add a regression test rewriting the response code via Lua

7 months agoMerge pull request #15002 from rgacogne/ddist-doh3-bindings
Remi Gacogne [Thu, 9 Jan 2025 13:10:58 +0000 (14:10 +0100)] 
Merge pull request #15002 from rgacogne/ddist-doh3-bindings

dnsdist: Add DoH3 headers, query string, path and scheme bindings

7 months agoMerge pull request #15023 from miodvallat/autoconf-ate-my-brackets
Miod Vallat [Thu, 9 Jan 2025 11:23:58 +0000 (12:23 +0100)] 
Merge pull request #15023 from miodvallat/autoconf-ate-my-brackets

autohell regression fix

7 months agoMerge pull request #15003 from rgacogne/ddist-regression-test-python3.13
Remi Gacogne [Thu, 9 Jan 2025 10:46:00 +0000 (11:46 +0100)] 
Merge pull request #15003 from rgacogne/ddist-regression-test-python3.13

dnsdist: Fix regression tests with Python 3.13

7 months agoRemove spurious ] causing shell complaints during configure. 15023/head
Miod Vallat [Thu, 9 Jan 2025 09:56:59 +0000 (10:56 +0100)] 
Remove spurious ] causing shell complaints during configure.

7 months agoadded regression test for direct dnskey signature
d-wibowo [Thu, 9 Jan 2025 04:23:05 +0000 (11:23 +0700)] 
added regression test for direct dnskey signature

7 months agoMake bigger and run on ubicloud
Otto Moerbeek [Wed, 8 Jan 2025 15:13:27 +0000 (16:13 +0100)] 
Make bigger and run on ubicloud

7 months agoUse matrix
Otto Moerbeek [Wed, 8 Jan 2025 14:57:37 +0000 (15:57 +0100)] 
Use matrix