From df164e07c892b8c5e4201ca73a4de75cb78c8370 Mon Sep 17 00:00:00 2001 From: Maurus Decimus <11444311+mdecimus@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:13:45 +0200 Subject: [PATCH] DANE: Verify DNSSEC is supported by the resolver before attempting to validate TLSA records --- CHANGELOG.md | 11 ++++ Cargo.lock | 62 +++++++++++----------- crates/common/Cargo.toml | 2 +- crates/common/src/config/smtp/resolver.rs | 64 +++++++++++++++++++---- crates/coordinator/Cargo.toml | 2 +- crates/dav-proto/Cargo.toml | 2 +- crates/dav/Cargo.toml | 2 +- crates/directory/Cargo.toml | 2 +- crates/email/Cargo.toml | 2 +- crates/groupware/Cargo.toml | 2 +- crates/http-proto/Cargo.toml | 2 +- crates/http/Cargo.toml | 2 +- crates/imap-proto/Cargo.toml | 2 +- crates/imap/Cargo.toml | 2 +- crates/jmap-proto/Cargo.toml | 2 +- crates/jmap/Cargo.toml | 2 +- crates/main/Cargo.toml | 2 +- crates/managesieve/Cargo.toml | 2 +- crates/migration/Cargo.toml | 2 +- crates/nlp/Cargo.toml | 2 +- crates/pop3/Cargo.toml | 2 +- crates/registry/Cargo.toml | 2 +- crates/services/Cargo.toml | 2 +- crates/smtp/Cargo.toml | 2 +- crates/smtp/src/outbound/delivery.rs | 7 ++- crates/spam-filter/Cargo.toml | 2 +- crates/store/Cargo.toml | 2 +- crates/trc/Cargo.toml | 2 +- crates/trc/event-macro/Cargo.toml | 2 +- crates/types/Cargo.toml | 2 +- crates/utils/Cargo.toml | 2 +- crates/utils/proc-macros/Cargo.toml | 2 +- tests/Cargo.toml | 2 +- 33 files changed, 129 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82622869..84b608e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [0.16.11] - 2026-06-XX + +If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If you are upgrading from v0.15.x and below, please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_16.md) for more information on how to upgrade from previous versions. + +## Added + +## Changed + +## Fixed +- DANE: Verify DNSSEC is supported by the resolver before attempting to validate TLSA records. + ## [0.16.10] - 2026-06-21 If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If you are upgrading from v0.15.x and below, please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_16.md) for more information on how to upgrade from previous versions. diff --git a/Cargo.lock b/Cargo.lock index 94285291..0a9830dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "common" -version = "0.16.10" +version = "0.16.11" dependencies = [ "aes-gcm-siv", "ahash", @@ -1431,7 +1431,7 @@ checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "coordinator" -version = "0.16.10" +version = "0.16.11" dependencies = [ "async-nats", "futures", @@ -1784,7 +1784,7 @@ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "dav" -version = "0.16.10" +version = "0.16.11" dependencies = [ "calcard", "chrono", @@ -1807,7 +1807,7 @@ dependencies = [ [[package]] name = "dav-proto" -version = "0.16.10" +version = "0.16.11" dependencies = [ "calcard", "chrono", @@ -2005,7 +2005,7 @@ dependencies = [ [[package]] name = "directory" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "argon2", @@ -2257,7 +2257,7 @@ dependencies = [ [[package]] name = "email" -version = "0.16.10" +version = "0.16.11" dependencies = [ "aes 0.9.1", "aes-gcm", @@ -2364,7 +2364,7 @@ dependencies = [ [[package]] name = "event_macro" -version = "0.16.10" +version = "0.16.11" dependencies = [ "proc-macro2", "quote", @@ -2880,7 +2880,7 @@ dependencies = [ [[package]] name = "groupware" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "calcard", @@ -3162,7 +3162,7 @@ dependencies = [ [[package]] name = "http" -version = "0.16.10" +version = "0.16.11" dependencies = [ "async-stream", "base64 0.22.1", @@ -3262,7 +3262,7 @@ dependencies = [ [[package]] name = "http_proto" -version = "0.16.10" +version = "0.16.11" dependencies = [ "common", "compact_str", @@ -3558,7 +3558,7 @@ checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" [[package]] name = "imap" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "common", @@ -3585,7 +3585,7 @@ dependencies = [ [[package]] name = "imap_proto" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "chrono", @@ -3798,7 +3798,7 @@ dependencies = [ [[package]] name = "jmap" -version = "0.16.10" +version = "0.16.11" dependencies = [ "aes-gcm", "aes-gcm-siv", @@ -3886,7 +3886,7 @@ dependencies = [ [[package]] name = "jmap_proto" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "calcard", @@ -4388,7 +4388,7 @@ dependencies = [ [[package]] name = "managesieve" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "common", @@ -4530,7 +4530,7 @@ checksum = "c797b9d6bb23aab2fc369c65f871be49214f5c759af65bde26ffaaa2b646b492" [[package]] name = "migration" -version = "0.16.10" +version = "0.16.11" dependencies = [ "base64 0.22.1", "common", @@ -4747,7 +4747,7 @@ dependencies = [ [[package]] name = "nlp" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "bincode 1.3.3", @@ -5540,7 +5540,7 @@ dependencies = [ [[package]] name = "pop3" -version = "0.16.10" +version = "0.16.11" dependencies = [ "common", "directory", @@ -5723,7 +5723,7 @@ dependencies = [ [[package]] name = "proc_macros" -version = "0.16.10" +version = "0.16.11" dependencies = [ "proc-macro2", "quote", @@ -6346,7 +6346,7 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "registry" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "hashify", @@ -7260,7 +7260,7 @@ dependencies = [ [[package]] name = "services" -version = "0.16.10" +version = "0.16.11" dependencies = [ "aes-gcm", "aes-gcm-siv", @@ -7518,7 +7518,7 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smtp" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "base64 0.22.1", @@ -7620,7 +7620,7 @@ dependencies = [ [[package]] name = "spam-filter" -version = "0.16.10" +version = "0.16.11" dependencies = [ "common", "compact_str", @@ -7729,7 +7729,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stalwart" -version = "0.16.10" +version = "0.16.11" dependencies = [ "common", "coordinator", @@ -7737,7 +7737,7 @@ dependencies = [ "directory", "email", "groupware", - "http 0.16.10", + "http 0.16.11", "http_proto", "imap", "jemallocator", @@ -7766,7 +7766,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "store" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "arc-swap", @@ -8006,7 +8006,7 @@ dependencies = [ [[package]] name = "tests" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "async-trait", @@ -8030,7 +8030,7 @@ dependencies = [ "form_urlencoded", "futures", "groupware", - "http 0.16.10", + "http 0.16.11", "http-body-util", "http_proto", "hyper", @@ -8573,7 +8573,7 @@ dependencies = [ [[package]] name = "trc" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "base64 0.22.1", @@ -8666,7 +8666,7 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "types" -version = "0.16.10" +version = "0.16.11" dependencies = [ "blake3", "compact_str", @@ -8864,7 +8864,7 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utils" -version = "0.16.10" +version = "0.16.11" dependencies = [ "ahash", "arcstr", diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index d9d64548..8e115eeb 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "common" -version = "0.16.10" +version = "0.16.11" edition = "2024" build = "build.rs" diff --git a/crates/common/src/config/smtp/resolver.rs b/crates/common/src/config/smtp/resolver.rs index 45d03d0d..20f11604 100644 --- a/crates/common/src/config/smtp/resolver.rs +++ b/crates/common/src/config/smtp/resolver.rs @@ -13,13 +13,14 @@ use mail_auth::{ ResolverConfig, ResolverOpts, }, net::runtime::TokioRuntimeProvider, + proto::rr::{Name, RecordType}, system_conf::read_system_conf, }, }; use registry::schema::{ - enums::{DnsResolverProtocol, PolicyEnforcement}, + enums::{DnsResolverProtocol, MtaRequiredOrOptional, PolicyEnforcement}, prelude::ObjectType, - structs::{DnsResolver, MtaSts, SystemSettings}, + structs::{DnsResolver, MtaSts, MtaTlsStrategy, SystemSettings}, }; use serde::{Deserialize, Serialize}; use std::{ @@ -34,6 +35,7 @@ use utils::cache::CacheItemWeight; pub struct Resolvers { pub dns: MessageAuthenticator, pub dnssec: DnssecResolver, + pub dnssec_available: bool, } #[derive(Clone)] @@ -211,21 +213,59 @@ impl Resolvers { let mut opts_dnssec = opts.clone(); opts_dnssec.validate = true; + let dnssec = DnssecResolver { + resolver: TokioResolver::builder_with_config( + config_dnssec, + TokioRuntimeProvider::default(), + ) + .with_options(opts_dnssec) + .build() + .expect("Failed to build DNSSEC resolver"), + }; + + let uses_dane = bp + .list_infallible::() + .await + .iter() + .any(|obj| obj.object.dane != MtaRequiredOrOptional::Disable); + + let dnssec_available = if uses_dane && !cfg!(any(test, feature = "test_mode")) { + let available = dnssec_capable(&dnssec.resolver).await; + if !available { + bp.build_warning( + ObjectType::DnsResolver.singleton(), + concat!( + "The configured DNS resolver cannot validate DNSSEC. ", + "DANE has been disabled to avoid deferring mail. ", + "Configure a DNSSEC-validating resolver to enable DANE." + ), + ); + } + available + } else { + true + }; + Resolvers { dns: MessageAuthenticator::new(resolver_config, opts).unwrap(), - dnssec: DnssecResolver { - resolver: TokioResolver::builder_with_config( - config_dnssec, - TokioRuntimeProvider::default(), - ) - .with_options(opts_dnssec) - .build() - .expect("Failed to build DNSSEC resolver"), - }, + dnssec, + dnssec_available, } } } +async fn dnssec_capable(resolver: &TokioResolver) -> bool { + resolver + .lookup(Name::root(), RecordType::DNSKEY) + .await + .is_ok_and(|lookup| { + lookup + .answers() + .iter() + .any(|record| record.proof.is_secure()) + }) +} + impl Policy { pub async fn try_parse(bp: &mut Bootstrap) -> Option { let mta = bp.setting_infallible::().await; @@ -319,6 +359,7 @@ impl Default for Resolvers { .build() .expect("Failed to build DNSSEC resolver"), }, + dnssec_available: true, } } } @@ -363,6 +404,7 @@ impl Clone for Resolvers { Self { dns: self.dns.clone(), dnssec: self.dnssec.clone(), + dnssec_available: self.dnssec_available, } } } diff --git a/crates/coordinator/Cargo.toml b/crates/coordinator/Cargo.toml index c2bfe6fd..bd43fff3 100644 --- a/crates/coordinator/Cargo.toml +++ b/crates/coordinator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "coordinator" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/dav-proto/Cargo.toml b/crates/dav-proto/Cargo.toml index a9b813fa..3adddcf1 100644 --- a/crates/dav-proto/Cargo.toml +++ b/crates/dav-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dav-proto" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/dav/Cargo.toml b/crates/dav/Cargo.toml index 383f3a51..6ebf6f6f 100644 --- a/crates/dav/Cargo.toml +++ b/crates/dav/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dav" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/directory/Cargo.toml b/crates/directory/Cargo.toml index d6d88599..8dca8d7e 100644 --- a/crates/directory/Cargo.toml +++ b/crates/directory/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "directory" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/email/Cargo.toml b/crates/email/Cargo.toml index 567c8512..47d2f4ad 100644 --- a/crates/email/Cargo.toml +++ b/crates/email/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "email" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/groupware/Cargo.toml b/crates/groupware/Cargo.toml index aa452942..92b59c50 100644 --- a/crates/groupware/Cargo.toml +++ b/crates/groupware/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "groupware" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/http-proto/Cargo.toml b/crates/http-proto/Cargo.toml index fc8b0735..ba9c02cf 100644 --- a/crates/http-proto/Cargo.toml +++ b/crates/http-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "http_proto" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/http/Cargo.toml b/crates/http/Cargo.toml index d4bbd683..c1294709 100644 --- a/crates/http/Cargo.toml +++ b/crates/http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "http" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/imap-proto/Cargo.toml b/crates/imap-proto/Cargo.toml index 9d5edb8a..b41e6085 100644 --- a/crates/imap-proto/Cargo.toml +++ b/crates/imap-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "imap_proto" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/imap/Cargo.toml b/crates/imap/Cargo.toml index a4a65097..8bae44ec 100644 --- a/crates/imap/Cargo.toml +++ b/crates/imap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "imap" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/jmap-proto/Cargo.toml b/crates/jmap-proto/Cargo.toml index e367873c..1ffbf219 100644 --- a/crates/jmap-proto/Cargo.toml +++ b/crates/jmap-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "jmap_proto" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/jmap/Cargo.toml b/crates/jmap/Cargo.toml index 62e52a3c..e7de8197 100644 --- a/crates/jmap/Cargo.toml +++ b/crates/jmap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "jmap" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/main/Cargo.toml b/crates/main/Cargo.toml index 39beac21..50b5322a 100644 --- a/crates/main/Cargo.toml +++ b/crates/main/Cargo.toml @@ -7,7 +7,7 @@ homepage = "https://stalw.art" keywords = ["imap", "jmap", "smtp", "email", "mail", "webdav", "server"] categories = ["email"] license = "AGPL-3.0-only OR LicenseRef-SEL" -version = "0.16.10" +version = "0.16.11" edition = "2024" [[bin]] diff --git a/crates/managesieve/Cargo.toml b/crates/managesieve/Cargo.toml index 88e0f8f6..a427dd0d 100644 --- a/crates/managesieve/Cargo.toml +++ b/crates/managesieve/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "managesieve" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/migration/Cargo.toml b/crates/migration/Cargo.toml index 822977dd..9f6bfb6d 100644 --- a/crates/migration/Cargo.toml +++ b/crates/migration/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "migration" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/nlp/Cargo.toml b/crates/nlp/Cargo.toml index 72b24488..f493d89f 100644 --- a/crates/nlp/Cargo.toml +++ b/crates/nlp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nlp" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/pop3/Cargo.toml b/crates/pop3/Cargo.toml index 89963f45..73fb931b 100644 --- a/crates/pop3/Cargo.toml +++ b/crates/pop3/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pop3" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/registry/Cargo.toml b/crates/registry/Cargo.toml index 0073b62b..6ddfe434 100644 --- a/crates/registry/Cargo.toml +++ b/crates/registry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "registry" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/services/Cargo.toml b/crates/services/Cargo.toml index 1cf6a0f4..3eb2b63d 100644 --- a/crates/services/Cargo.toml +++ b/crates/services/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "services" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/smtp/Cargo.toml b/crates/smtp/Cargo.toml index c3e9d948..5366b855 100644 --- a/crates/smtp/Cargo.toml +++ b/crates/smtp/Cargo.toml @@ -7,7 +7,7 @@ homepage = "https://stalw.art/smtp" keywords = ["smtp", "email", "mail", "server"] categories = ["email"] license = "AGPL-3.0-only OR LicenseRef-SEL" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/smtp/src/outbound/delivery.rs b/crates/smtp/src/outbound/delivery.rs index 0e678d37..42bbef42 100644 --- a/crates/smtp/src/outbound/delivery.rs +++ b/crates/smtp/src/outbound/delivery.rs @@ -640,9 +640,12 @@ impl QueuedMessage { ); // Obtain source and remote IPs + let dane_enabled = tls_strategy.try_dane() + && is_smtp + && server.core.smtp.resolvers.dnssec_available; let time = Instant::now(); let resolve_result = match server - .resolve_host(remote_host, &envelope, tls_strategy.try_dane() && is_smtp) + .resolve_host(remote_host, &envelope, dane_enabled) .await { Ok(result) => { @@ -678,7 +681,7 @@ impl QueuedMessage { }; // Lookup DANE policy - let dane_policy = if tls_strategy.try_dane() && is_smtp { + let dane_policy = if dane_enabled { let time = Instant::now(); let strict = tls_strategy.is_dane_required(); diff --git a/crates/spam-filter/Cargo.toml b/crates/spam-filter/Cargo.toml index 5494a654..7191fadb 100644 --- a/crates/spam-filter/Cargo.toml +++ b/crates/spam-filter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "spam-filter" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index 6af1de20..ee784ab8 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "store" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/trc/Cargo.toml b/crates/trc/Cargo.toml index c43b5eb7..0f3759c9 100644 --- a/crates/trc/Cargo.toml +++ b/crates/trc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trc" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/trc/event-macro/Cargo.toml b/crates/trc/event-macro/Cargo.toml index c847c135..66ab146c 100644 --- a/crates/trc/event-macro/Cargo.toml +++ b/crates/trc/event-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "event_macro" -version = "0.16.10" +version = "0.16.11" edition = "2024" [lib] diff --git a/crates/types/Cargo.toml b/crates/types/Cargo.toml index e5c1be5a..2922a279 100644 --- a/crates/types/Cargo.toml +++ b/crates/types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "types" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index 667ace6f..3f9d2f83 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "utils" -version = "0.16.10" +version = "0.16.11" edition = "2024" [dependencies] diff --git a/crates/utils/proc-macros/Cargo.toml b/crates/utils/proc-macros/Cargo.toml index 4781dca5..f2ffb76d 100644 --- a/crates/utils/proc-macros/Cargo.toml +++ b/crates/utils/proc-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "proc_macros" -version = "0.16.10" +version = "0.16.11" edition = "2024" [lib] diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 28cd06e3..c94575fe 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tests" -version = "0.16.10" +version = "0.16.11" edition = "2024" [features]