This commit is contained in:
mdecimus 2025-07-27 12:36:11 +02:00
parent d254d209af
commit 285d1cc90e
31 changed files with 117 additions and 62 deletions

View file

@ -2,6 +2,29 @@
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [0.13.2] - 2025-07-27
If you are upgrading from v0.11.x or v0.12.x, this version includes **breaking changes** to the message queue and MTA configuration. Please read the [UPGRADING.md](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING.md) file for more information on how to upgrade from previous versions.
## Added
- ACME: DeSEC cloud DNS provider support (contributed by @Tyr3al).
- CalDAV Scheduling: Catalan language support (contributed by @jolupa) (#1873).
- MTA: Allow to send e-mails as group, while member of that group (#485).
- OIDC: Allow local access tokens to be used with third-party OIDC backends (#1311 stalwartlabs/webadmin#52).
## Changed
- IMAP: Return `OK` when moving/copying non-existent messages (#670).
- IMAP: Copy flags when copying/moving messages between accounts.
## Fixed
- MTA: Do not convert e-mail local parts to lowercase (#1916).
- Sieve: `fileinto` should override spam filter (#1917).
- JMAP: Incorrect `accountId` used in email set and import methods (#1777).
- WebDAV: Always return `MULTISTATUS` when calendar-query yields no results.
- LDAP: Only set account name if not returned in LDAP query (#1471).
- Enterprise: Invalidate logo cache when changes are made (#1856).
- Enterprise: Fix tenant quota update API.
## [0.13.1] - 2025-07-16
If you are upgrading from v0.11.x or v0.12.x, this version includes **breaking changes** to the message queue and MTA configuration. Please read the [UPGRADING.md](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING.md) file for more information on how to upgrade from previous versions.

62
Cargo.lock generated
View file

@ -1263,7 +1263,7 @@ dependencies = [
[[package]]
name = "common"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"aes-gcm-siv",
"ahash",
@ -1733,7 +1733,7 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]]
name = "dav"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"calcard",
"chrono",
@ -1755,7 +1755,7 @@ dependencies = [
[[package]]
name = "dav-proto"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"calcard",
"chrono",
@ -1948,7 +1948,7 @@ dependencies = [
[[package]]
name = "directory"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"argon2",
@ -2051,9 +2051,9 @@ dependencies = [
[[package]]
name = "dns-update"
version = "0.1.3"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12c278a5523000f9ccab46e4ef779a4354129f762884b36fb1b1b5ed58830d20"
checksum = "41dbb7b41e755c6d9f9a62d3861e84fd33860b796d93aea6cfc8ef1068f4bff6"
dependencies = [
"hickory-client",
"reqwest 0.12.15",
@ -2226,7 +2226,7 @@ dependencies = [
[[package]]
name = "email"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"aes",
"aes-gcm",
@ -2356,7 +2356,7 @@ dependencies = [
[[package]]
name = "event_macro"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"proc-macro2",
"quote",
@ -2842,7 +2842,7 @@ dependencies = [
[[package]]
name = "groupware"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"calcard",
@ -3142,7 +3142,7 @@ dependencies = [
[[package]]
name = "http"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"async-stream",
"base64 0.22.1",
@ -3252,7 +3252,7 @@ dependencies = [
[[package]]
name = "http_proto"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"common",
"compact_str",
@ -3554,7 +3554,7 @@ checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c"
[[package]]
name = "imap"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"common",
@ -3581,7 +3581,7 @@ dependencies = [
[[package]]
name = "imap_proto"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"chrono",
@ -3827,7 +3827,7 @@ dependencies = [
[[package]]
name = "jmap"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"aes-gcm",
"aes-gcm-siv",
@ -3898,7 +3898,7 @@ dependencies = [
[[package]]
name = "jmap_proto"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"compact_str",
@ -4372,7 +4372,7 @@ dependencies = [
[[package]]
name = "managesieve"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"common",
@ -4474,7 +4474,7 @@ checksum = "c797b9d6bb23aab2fc369c65f871be49214f5c759af65bde26ffaaa2b646b492"
[[package]]
name = "migration"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"base64 0.22.1",
"bincode 1.3.3",
@ -4712,7 +4712,7 @@ dependencies = [
[[package]]
name = "nlp"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"bincode 1.3.3",
@ -5440,7 +5440,7 @@ dependencies = [
[[package]]
name = "pop3"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"common",
"directory",
@ -5607,7 +5607,7 @@ dependencies = [
[[package]]
name = "proc_macros"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"proc-macro2",
"quote",
@ -7271,7 +7271,7 @@ dependencies = [
[[package]]
name = "services"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"aes-gcm",
"aes-gcm-siv",
@ -7483,7 +7483,7 @@ checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
[[package]]
name = "smtp"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"blake3",
@ -7574,7 +7574,7 @@ dependencies = [
[[package]]
name = "spam-filter"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"common",
"compact_str",
@ -7638,14 +7638,14 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "stalwart"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"common",
"dav",
"directory",
"email",
"groupware",
"http 0.13.1",
"http 0.13.2",
"imap",
"jemallocator",
"jmap",
@ -7664,7 +7664,7 @@ dependencies = [
[[package]]
name = "stalwart-cli"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"clap",
"console",
@ -7695,7 +7695,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "store"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"arc-swap",
@ -7904,7 +7904,7 @@ dependencies = [
[[package]]
name = "tests"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"async-trait",
@ -7925,7 +7925,7 @@ dependencies = [
"form_urlencoded",
"futures",
"groupware",
"http 0.13.1",
"http 0.13.2",
"http-body-util",
"http_proto",
"hyper 1.6.0",
@ -8451,7 +8451,7 @@ dependencies = [
[[package]]
name = "trc"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"base64 0.22.1",
@ -8757,7 +8757,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "utils"
version = "0.13.1"
version = "0.13.2"
dependencies = [
"ahash",
"base64 0.22.1",

View file

@ -5,7 +5,7 @@ authors = ["Stalwart Labs LLC <hello@stalw.art>"]
license = "AGPL-3.0-only OR LicenseRef-SEL"
repository = "https://github.com/stalwartlabs/cli"
homepage = "https://github.com/stalwartlabs/cli"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
readme = "README.md"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "common"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"
build = "build.rs"
@ -19,7 +19,7 @@ mail-builder = { version = "0.4" }
mail-auth = { version = "0.7.1" }
mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] }
smtp-proto = { version = "0.1", features = ["rkyv"] }
dns-update = { version = "0.1.3" }
dns-update = { version = "0.1.4" }
calcard = { version = "0.1.3", features = ["rkyv"] }
ahash = { version = "0.8.2", features = ["serde"] }
parking_lot = "0.12.1"

View file

@ -272,6 +272,26 @@ fn build_dns_updater(config: &mut Config, acme_id: &str) -> Option<DnsUpdater> {
})
.ok()
}
"desec" => {
let timeout = config
.property_or_default(("acme", acme_id, "timeout"), "30s")
.unwrap_or_else(|| Duration::from_secs(30));
DnsUpdater::new_desec(
config
.value_require(("acme", acme_id, "secret"))?
.trim()
.to_string(),
timeout.into(),
)
.map_err(|err| {
config.new_build_error(
("acme", acme_id, "provider"),
format!("Failed to create Desec DNS updater: {err}"),
)
})
.ok()
}
_ => {
config.new_parse_error(("acme", acme_id, "provider"), "Unsupported provider");
None

View file

@ -1,6 +1,6 @@
[package]
name = "dav-proto"
version = "0.13.1"
version = "0.13.2"
edition = "2021"
[dependencies]

View file

@ -1,6 +1,6 @@
[package]
name = "dav"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "directory"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -9,9 +9,9 @@ use super::{
SpecialSecrets, lookup::DirectoryStore,
};
use crate::{
MemberOf, Permission, PermissionGrant, Permissions, Principal, PrincipalData, PrincipalQuota,
QueryBy, QueryParams, ROLE_ADMIN, ROLE_TENANT_ADMIN, ROLE_USER, Type, backend::RcptType,
core::principal::build_search_index,
FALLBACK_ADMIN_ID, MemberOf, Permission, PermissionGrant, Permissions, Principal,
PrincipalData, PrincipalQuota, QueryBy, QueryParams, ROLE_ADMIN, ROLE_TENANT_ADMIN, ROLE_USER,
Type, backend::RcptType, core::principal::build_search_index,
};
use ahash::{AHashMap, AHashSet};
use compact_str::CompactString;
@ -182,6 +182,12 @@ impl ManageDirectory for Store {
.assign_document_ids(u32::MAX, Collection::Principal, 1)
.await
.caused_by(trc::location!())?;
if principal_id_ == FALLBACK_ADMIN_ID {
return Err(trc::StoreEvent::UnexpectedError
.into_err()
.details("ID assignment failed")
.caused_by(trc::location!()));
}
principal_id = Some(principal_id_);
principal_id_
};
@ -536,6 +542,12 @@ impl ManageDirectory for Store {
.assign_document_ids(u32::MAX, Collection::Principal, 1)
.await
.caused_by(trc::location!())?;
if principal_id == FALLBACK_ADMIN_ID {
return Err(trc::StoreEvent::UnexpectedError
.into_err()
.details("ID assignment failed")
.caused_by(trc::location!()));
}
principal_create.id = principal_id;
let mut batch = BatchBuilder::new();
let pinfo_name = PrincipalInfo::new(principal_id, principal_create.typ, tenant_id);

View file

@ -1,6 +1,6 @@
[package]
name = "email"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "groupware"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "http_proto"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "http"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "imap_proto"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "imap"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "jmap_proto"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "jmap"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -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.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "managesieve"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "migration"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "nlp"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "pop3"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "services"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -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.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "spam-filter"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "store"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "trc"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "event_macro"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
[lib]

View file

@ -1,6 +1,6 @@
[package]
name = "utils"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "proc_macros"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
[lib]

View file

@ -1,6 +1,6 @@
[package]
name = "tests"
version = "0.13.1"
version = "0.13.2"
edition = "2024"
resolver = "2"