This commit is contained in:
mdecimus 2023-08-29 12:31:08 +02:00
parent 57a63b1467
commit 5b88a03e92
11 changed files with 75 additions and 62 deletions

View file

@ -2,6 +2,21 @@
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [0.3.6] - 2023-08-29
## Added
- Arithmetic and logical expression evaluation in Sieve scripts.
- Support for storing query results in Sieve variables.
- Results of SPF, DKIM, ARC, DMARC and IPREV checks available as environment variables in Sieve scripts.
- Configurable protocol flags for Milter filters.
- Fall-back to plain text when `STARTTLS` fails and `starttls` is set to `optional`.
### Changed
### Fixed
- Do not panic when `hash = 0` in reports. (#60)
- JMAP Session resource returns `EmailSubmission` capabilities using arrays rather than objects.
## [0.3.5] - 2023-08-18
## Added

82
Cargo.lock generated
View file

@ -306,7 +306,7 @@ checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7"
dependencies = [
"http",
"log",
"rustls 0.20.8",
"rustls 0.20.9",
"serde",
"serde_json",
"url",
@ -1291,7 +1291,7 @@ dependencies = [
"pbkdf2 0.12.2",
"pwhash",
"regex",
"rustls 0.21.6",
"rustls 0.21.7",
"scrypt",
"sha1",
"sha2 0.10.7",
@ -1499,9 +1499,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
dependencies = [
"errno-dragonfly",
"libc",
@ -1949,9 +1949,9 @@ dependencies = [
[[package]]
name = "hashlink"
version = "0.8.3"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
"hashbrown 0.14.0",
]
@ -2142,7 +2142,7 @@ dependencies = [
"futures-util",
"http",
"hyper 0.14.27",
"rustls 0.21.6",
"rustls 0.21.7",
"tokio",
"tokio-rustls 0.24.1",
]
@ -2238,7 +2238,7 @@ dependencies = [
[[package]]
name = "imap"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"ahash 0.8.3",
"dashmap",
@ -2250,7 +2250,7 @@ dependencies = [
"mail-send",
"md5",
"parking_lot",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"store",
"tokio",
@ -2403,7 +2403,7 @@ dependencies = [
[[package]]
name = "jmap"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"aes",
"aes-gcm",
@ -2465,7 +2465,7 @@ dependencies = [
"maybe-async 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot",
"reqwest",
"rustls 0.21.6",
"rustls 0.21.7",
"serde",
"serde_json",
"tokio",
@ -2575,7 +2575,7 @@ dependencies = [
"nom",
"percent-encoding",
"ring",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-native-certs",
"thiserror",
"tokio",
@ -2738,7 +2738,7 @@ dependencies = [
"base64 0.20.0",
"gethostname",
"md5",
"rustls 0.21.6",
"rustls 0.21.7",
"smtp-proto",
"tokio",
"tokio-rustls 0.24.1",
@ -2747,7 +2747,7 @@ dependencies = [
[[package]]
name = "mail-server"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"directory",
"imap",
@ -2777,7 +2777,7 @@ dependencies = [
"mail-send",
"md5",
"parking_lot",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"sieve-rs",
"store",
@ -2940,11 +2940,11 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
[[package]]
name = "nix"
version = "0.26.3"
version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abbbc55ad7b13aac85f9401c796dcda1b864e07fcad40ad47792eaa8932ea502"
checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
dependencies = [
"bitflags 2.4.0",
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset 0.7.1",
@ -3972,7 +3972,7 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"serde",
"serde_json",
@ -4202,9 +4202,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.38.9"
version = "0.38.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49"
checksum = "ed6248e1caa625eb708e266e06159f135e8c26f2bb7ceb72dc4b2766d0340964"
dependencies = [
"bitflags 2.4.0",
"errno",
@ -4215,9 +4215,9 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.20.8"
version = "0.20.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
dependencies = [
"log",
"ring",
@ -4227,9 +4227,9 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.21.6"
version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
dependencies = [
"log",
"ring",
@ -4531,9 +4531,9 @@ dependencies = [
[[package]]
name = "sharded-slab"
version = "0.1.5"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6805d8ff0f66aa61fb79a97a51ba210dcae753a797336dea8a36a3168196fab"
checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
dependencies = [
"lazy_static",
]
@ -4606,7 +4606,7 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
[[package]]
name = "smtp"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"ahash 0.8.3",
"blake3",
@ -4628,7 +4628,7 @@ dependencies = [
"rayon",
"regex",
"reqwest",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"serde",
"serde_json",
@ -4770,7 +4770,7 @@ dependencies = [
"once_cell",
"paste",
"percent-encoding",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"serde",
"serde_json",
@ -4929,7 +4929,7 @@ dependencies = [
[[package]]
name = "stalwart-cli"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"clap",
"console",
@ -4951,7 +4951,7 @@ dependencies = [
[[package]]
name = "stalwart-install"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"base64 0.21.3",
"clap",
@ -5143,7 +5143,7 @@ dependencies = [
"num_cpus",
"rayon",
"reqwest",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"serde",
"serde_json",
@ -5300,7 +5300,7 @@ version = "0.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
dependencies = [
"rustls 0.20.8",
"rustls 0.20.9",
"tokio",
"webpki",
]
@ -5311,7 +5311,7 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
dependencies = [
"rustls 0.21.6",
"rustls 0.21.7",
"tokio",
]
@ -5334,7 +5334,7 @@ checksum = "ec509ac96e9a0c43427c74f003127d953a265737636129424288d27cb5c4b12c"
dependencies = [
"futures-util",
"log",
"rustls 0.21.6",
"rustls 0.21.7",
"tokio",
"tokio-rustls 0.24.1",
"tungstenite 0.19.0",
@ -5560,7 +5560,7 @@ dependencies = [
"lazy_static",
"rand",
"ring",
"rustls 0.20.8",
"rustls 0.20.9",
"rustls-pemfile",
"smallvec",
"thiserror",
@ -5585,7 +5585,7 @@ dependencies = [
"lru-cache",
"parking_lot",
"resolv-conf",
"rustls 0.20.8",
"rustls 0.20.9",
"smallvec",
"thiserror",
"tokio",
@ -5620,7 +5620,7 @@ dependencies = [
"httparse",
"log",
"rand",
"rustls 0.21.6",
"rustls 0.21.7",
"sha1",
"thiserror",
"url",
@ -5763,7 +5763,7 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "utils"
version = "0.3.5"
version = "0.3.6"
dependencies = [
"ahash 0.8.3",
"dashmap",
@ -5773,7 +5773,7 @@ dependencies = [
"opentelemetry-otlp",
"opentelemetry-semantic-conventions",
"privdrop",
"rustls 0.21.6",
"rustls 0.21.7",
"rustls-pemfile",
"serde",
"smtp-proto",

View file

@ -5,7 +5,7 @@ authors = ["Stalwart Labs Ltd. <hello@stalw.art>"]
license = "AGPL-3.0-only"
repository = "https://github.com/stalwartlabs/cli"
homepage = "https://github.com/stalwartlabs/cli"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
readme = "README.md"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "imap"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
resolver = "2"

View file

@ -5,7 +5,7 @@ authors = ["Stalwart Labs Ltd. <hello@stalw.art>"]
license = "AGPL-3.0-only"
repository = "https://github.com/stalwartlabs/mail-server"
homepage = "https://github.com/stalwartlabs/mail-server"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
readme = "README.md"
resolver = "2"

View file

@ -1,6 +1,6 @@
[package]
name = "jmap"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
resolver = "2"

View file

@ -7,7 +7,7 @@ homepage = "https://stalw.art"
keywords = ["imap", "jmap", "smtp", "email", "mail", "server"]
categories = ["email"]
license = "AGPL-3.0-only"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
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"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
resolver = "2"

View file

@ -627,10 +627,16 @@ impl DeliveryAttempt {
};
// Prepare TLS connector
let tls_connector = if !remote_host.allow_invalid_certs() {
&core.queue.connectors.pki_verify
} else {
let is_strict_tls = tls_strategy.is_tls_required()
|| (self.message.flags & MAIL_REQUIRETLS) != 0
|| mta_sts_policy.is_some()
|| dane_policy.is_some();
let tls_connector = if !is_strict_tls || remote_host.allow_invalid_certs() {
// Many mail servers on the internet have invalid certificates, if TLS is set to optional and
// the remote host does not have a DANE or MTA-STS policy, then we allow invalid certificates.
&core.queue.connectors.dummy_verify
} else {
&core.queue.connectors.pki_verify
};
let delivery_result = if !remote_host.implicit_tls() {
@ -773,11 +779,7 @@ impl DeliveryAttempt {
.await;
}
if tls_strategy.is_tls_required()
|| (self.message.flags & MAIL_REQUIRETLS) != 0
|| mta_sts_policy.is_some()
|| dane_policy.is_some()
{
if is_strict_tls {
last_status =
Status::from_starttls_error(envelope.mx, response);
continue 'next_host;
@ -823,11 +825,7 @@ impl DeliveryAttempt {
.await;
}
last_status = if tls_strategy.is_tls_required()
|| (self.message.flags & MAIL_REQUIRETLS) != 0
|| mta_sts_policy.is_some()
|| dane_policy.is_some()
{
last_status = if is_strict_tls {
Status::from_tls_error(envelope.mx, error)
} else {
disable_tls = true;

View file

@ -1,6 +1,6 @@
[package]
name = "utils"
version = "0.3.5"
version = "0.3.6"
edition = "2021"
resolver = "2"

View file

@ -26,7 +26,7 @@ if eval "score != 1.6500000000000001" {
set "score" "9.3";
include "awl_include";
if eval "score != 5.4750000000000005" {
reject "awl_include #2 set score to ${score}";
reject "awl_include #3 set score to ${score}";
stop;
}