From 3f2c5632b82486875d87500b7439cc55d8737bee Mon Sep 17 00:00:00 2001 From: Maurus Decimus <11444311+mdecimus@users.noreply.github.com> Date: Tue, 16 Jun 2026 21:51:48 +0200 Subject: [PATCH] Fix OIDC: Add default domain name to groups that are not email addresses --- CHANGELOG.md | 11 ++++ Cargo.lock | 62 ++++++++++----------- crates/common/Cargo.toml | 2 +- crates/coordinator/Cargo.toml | 2 +- crates/dav-proto/Cargo.toml | 2 +- crates/dav/Cargo.toml | 2 +- crates/directory/Cargo.toml | 2 +- crates/directory/src/backend/oidc/lookup.rs | 8 ++- crates/email/Cargo.toml | 2 +- crates/groupware/Cargo.toml | 2 +- crates/http-proto/Cargo.toml | 2 +- crates/http/Cargo.toml | 2 +- crates/http/src/request.rs | 8 ++- 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/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, 83 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 490430f0..31d5d772 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.10] - 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 +- OIDC: Add default domain name to groups that are not email addresses. + ## [0.16.9] - 2026-06-15 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 56b1838b..354b834b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "common" -version = "0.16.9" +version = "0.16.10" dependencies = [ "aes-gcm-siv", "ahash", @@ -1431,7 +1431,7 @@ checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "coordinator" -version = "0.16.9" +version = "0.16.10" dependencies = [ "async-nats", "futures", @@ -1784,7 +1784,7 @@ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "dav" -version = "0.16.9" +version = "0.16.10" dependencies = [ "calcard", "chrono", @@ -1807,7 +1807,7 @@ dependencies = [ [[package]] name = "dav-proto" -version = "0.16.9" +version = "0.16.10" dependencies = [ "calcard", "chrono", @@ -2005,7 +2005,7 @@ dependencies = [ [[package]] name = "directory" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "argon2", @@ -2257,7 +2257,7 @@ dependencies = [ [[package]] name = "email" -version = "0.16.9" +version = "0.16.10" dependencies = [ "aes 0.9.1", "aes-gcm", @@ -2364,7 +2364,7 @@ dependencies = [ [[package]] name = "event_macro" -version = "0.16.9" +version = "0.16.10" dependencies = [ "proc-macro2", "quote", @@ -2882,7 +2882,7 @@ dependencies = [ [[package]] name = "groupware" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "calcard", @@ -3164,7 +3164,7 @@ dependencies = [ [[package]] name = "http" -version = "0.16.9" +version = "0.16.10" dependencies = [ "async-stream", "base64 0.22.1", @@ -3264,7 +3264,7 @@ dependencies = [ [[package]] name = "http_proto" -version = "0.16.9" +version = "0.16.10" dependencies = [ "common", "compact_str", @@ -3566,7 +3566,7 @@ checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" [[package]] name = "imap" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "common", @@ -3593,7 +3593,7 @@ dependencies = [ [[package]] name = "imap_proto" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "chrono", @@ -3806,7 +3806,7 @@ dependencies = [ [[package]] name = "jmap" -version = "0.16.9" +version = "0.16.10" dependencies = [ "aes-gcm", "aes-gcm-siv", @@ -3894,7 +3894,7 @@ dependencies = [ [[package]] name = "jmap_proto" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "calcard", @@ -4402,7 +4402,7 @@ dependencies = [ [[package]] name = "managesieve" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "common", @@ -4544,7 +4544,7 @@ checksum = "c797b9d6bb23aab2fc369c65f871be49214f5c759af65bde26ffaaa2b646b492" [[package]] name = "migration" -version = "0.16.9" +version = "0.16.10" dependencies = [ "base64 0.22.1", "common", @@ -4761,7 +4761,7 @@ dependencies = [ [[package]] name = "nlp" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "bincode 1.3.3", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "pop3" -version = "0.16.9" +version = "0.16.10" dependencies = [ "common", "directory", @@ -5737,7 +5737,7 @@ dependencies = [ [[package]] name = "proc_macros" -version = "0.16.9" +version = "0.16.10" dependencies = [ "proc-macro2", "quote", @@ -6369,7 +6369,7 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "registry" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "hashify", @@ -7283,7 +7283,7 @@ dependencies = [ [[package]] name = "services" -version = "0.16.9" +version = "0.16.10" dependencies = [ "aes-gcm", "aes-gcm-siv", @@ -7541,7 +7541,7 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smtp" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "base64 0.22.1", @@ -7642,7 +7642,7 @@ dependencies = [ [[package]] name = "spam-filter" -version = "0.16.9" +version = "0.16.10" dependencies = [ "common", "compact_str", @@ -7751,7 +7751,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stalwart" -version = "0.16.9" +version = "0.16.10" dependencies = [ "common", "coordinator", @@ -7759,7 +7759,7 @@ dependencies = [ "directory", "email", "groupware", - "http 0.16.9", + "http 0.16.10", "http_proto", "imap", "jemallocator", @@ -7788,7 +7788,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "store" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "arc-swap", @@ -8028,7 +8028,7 @@ dependencies = [ [[package]] name = "tests" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "async-trait", @@ -8052,7 +8052,7 @@ dependencies = [ "form_urlencoded", "futures", "groupware", - "http 0.16.9", + "http 0.16.10", "http-body-util", "http_proto", "hyper", @@ -8592,7 +8592,7 @@ dependencies = [ [[package]] name = "trc" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "base64 0.22.1", @@ -8685,7 +8685,7 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "types" -version = "0.16.9" +version = "0.16.10" dependencies = [ "blake3", "compact_str", @@ -8883,7 +8883,7 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utils" -version = "0.16.9" +version = "0.16.10" dependencies = [ "ahash", "arcstr", diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index c07c0172..d9d64548 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "common" -version = "0.16.9" +version = "0.16.10" edition = "2024" build = "build.rs" diff --git a/crates/coordinator/Cargo.toml b/crates/coordinator/Cargo.toml index dff272ca..c2bfe6fd 100644 --- a/crates/coordinator/Cargo.toml +++ b/crates/coordinator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "coordinator" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/dav-proto/Cargo.toml b/crates/dav-proto/Cargo.toml index cb96d915..a9b813fa 100644 --- a/crates/dav-proto/Cargo.toml +++ b/crates/dav-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dav-proto" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/dav/Cargo.toml b/crates/dav/Cargo.toml index d4bc13a3..383f3a51 100644 --- a/crates/dav/Cargo.toml +++ b/crates/dav/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dav" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/directory/Cargo.toml b/crates/directory/Cargo.toml index 3820c542..d6d88599 100644 --- a/crates/directory/Cargo.toml +++ b/crates/directory/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "directory" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/directory/src/backend/oidc/lookup.rs b/crates/directory/src/backend/oidc/lookup.rs index 6d3b90ca..f221f586 100644 --- a/crates/directory/src/backend/oidc/lookup.rs +++ b/crates/directory/src/backend/oidc/lookup.rs @@ -213,7 +213,13 @@ impl OpenIdDirectory { .as_ref() .and_then(|groups_claim| claims.get(groups_claim)) .map(extract_string_list) - .unwrap_or_default(), + .unwrap_or_default() + .into_iter() + .map(|group| match &self.config.default_domain { + Some(domain) if !group.contains('@') => format!("{group}@{domain}"), + _ => group, + }) + .collect(), description: self .config .claim_name diff --git a/crates/email/Cargo.toml b/crates/email/Cargo.toml index a656e9b7..567c8512 100644 --- a/crates/email/Cargo.toml +++ b/crates/email/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "email" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/groupware/Cargo.toml b/crates/groupware/Cargo.toml index f29b471b..aa452942 100644 --- a/crates/groupware/Cargo.toml +++ b/crates/groupware/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "groupware" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/http-proto/Cargo.toml b/crates/http-proto/Cargo.toml index c61f7fe3..fc8b0735 100644 --- a/crates/http-proto/Cargo.toml +++ b/crates/http-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "http_proto" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/http/Cargo.toml b/crates/http/Cargo.toml index c0ce5d19..d4bbd683 100644 --- a/crates/http/Cargo.toml +++ b/crates/http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "http" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/http/src/request.rs b/crates/http/src/request.rs index 44612782..12e8b51f 100644 --- a/crates/http/src/request.rs +++ b/crates/http/src/request.rs @@ -472,9 +472,11 @@ impl ParseHttp for Server { self.is_http_anonymous_request_allowed(session.remote_ip) .await?; - let path_email = path.find(|segment| segment.contains('@')).map(|segment| { - percent_decode_str(segment).decode_utf8_lossy().into_owned() - }); + let path_email = path + .map(|segment| { + percent_decode_str(segment).decode_utf8_lossy().into_owned() + }) + .find(|segment| segment.contains('@')); return self .handle_autodiscover_v2_request(req.uri().query(), path_email.as_deref()) diff --git a/crates/imap-proto/Cargo.toml b/crates/imap-proto/Cargo.toml index 2184fb2a..9d5edb8a 100644 --- a/crates/imap-proto/Cargo.toml +++ b/crates/imap-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "imap_proto" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/imap/Cargo.toml b/crates/imap/Cargo.toml index 66d026a7..a4a65097 100644 --- a/crates/imap/Cargo.toml +++ b/crates/imap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "imap" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/jmap-proto/Cargo.toml b/crates/jmap-proto/Cargo.toml index aac986c7..e367873c 100644 --- a/crates/jmap-proto/Cargo.toml +++ b/crates/jmap-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "jmap_proto" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/jmap/Cargo.toml b/crates/jmap/Cargo.toml index 164a42e8..62e52a3c 100644 --- a/crates/jmap/Cargo.toml +++ b/crates/jmap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "jmap" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/main/Cargo.toml b/crates/main/Cargo.toml index 1ea8a72d..39beac21 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.9" +version = "0.16.10" edition = "2024" [[bin]] diff --git a/crates/managesieve/Cargo.toml b/crates/managesieve/Cargo.toml index fa8c1b0b..88e0f8f6 100644 --- a/crates/managesieve/Cargo.toml +++ b/crates/managesieve/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "managesieve" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/migration/Cargo.toml b/crates/migration/Cargo.toml index 1014fc08..822977dd 100644 --- a/crates/migration/Cargo.toml +++ b/crates/migration/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "migration" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/nlp/Cargo.toml b/crates/nlp/Cargo.toml index 750dad09..72b24488 100644 --- a/crates/nlp/Cargo.toml +++ b/crates/nlp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nlp" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/pop3/Cargo.toml b/crates/pop3/Cargo.toml index 29d2edb6..89963f45 100644 --- a/crates/pop3/Cargo.toml +++ b/crates/pop3/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pop3" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/registry/Cargo.toml b/crates/registry/Cargo.toml index 796f9541..0073b62b 100644 --- a/crates/registry/Cargo.toml +++ b/crates/registry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "registry" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/services/Cargo.toml b/crates/services/Cargo.toml index ef366844..1cf6a0f4 100644 --- a/crates/services/Cargo.toml +++ b/crates/services/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "services" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/smtp/Cargo.toml b/crates/smtp/Cargo.toml index ba1d4d27..25594b30 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.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/spam-filter/Cargo.toml b/crates/spam-filter/Cargo.toml index b03aeab9..5494a654 100644 --- a/crates/spam-filter/Cargo.toml +++ b/crates/spam-filter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "spam-filter" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index 79e356a1..6af1de20 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "store" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/trc/Cargo.toml b/crates/trc/Cargo.toml index 7af258bd..c43b5eb7 100644 --- a/crates/trc/Cargo.toml +++ b/crates/trc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trc" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/trc/event-macro/Cargo.toml b/crates/trc/event-macro/Cargo.toml index f83fd798..c847c135 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.9" +version = "0.16.10" edition = "2024" [lib] diff --git a/crates/types/Cargo.toml b/crates/types/Cargo.toml index b25c08be..e5c1be5a 100644 --- a/crates/types/Cargo.toml +++ b/crates/types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "types" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index deb9eb80..76b7831a 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "utils" -version = "0.16.9" +version = "0.16.10" edition = "2024" [dependencies] diff --git a/crates/utils/proc-macros/Cargo.toml b/crates/utils/proc-macros/Cargo.toml index 77e31fad..4781dca5 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.9" +version = "0.16.10" edition = "2024" [lib] diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 847dc379..c2e52247 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tests" -version = "0.16.9" +version = "0.16.10" edition = "2024" [features]