v0.16.5
This commit is contained in:
11
CHANGELOG.md
11
CHANGELOG.md
@@ -2,7 +2,7 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [0.16.5] - 2026-05-XX
|
||||
## [0.16.5] - 2026-05-11
|
||||
|
||||
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.
|
||||
|
||||
@@ -11,6 +11,7 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If
|
||||
|
||||
## Changed
|
||||
- Bump `mail-auth` to 0.9 (which bumps `hickory-resolver` to 0.26).
|
||||
- Deprecated RFC2136 SIG(0) support as it is no longer supported by `hickory`.
|
||||
|
||||
## Fixed
|
||||
- JMAP:
|
||||
@@ -29,6 +30,14 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If
|
||||
- Allow rescheduling recipients with permanent failures.
|
||||
- Process reports using original `RCPT` before rewriting.
|
||||
- Autodiscover v2 endpoint unreachable.
|
||||
- DNS update (via `dns-update` crate):
|
||||
- OVH + Google Cloud DNS: Fix FQDN handling for `MX` and `SRV` records.
|
||||
- Route53: Fix changeset error resolution.
|
||||
- deSEC: Use empty `subname` for apex records instead of `@`, which the API rejects.
|
||||
- Cloudflare: Wrap `TXT` record content in double quotes (RFC 1035) to suppress dashboard warnings.
|
||||
- iCalendar/JSCalendar (via `calcard` crate):
|
||||
- Support `STATUS:CANCELLED` mapping from `VTODO` to JSCalendar.
|
||||
- Fixed duration parsing for zero duration `PT0S`.
|
||||
|
||||
## [0.16.4] - 2026-05-05
|
||||
|
||||
|
||||
414
Cargo.lock
generated
414
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "common"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
build = "build.rs"
|
||||
|
||||
@@ -20,7 +20,7 @@ mail-parser = { version = "0.11", features = ["full_encoding"] }
|
||||
mail-builder = { version = "0.4" }
|
||||
mail-auth = { version = "0.9", features = ["generate"] }
|
||||
smtp-proto = { version = "0.2", features = ["rkyv"] }
|
||||
dns-update = { version = "0.2.1" }
|
||||
dns-update = { version = "0.3" }
|
||||
calcard = { version = "0.3", features = ["rkyv"] }
|
||||
ahash = { version = "0.8.2", features = ["serde"] }
|
||||
parking_lot = "0.12.1"
|
||||
|
||||
@@ -274,7 +274,7 @@ impl Server {
|
||||
self.get_directory_for_cached_domain(&impersonated_domain_cache)
|
||||
&& let Recipient::Account(account) = directory.recipient(address).await?
|
||||
{
|
||||
account_id = Some(self.synchronize_account(account).await?.id);
|
||||
account_id = Some(Box::pin(self.synchronize_account(account)).await?.id);
|
||||
}
|
||||
if let Some(account_id) = account_id {
|
||||
trc::event!(
|
||||
|
||||
@@ -7,18 +7,13 @@
|
||||
use crate::{Core, Server};
|
||||
use base64::{Engine, engine::general_purpose};
|
||||
use dns_update::{
|
||||
Algorithm, DnsRecord, DnsRecordType, TsigAlgorithm,
|
||||
dnssec::{
|
||||
self, SigningKey,
|
||||
crypto::{EcdsaSigningKey, Ed25519SigningKey},
|
||||
},
|
||||
DnsRecord, DnsRecordType, TsigAlgorithm,
|
||||
providers::{ovh::OvhEndpoint, rfc2136::DnsAddress},
|
||||
};
|
||||
use registry::schema::{
|
||||
enums,
|
||||
structs::{DnsManagement, DnsServer, Domain},
|
||||
};
|
||||
use rustls_pki_types::PrivatePkcs8KeyDer;
|
||||
use std::{
|
||||
net::SocketAddr,
|
||||
sync::Arc,
|
||||
@@ -80,60 +75,8 @@ impl DnsUpdater {
|
||||
)
|
||||
.map_err(|err| format!("Failed to build DNS updater: {}", err))?,
|
||||
}),
|
||||
DnsServer::Sig0(server) => {
|
||||
let key_bytes = server.key.secret().await?;
|
||||
let pem_parsed = pem::parse(key_bytes.as_bytes())
|
||||
.map_err(|err| format!("Failed to parse PEM key: {}", err))?;
|
||||
let pkcs8_der = PrivatePkcs8KeyDer::from(pem_parsed.contents());
|
||||
let signing_key: Box<dyn SigningKey> = match server.sig0_algorithm {
|
||||
enums::Sig0Algorithm::EcdsaP256Sha256 => Box::new(
|
||||
EcdsaSigningKey::from_pkcs8(&pkcs8_der, dnssec::Algorithm::ECDSAP256SHA256)
|
||||
.map_err(|err| {
|
||||
format!("Failed to build ECDSA P-256 signing key: {}", err)
|
||||
})?,
|
||||
),
|
||||
enums::Sig0Algorithm::EcdsaP384Sha384 => Box::new(
|
||||
EcdsaSigningKey::from_pkcs8(&pkcs8_der, dnssec::Algorithm::ECDSAP384SHA384)
|
||||
.map_err(|err| {
|
||||
format!("Failed to build ECDSA P-384 signing key: {}", err)
|
||||
})?,
|
||||
),
|
||||
enums::Sig0Algorithm::Ed25519 => {
|
||||
Box::new(Ed25519SigningKey::from_pkcs8(&pkcs8_der).map_err(|err| {
|
||||
format!("Failed to build Ed25519 signing key: {}", err)
|
||||
})?)
|
||||
}
|
||||
};
|
||||
|
||||
#[allow(deprecated)]
|
||||
Ok(DnsUpdater {
|
||||
polling_interval: server.polling_interval.into_inner(),
|
||||
propagation_timeout: server.propagation_timeout.into_inner(),
|
||||
propagation_delay: server.propagation_delay.map(|d| d.into_inner()),
|
||||
ttl: server.ttl.into_inner(),
|
||||
core,
|
||||
updater: dns_update::DnsUpdater::new_rfc2136_sig0(
|
||||
match server.protocol {
|
||||
enums::IpProtocol::Udp => DnsAddress::Tcp(SocketAddr::new(
|
||||
server.host.into_inner(),
|
||||
server.port as u16,
|
||||
)),
|
||||
enums::IpProtocol::Tcp => DnsAddress::Udp(SocketAddr::new(
|
||||
server.host.into_inner(),
|
||||
server.port as u16,
|
||||
)),
|
||||
},
|
||||
server.signer_name,
|
||||
signing_key,
|
||||
server.public_key,
|
||||
match server.sig0_algorithm {
|
||||
enums::Sig0Algorithm::EcdsaP256Sha256 => Algorithm::ECDSAP256SHA256,
|
||||
enums::Sig0Algorithm::EcdsaP384Sha384 => Algorithm::ECDSAP384SHA384,
|
||||
enums::Sig0Algorithm::Ed25519 => Algorithm::ED25519,
|
||||
},
|
||||
)
|
||||
.map_err(|err| format!("Failed to build DNS updater: {}", err))?,
|
||||
})
|
||||
DnsServer::Sig0(_) => {
|
||||
Err("RFC 2136 with SIG(0) authentication is no longer supported".into())
|
||||
}
|
||||
DnsServer::Cloudflare(server) => {
|
||||
let updater = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "dav-proto"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "dav"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "directory"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "email"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "groupware"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "http_proto"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "http"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "imap_proto"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "imap"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "jmap_proto"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "jmap"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -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.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[[bin]]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "managesieve"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "migration"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "nlp"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "pop3"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "services"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
@@ -34,7 +34,7 @@ sha2 = "0.11"
|
||||
reqwest = { version = "0.13", default-features = false, features = ["rustls", "http2"]}
|
||||
base64 = "0.22"
|
||||
compact_str = "0.9.0"
|
||||
dns-update = { version = "0.2.1" }
|
||||
dns-update = { version = "0.3" }
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
|
||||
@@ -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.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "spam-filter"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "store"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "trc"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "event_macro"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[lib]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "types"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "utils"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "proc_macros"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[lib]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "tests"
|
||||
version = "0.16.4"
|
||||
version = "0.16.5"
|
||||
edition = "2024"
|
||||
|
||||
[features]
|
||||
@@ -81,7 +81,7 @@ rkyv = { version = "0.8.10", features = ["little_endian"] }
|
||||
compact_str = "0.9.0"
|
||||
quick-xml = "0.39"
|
||||
jmap-tools = { version = "0.1" }
|
||||
dns-update = { version = "0.2.1", features = ["test_provider"] }
|
||||
dns-update = { version = "0.3", features = ["test_provider"] }
|
||||
x509-parser = "0.18"
|
||||
|
||||
[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
||||
|
||||
Reference in New Issue
Block a user