From 3cb8918d2e7f83fca4973ce194fdb02477f18853 Mon Sep 17 00:00:00 2001 From: mdecimus Date: Thu, 1 Aug 2024 17:09:39 +0200 Subject: v0.9.0 --- CHANGELOG.md | 14 + Cargo.lock | 607 +++++++++++++------------ UPGRADING.md | 11 + crates/cli/src/main.rs | 5 +- crates/common/src/config/tracers.rs | 40 +- crates/common/src/listener/tls.rs | 4 +- crates/common/src/tracing/journald.rs | 6 +- crates/jmap-proto/src/error/method.rs | 2 +- crates/jmap-proto/src/parser/json.rs | 6 +- crates/jmap/src/api/http.rs | 2 +- crates/jmap/src/api/management/principal.rs | 6 +- crates/jmap/src/auth/authenticate.rs | 22 +- crates/smtp/src/inbound/rcpt.rs | 2 +- crates/smtp/src/outbound/delivery.rs | 2 +- crates/store/src/backend/elastic/mod.rs | 6 +- crates/store/src/backend/elastic/query.rs | 6 +- crates/store/src/backend/foundationdb/mod.rs | 2 +- crates/store/src/backend/foundationdb/write.rs | 2 +- crates/store/src/backend/mysql/mod.rs | 2 +- crates/store/src/backend/postgres/mod.rs | 2 +- crates/store/src/backend/rocksdb/mod.rs | 2 +- crates/store/src/backend/sqlite/mod.rs | 2 +- crates/trc/src/conv.rs | 2 +- crates/trc/src/fmt.rs | 11 +- crates/trc/src/imple.rs | 81 ++-- crates/trc/src/lib.rs | 22 +- crates/trc/src/subscriber.rs | 5 +- crates/utils/src/config/utils.rs | 7 + tests/resources/ldap.cfg | 125 ----- tests/resources/ldap/ldap.cfg | 125 +++++ tests/resources/ldap/run_glauth.sh | 3 + tests/resources/smtp/dsn/delay.eml | 1 + tests/resources/smtp/dsn/failure.eml | 1 + tests/resources/smtp/dsn/mixed.eml | 1 + tests/resources/smtp/dsn/success.eml | 1 + 35 files changed, 625 insertions(+), 513 deletions(-) delete mode 100644 tests/resources/ldap.cfg create mode 100644 tests/resources/ldap/ldap.cfg create mode 100644 tests/resources/ldap/run_glauth.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 749b967e..16197448 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [0.9.0] - 2024-08-01 + +To upgrade replace the `stalwart-mail` binary and then upgrade to the latest web-admin. This version includes breaking changes to the Webhooks configuration and produces a slightly different log output, read [UPGRADING.md](UPGRADING.md) for details. + +## Added +- Improved and faster tracing and logging. +- Customizable event logging levels. + +### Changed + +### Fixed +- ManageSieve: Return capabilities after successful `STARTTLS` +- Do not provide `{auth_authen}` Milter macro unless the user is authenticated + ## [0.8.5] - 2024-07-07 To upgrade replace the `stalwart-mail` binary. diff --git a/Cargo.lock b/Cargo.lock index b2a9e299..694e5330 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,7 +90,7 @@ dependencies = [ "once_cell", "serde", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -125,9 +125,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -140,33 +140,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -207,9 +207,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" @@ -244,11 +244,11 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" dependencies = [ - "asn1-rs-derive 0.5.0", + "asn1-rs-derive 0.5.1", "asn1-rs-impl 0.2.0", "displaydoc", "nom", @@ -272,13 +272,13 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "synstructure 0.13.1", ] @@ -301,14 +301,14 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "async-compression" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd066d0b4ef8ecb03a55319dc13aa6910616d0f44008a045bb1835af830abff5" +checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" dependencies = [ "flate2", "futures-core", @@ -325,7 +325,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -347,18 +347,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -425,7 +425,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "itoa", "matchit", @@ -451,7 +451,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", @@ -559,7 +559,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.68", + "syn 2.0.72", "which", ] @@ -632,9 +632,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" dependencies = [ "arrayref", "arrayvec", @@ -711,7 +711,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "syn_derive", ] @@ -764,9 +764,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" [[package]] name = "byteorder" @@ -776,9 +776,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "fca2be1d5c43812bae364ee3f30b3afcb7877cf59f4aeb94c66f313a41d2fac9" [[package]] name = "bzip2" @@ -831,13 +831,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.104" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" dependencies = [ "jobserver", "libc", - "once_cell", ] [[package]] @@ -902,7 +901,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -938,9 +937,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.8" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" dependencies = [ "clap_builder", "clap_derive", @@ -948,9 +947,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.8" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" dependencies = [ "anstream", "anstyle", @@ -960,21 +959,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "cmac" @@ -998,9 +997,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "combine" @@ -1030,7 +1029,7 @@ dependencies = [ "dns-update", "futures", "hostname 0.4.0", - "hyper 1.4.0", + "hyper 1.4.1", "idna 1.0.2", "imagesize", "infer", @@ -1054,7 +1053,7 @@ dependencies = [ "regex", "reqwest 0.12.5", "ring 0.17.8", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -1336,7 +1335,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1351,12 +1350,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.9", - "darling_macro 0.20.9", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -1375,16 +1374,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1400,13 +1399,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.9", + "darling_core 0.20.10", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1497,9 +1496,9 @@ dependencies = [ [[package]] name = "deflate64" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ace6c86376be0b6cdcf3fb41882e81d94b31587573d1cfa9d01cd06bba210d" +checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "der" @@ -1532,7 +1531,7 @@ version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ - "asn1-rs 0.6.1", + "asn1-rs 0.6.2", "displaydoc", "nom", "num-bigint", @@ -1558,7 +1557,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1576,10 +1575,10 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" dependencies = [ - "darling 0.20.9", + "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1589,7 +1588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ "derive_builder_core", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1643,7 +1642,7 @@ dependencies = [ "pbkdf2", "pwhash", "regex", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "scrypt", "serde", @@ -1687,7 +1686,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -1912,7 +1911,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2098,7 +2097,7 @@ checksum = "f8db6653cbc621a3810d95d55bd342be3e71181d6df21a4eb29ef986202d3f9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "try_map", ] @@ -2137,7 +2136,7 @@ checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" dependencies = [ "frunk_proc_macro_helpers", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2149,7 +2148,7 @@ dependencies = [ "frunk_core", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2161,7 +2160,7 @@ dependencies = [ "frunk_core", "frunk_proc_macro_helpers", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2226,7 +2225,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2281,9 +2280,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe739944a5406424e080edccb6add95685130b9f160d5407c639c7df0c5836b0" +checksum = "96512db27971c2c3eece70a1e106fbe6c87760234e31e8f7e5634912fe52794a" dependencies = [ "typenum", ] @@ -2356,7 +2355,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.3.0", "slab", "tokio", "tokio-util", @@ -2375,7 +2374,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.3.0", "slab", "tokio", "tokio-util", @@ -2602,9 +2601,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -2619,7 +2618,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -2643,9 +2642,9 @@ checksum = "9994b79e8c1a39b3166c63ae7823bb2b00831e2a96a31399c50fe69df408eaeb" [[package]] name = "hyper" -version = "0.14.29" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", @@ -2667,16 +2666,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4fe55fb7a772d59a5ff1dfbff4fe0258d19b89fec4b233e75d35d5d2316badc" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", "futures-util", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -2694,7 +2693,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.29", + "hyper 0.14.30", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -2708,9 +2707,9 @@ checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.4.0", + "hyper 1.4.1", "hyper-util", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -2724,7 +2723,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" dependencies = [ - "hyper 1.4.0", + "hyper 1.4.1", "hyper-util", "pin-project-lite", "tokio", @@ -2741,8 +2740,8 @@ dependencies = [ "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.4.0", + "http-body 1.0.1", + "hyper 1.4.1", "pin-project-lite", "socket2", "tokio", @@ -2889,7 +2888,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -2962,7 +2961,7 @@ dependencies = [ "nlp", "parking_lot", "rand", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "store", "tokio", @@ -2996,9 +2995,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -3076,9 +3075,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -3107,6 +3106,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -3169,7 +3177,7 @@ dependencies = [ "futures-util", "hkdf", "http-body-util", - "hyper 1.4.0", + "hyper 1.4.1", "hyper-util", "jmap_proto", "lz4_flex", @@ -3245,9 +3253,9 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -3267,7 +3275,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", ] [[package]] @@ -3380,12 +3388,12 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -3484,9 +3492,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ "hashbrown 0.14.5", ] @@ -3502,9 +3510,9 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9764018d143cc854c9f17f0b907de70f14393b1f502da6375dce70f00514eb3" +checksum = "109de74d5d2353660401699a4174a4ff23fcc649caf553df71933c7fb45ad868" dependencies = [ "cc", "libc", @@ -3551,9 +3559,9 @@ dependencies = [ [[package]] name = "mail-builder" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef70f53409852d2612f2249810cbbe0c9931ca25b739b734bafc7f61d88051d4" +checksum = "25f5871d5270ed80f2ee750b95600c8d69b05f8653ad3be913b2ad2e924fefcb" dependencies = [ "gethostname", ] @@ -3577,7 +3585,7 @@ dependencies = [ "base64 0.22.1", "gethostname", "md5", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "smtp-proto", "tokio", @@ -3620,7 +3628,7 @@ dependencies = [ "mail-send", "md5", "parking_lot", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "sieve-rs", "store", @@ -3665,7 +3673,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -3759,20 +3767,32 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + [[package]] name = "mysql-common-derive" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afe0450cc9344afff34915f8328600ab5ae19260802a334d0f72d2d5bdda3bfe" dependencies = [ - "darling 0.20.9", + "darling 0.20.10", "heck 0.4.1", "num-bigint", "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "termcolor", "thiserror", ] @@ -3792,7 +3812,7 @@ dependencies = [ "keyed_priority_queue", "lazy_static", "lru", - "mio", + "mio 0.8.11", "mysql_common", "once_cell", "pem", @@ -4011,9 +4031,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.36.1" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" dependencies = [ "memchr", ] @@ -4033,7 +4053,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" dependencies = [ - "asn1-rs 0.6.1", + "asn1-rs 0.6.2", ] [[package]] @@ -4050,9 +4070,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -4071,7 +4091,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -4082,9 +4102,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -4248,9 +4268,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.3", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4314,7 +4334,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.3.0", ] [[package]] @@ -4357,7 +4377,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -4395,7 +4415,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -4459,7 +4479,7 @@ dependencies = [ "jmap_proto", "mail-parser", "mail-send", - "rustls 0.23.10", + "rustls 0.23.12", "store", "tokio", "tokio-rustls 0.26.0", @@ -4469,17 +4489,17 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "postgres-protocol" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520" +checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "byteorder", "bytes", "fallible-iterator 0.2.0", @@ -4493,9 +4513,9 @@ dependencies = [ [[package]] name = "postgres-types" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" +checksum = "02048d9e032fb3cc3413bbf7b83a15d84a5d419778e2628751896d856498eee9" dependencies = [ "bytes", "fallible-iterator 0.2.0", @@ -4510,9 +4530,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f" +dependencies = [ + "zerocopy 0.6.6", +] [[package]] name = "precomputed-hash" @@ -4527,7 +4550,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -4622,17 +4645,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "proxy-header" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e220ac9305411757d06712209b7c2d1d35c3a1a577301e87855f6219585ecb" +checksum = "dc1493f63ddddfba840c3169e997c2905d09538ace72d64e84af6324c6e0e065" dependencies = [ "pin-project-lite", "tokio", @@ -4709,7 +4732,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.10", + "rustls 0.23.12", "thiserror", "tokio", "tracing", @@ -4725,7 +4748,7 @@ dependencies = [ "rand", "ring 0.17.8", "rustc-hash", - "rustls 0.23.10", + "rustls 0.23.12", "slab", "thiserror", "tinyvec", @@ -4734,14 +4757,13 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" dependencies = [ "libc", "once_cell", "socket2", - "tracing", "windows-sys 0.52.0", ] @@ -4930,7 +4952,7 @@ dependencies = [ "pin-project-lite", "rand", "rustls 0.22.4", - "rustls-native-certs 0.7.0", + "rustls-native-certs 0.7.1", "rustls-pemfile 2.1.2", "rustls-pki-types", "ryu", @@ -4954,9 +4976,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags 2.6.0", ] @@ -5040,7 +5062,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-rustls 0.24.2", "ipnet", "js-sys", @@ -5082,9 +5104,9 @@ dependencies = [ "futures-util", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.4.0", + "hyper 1.4.1", "hyper-rustls 0.27.2", "hyper-util", "ipnet", @@ -5096,7 +5118,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -5319,7 +5341,7 @@ dependencies = [ "hex", "hmac 0.12.1", "http 0.2.12", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-rustls 0.24.2", "log", "maybe-async", @@ -5439,21 +5461,21 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "once_cell", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] @@ -5472,9 +5494,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" dependencies = [ "openssl-probe", "rustls-pemfile 2.1.2", @@ -5520,9 +5542,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -5567,9 +5589,9 @@ checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" [[package]] name = "scc" -version = "2.1.4" +version = "2.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4465c22496331e20eb047ff46e7366455bc01c0c02015c4a376de0b2cd3a1af" +checksum = "05ccfb12511cdb770157ace92d7dda771e498445b78f9886e8cdbc5140a4eced" dependencies = [ "sdd", ] @@ -5622,9 +5644,9 @@ dependencies = [ [[package]] name = "sdd" -version = "1.5.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e806d6633ef141556fef75e345275e35652e9c045bbbc21e6ecfce3e9aa2638" +checksum = "177258b64c0faaa9ffd3c65cd3262c2bc7e2588dbbd9c1641d0346145c1bbda8" [[package]] name = "seahash" @@ -5648,9 +5670,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", "core-foundation", @@ -5661,9 +5683,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -5692,9 +5714,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "sequoia-openpgp" -version = "1.21.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b870b0275eeae174058fcf0ce5affccaaafeb7eceeabce8d6c7f51fbe6a41e2a" +checksum = "13261ee216b44d932ef93b2d4a75d45199bef77864bcc5b77ecfc7bc0ecb02d6" dependencies = [ "aes", "aes-gcm", @@ -5748,9 +5770,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] @@ -5766,22 +5788,23 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -5842,7 +5865,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -5871,9 +5894,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sha1collisiondetection" @@ -5883,7 +5906,7 @@ checksum = "1f606421e4a6012877e893c399822a4ed4b089164c5969424e1b9d1e66e6964b" dependencies = [ "const-oid", "digest 0.10.7", - "generic-array 1.0.0", + "generic-array 1.1.0", ] [[package]] @@ -6011,7 +6034,7 @@ dependencies = [ "directory", "form_urlencoded", "http-body-util", - "hyper 1.4.0", + "hyper 1.4.1", "hyper-util", "lazy_static", "lru-cache", @@ -6027,7 +6050,7 @@ dependencies = [ "rayon", "regex", "reqwest 0.12.5", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -6181,7 +6204,7 @@ dependencies = [ "rocksdb", "rusqlite", "rust-s3", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "serde", "serde_json", @@ -6258,9 +6281,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.68" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -6276,7 +6299,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -6311,7 +6334,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -6378,7 +6401,7 @@ dependencies = [ "flate2", "futures", "http-body-util", - "hyper 1.4.0", + "hyper 1.4.1", "hyper-util", "imap", "imap_proto", @@ -6396,7 +6419,7 @@ dependencies = [ "rayon", "reqwest 0.12.5", "ring 0.17.8", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -6415,22 +6438,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -6505,9 +6528,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -6520,39 +6543,38 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.1", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "tokio-postgres" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8" +checksum = "03adcf0147e203b6032c0b2d30be1415ba03bc348901f3ff1cc0df6a733e60c3" dependencies = [ "async-trait", "byteorder", @@ -6601,7 +6623,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", ] @@ -6660,9 +6682,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -6670,7 +6692,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "toml_datetime", "winnow", ] @@ -6688,9 +6710,9 @@ dependencies = [ "bytes", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.4.0", + "hyper 1.4.1", "hyper-timeout", "hyper-util", "percent-encoding", @@ -6707,9 +6729,9 @@ dependencies = [ [[package]] name = "totp-rs" -version = "5.5.1" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4ae9724c5888c0417d2396037ed3b60665925624766416e3e342b6ba5dbd3f" +checksum = "17b2f27dad992486c26b4e7455f38aa487e838d6d61b57e72906ee2b8c287a90" dependencies = [ "base32", "constant_time_eq 0.2.6", @@ -6771,7 +6793,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -7090,7 +7112,7 @@ dependencies = [ "regex", "reqwest 0.12.5", "ring 0.17.8", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pemfile 2.1.2", "rustls-pki-types", "serde", @@ -7106,9 +7128,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom", ] @@ -7127,9 +7149,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "void" @@ -7189,7 +7211,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "wasm-bindgen-shared", ] @@ -7223,7 +7245,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7359,7 +7381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ "windows-core", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -7368,7 +7390,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -7386,7 +7408,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -7406,18 +7428,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -7428,9 +7450,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -7440,9 +7462,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -7452,15 +7474,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -7470,9 +7492,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -7482,9 +7504,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -7494,9 +7516,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -7506,9 +7528,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -7594,7 +7616,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" dependencies = [ - "asn1-rs 0.6.1", + "asn1-rs 0.6.2", "data-encoding", "der-parser 9.0.0", "lazy_static", @@ -7613,9 +7635,9 @@ checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" [[package]] name = "xxhash-rust" -version = "0.8.10" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" [[package]] name = "yasna" @@ -7646,17 +7668,38 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "synstructure 0.13.1", ] +[[package]] +name = "zerocopy" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" +dependencies = [ + "byteorder", + "zerocopy-derive 0.6.6", +] + [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy-derive" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] @@ -7667,7 +7710,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -7687,7 +7730,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", "synstructure 0.13.1", ] @@ -7708,7 +7751,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] @@ -7730,14 +7773,14 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.68", + "syn 2.0.72", ] [[package]] name = "zip" -version = "2.1.3" +version = "2.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775a2b471036342aa69bc5a602bc889cb0a06cda00477d0c69566757d5553d39" +checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" dependencies = [ "aes", "arbitrary", @@ -7749,7 +7792,7 @@ dependencies = [ "displaydoc", "flate2", "hmac 0.12.1", - "indexmap 2.2.6", + "indexmap 2.3.0", "lzma-rs", "memchr", "pbkdf2", @@ -7778,27 +7821,27 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.1.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" +checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.12+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" dependencies = [ "cc", "pkg-config", diff --git a/UPGRADING.md b/UPGRADING.md index 9bda6abe..947587bc 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,3 +1,14 @@ +Upgrading from `v0.8.3` to `v0.9.0` +----------------------------------- + +Version `0.9.0` introduces significant internal improvements while maintaining compatibility with existing database layouts and configuration file formats from version `0.8.0`. As a result, no data or configuration migration is necessary. This release focuses on enhancing performance and functionality, particularly in logging and tracing capabilities. + +To upgrade to Stalwart Mail Server version `0.9.0` from `0.8.x`, begin by downloading the latest version of the `stalwart-mail` binary. Once downloaded, replace the existing binary with the new version. Additionally, it's important to update the WebAdmin interface to the latest version to ensure compatibility and to access new features introduced in this release. + +In terms of breaking changes, this release brings significant updates to webhooks. All webhook event names have been modified, requiring a thorough review and adjustment of existing webhook configurations. Furthermore, the update introduces hundreds of new event types, enhancing the granularity and specificity of event handling capabilities. Users should familiarize themselves with these changes to effectively integrate them into their systems. + +The reason for this release being classified as a major version, despite the absence of changes to the database or configuration formats, is the complete rewrite of the logging and tracing layer. This overhaul substantially improves the efficiency and speed of generating detailed tracing and logging events, making the system more robust and facilitating easier debugging and monitoring. + Upgrading from `v0.7.3` to `v0.8.0` ----------------------------------- diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index 27c65e6f..8da26622 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -174,6 +174,7 @@ pub enum Response { #[derive(Deserialize)] #[serde(tag = "error")] +#[serde(rename_all = "camelCase")] pub enum ManagementApiError { FieldAlreadyExists { field: String, value: String }, FieldMissing { field: String }, @@ -181,7 +182,6 @@ pub enum ManagementApiError { Unsupported { details: String }, AssertFailed, Other { details: String }, - UnsupportedDirectoryOperation { class: String }, } impl Client { @@ -301,9 +301,6 @@ impl Display for ManagementApiError { ManagementApiError::Other { details } => { write!(f, "{}", details) } - ManagementApiError::UnsupportedDirectoryOperation { class } => { - write!(f, "This operation is only available on internal directories. Your current directory is {class}.") - } } } } diff --git a/crates/common/src/config/tracers.rs b/crates/common/src/config/tracers.rs index af1234b2..f36166ac 100644 --- a/crates/common/src/config/tracers.rs +++ b/crates/common/src/config/tracers.rs @@ -91,7 +91,7 @@ impl Tracers { // Parse custom logging levels let mut custom_levels = AHashMap::new(); for event_name in config - .sub_keys("tracing.level", "") + .prefix("tracing.level") .map(|s| s.to_string()) .collect::>() { @@ -176,17 +176,30 @@ impl Tracers { continue; } } - "console" | "stdout" | "stderr" => TracerType::Console(ConsoleTracer { - ansi: config - .property_or_default(("tracer", id, "ansi"), "true") - .unwrap_or(true), - multiline: config - .property_or_default(("tracer", id, "multiline"), "false") - .unwrap_or(false), - buffered: config - .property_or_default(("tracer", id, "buffered"), "true") - .unwrap_or(true), - }), + "console" | "stdout" | "stderr" => { + if !tracers + .iter() + .any(|t| matches!(t.typ, TracerType::Console(_))) + { + TracerType::Console(ConsoleTracer { + ansi: config + .property_or_default(("tracer", id, "ansi"), "true") + .unwrap_or(true), + multiline: config + .property_or_default(("tracer", id, "multiline"), "false") + .unwrap_or(false), + buffered: config + .property_or_default(("tracer", id, "buffered"), "true") + .unwrap_or(true), + }) + } else { + config.new_build_error( + ("tracer", id, "type"), + "Only one console tracer is allowed".to_string(), + ); + continue; + } + } "otel" | "open-telemetry" => { let timeout = config .property::(("tracer", id, "timeout")) @@ -477,6 +490,7 @@ impl Tracers { } // Add default tracer if none were found + #[cfg(not(feature = "test_mode"))] if tracers.is_empty() { for event_type in EventType::variants() { let event_level = custom_levels @@ -493,7 +507,7 @@ impl Tracers { interests: global_interests.clone(), typ: TracerType::Console(ConsoleTracer { ansi: true, - multiline: true, + multiline: false, buffered: true, }), lossy: false, diff --git a/crates/common/src/listener/tls.rs b/crates/common/src/listener/tls.rs index 0a0b9d4c..6e89af0f 100644 --- a/crates/common/src/listener/tls.rs +++ b/crates/common/src/listener/tls.rs @@ -133,7 +133,7 @@ impl TcpAcceptor { let key = core.build_acme_certificate(domain).await; trc::event!( - Acme(trc::AcmeEvent::ClientSuppliedSNI), + Acme(trc::AcmeEvent::ClientSuppliedSni), ListenerId = instance.id.clone(), Protocol = instance.protocol, Name = domain.to_string(), @@ -144,7 +144,7 @@ impl TcpAcceptor { } None => { trc::event!( - Acme(trc::AcmeEvent::ClientMissingSNI), + Acme(trc::AcmeEvent::ClientMissingSni), ListenerId = instance.id.clone(), Protocol = instance.protocol, ); diff --git a/crates/common/src/tracing/journald.rs b/crates/common/src/tracing/journald.rs index 0491a4bc..cae2f99a 100644 --- a/crates/common/src/tracing/journald.rs +++ b/crates/common/src/tracing/journald.rs @@ -299,12 +299,12 @@ impl Subscriber { // https://systemd.io/JOURNAL_NATIVE_PROTOCOL/ use std::os::unix::prelude::AsRawFd; // Write the whole payload to a memfd - let mut mem = memfd::create_sealable()?; + let mut mem = create_sealable()?; mem.write_all(payload)?; // Fully seal the memfd to signal journald that its backing data won't resize anymore // and so is safe to mmap. - memfd::seal_fully(mem.as_raw_fd())?; - socket::send_one_fd_to(&self.socket, mem.as_raw_fd(), JOURNALD_PATH) + seal_fully(mem.as_raw_fd())?; + send_one_fd_to(&self.socket, mem.as_raw_fd(), JOURNALD_PATH) } } diff --git a/crates/jmap-proto/src/error/method.rs b/crates/jmap-proto/src/error/method.rs index d7958af7..749cad93 100644 --- a/crates/jmap-proto/src/error/method.rs +++ b/crates/jmap-proto/src/error/method.rs @@ -152,7 +152,7 @@ impl Serialize for MethodErrorWrapper { ), ), trc::JmapEvent::UnknownCapability - | trc::JmapEvent::NotJSON + | trc::JmapEvent::NotJson | trc::JmapEvent::NotRequest => ( "serverUnavailable", concat!( diff --git a/crates/jmap-proto/src/parser/json.rs b/crates/jmap-proto/src/parser/json.rs index 00ac097a..8492fdb9 100644 --- a/crates/jmap-proto/src/parser/json.rs +++ b/crates/jmap-proto/src/parser/json.rs @@ -41,20 +41,20 @@ impl<'x> Parser<'x> { } pub fn error(&self, message: &str) -> trc::Error { - trc::JmapEvent::NotJSON + trc::JmapEvent::NotJson .into_err() .details(format!("{message} at position {}.", self.pos)) } pub fn error_unterminated(&self) -> trc::Error { - trc::JmapEvent::NotJSON.into_err().details(format!( + trc::JmapEvent::NotJson.into_err().details(format!( "Unterminated string at position {pos}.", pos = self.pos )) } pub fn error_utf8(&self) -> trc::Error { - trc::JmapEvent::NotJSON.into_err().details(format!( + trc::JmapEvent::NotJson.into_err().details(format!( "Invalid UTF-8 sequence at position {pos}.", pos = self.pos )) diff --git a/crates/jmap/src/api/http.rs b/crates/jmap/src/api/http.rs index edcc455e..ac77e007 100644 --- a/crates/jmap/src/api/http.rs +++ b/crates/jmap/src/api/http.rs @@ -707,7 +707,7 @@ impl ToRequestError for trc::Error { match self.as_ref() { trc::EventType::Jmap(cause) => match cause { trc::JmapEvent::UnknownCapability => RequestError::unknown_capability(details), - trc::JmapEvent::NotJSON => RequestError::not_json(details), + trc::JmapEvent::NotJson => RequestError::not_json(details), trc::JmapEvent::NotRequest => RequestError::not_request(details), _ => RequestError::invalid_parameters(), }, diff --git a/crates/jmap/src/api/management/principal.rs b/crates/jmap/src/api/management/principal.rs index ec4b7944..e88dea9d 100644 --- a/crates/jmap/src/api/management/principal.rs +++ b/crates/jmap/src/api/management/principal.rs @@ -418,7 +418,11 @@ impl JMAP { }; Err(manage::unsupported(format!( - "Requested action is unsupported for {class} directories.", + concat!( + "{} directory cannot be managed. ", + "Only internal directories support inserts and update operations." + ), + class ))) } } diff --git a/crates/jmap/src/auth/authenticate.rs b/crates/jmap/src/auth/authenticate.rs index b278941f..492faac9 100644 --- a/crates/jmap/src/auth/authenticate.rs +++ b/crates/jmap/src/auth/authenticate.rs @@ -160,25 +160,29 @@ impl JMAP { } pub async fn get_access_token(&self, account_id: u32) -> trc::Result { - match self + let err = match self .core .storage .directory .query(QueryBy::Id(account_id), true) .await { - Ok(Some(principal)) => self.update_access_token(AccessToken::new(principal)).await, + Ok(Some(principal)) => { + return self.update_access_token(AccessToken::new(principal)).await + } Ok(None) => Err(trc::AuthEvent::Error .into_err() .details("Account not found.") .caused_by(trc::location!())), - Err(err) => match &self.core.jmap.fallback_admin { - Some((_, secret)) if account_id == u32::MAX => { - self.update_access_token(AccessToken::new(Principal::fallback_admin(secret))) - .await - } - _ => Err(err), - }, + Err(err) => Err(err), + }; + + match &self.core.jmap.fallback_admin { + Some((_, secret)) if account_id == u32::MAX => { + self.update_access_token(AccessToken::new(Principal::fallback_admin(secret))) + .await + } + _ => err, } } } diff --git a/crates/smtp/src/inbound/rcpt.rs b/crates/smtp/src/inbound/rcpt.rs index 04cd8382..7ca3abb5 100644 --- a/crates/smtp/src/inbound/rcpt.rs +++ b/crates/smtp/src/inbound/rcpt.rs @@ -280,7 +280,7 @@ impl Session { if self.is_allowed().await { trc::event!( - Smtp(SmtpEvent::RelayNotAllowed), + Smtp(SmtpEvent::RcptTo), SpanId = self.data.session_id, To = self.data.rcpt_to.last().unwrap().address_lcase.clone(), ); diff --git a/crates/smtp/src/outbound/delivery.rs b/crates/smtp/src/outbound/delivery.rs index 4a3daab1..a6e4c49a 100644 --- a/crates/smtp/src/outbound/delivery.rs +++ b/crates/smtp/src/outbound/delivery.rs @@ -500,7 +500,7 @@ impl DeliveryAttempt { remote_hosts = remote_hosts_; } else { trc::event!( - Delivery(DeliveryEvent::NullMX), + Delivery(DeliveryEvent::NullMx), SpanId = message.span_id, Domain = domain.domain.clone(), Elapsed = time.elapsed(), diff --git a/crates/store/src/backend/elastic/mod.rs b/crates/store/src/backend/elastic/mod.rs index 1d0c239a..3ba3b7fc 100644 --- a/crates/store/src/backend/elastic/mod.rs +++ b/crates/store/src/backend/elastic/mod.rs @@ -111,7 +111,7 @@ impl ElasticSearchStore { .exists(IndicesExistsParts::Index(&[INDEX_NAMES[0]])) .send() .await - .map_err(|err| trc::StoreEvent::ElasticSearchError.reason(err))?; + .map_err(|err| trc::StoreEvent::ElasticsearchError.reason(err))?; if exists.status_code() == StatusCode::NOT_FOUND { let response = self @@ -183,11 +183,11 @@ pub(crate) async fn assert_success(response: Result) -> trc::Re if status.is_success() { Ok(response) } else { - Err(trc::StoreEvent::ElasticSearchError + Err(trc::StoreEvent::ElasticsearchError .reason(response.text().await.unwrap_or_default()) .ctx(trc::Key::Code, status.as_u16())) } } - Err(err) => Err(trc::StoreEvent::ElasticSearchError.reason(err)), + Err(err) => Err(trc::StoreEvent::ElasticsearchError.reason(err)), } } diff --git a/crates/store/src/backend/elastic/query.rs b/crates/store/src/backend/elastic/query.rs index 73367049..b9e3c0a5 100644 --- a/crates/store/src/backend/elastic/query.rs +++ b/crates/store/src/backend/elastic/query.rs @@ -107,14 +107,14 @@ impl ElasticSearchStore { let json: Value = response .json() .await - .map_err(|err| trc::StoreEvent::ElasticSearchError.reason(err))?; + .map_err(|err| trc::StoreEvent::ElasticsearchError.reason(err))?; let mut results = RoaringBitmap::new(); for hit in json["hits"]["hits"].as_array().ok_or_else(|| { - trc::StoreEvent::ElasticSearchError.reason("Invalid response from ElasticSearch") + trc::StoreEvent::ElasticsearchError.reason("Invalid response from ElasticSearch") })? { results.insert(hit["_source"]["document_id"].as_u64().ok_or_else(|| { - trc::StoreEvent::ElasticSearchError.reason("Invalid response from ElasticSearch") + trc::StoreEvent::ElasticsearchError.reason("Invalid response from ElasticSearch") })? as u32); } diff --git a/crates/store/src/backend/foundationdb/mod.rs b/crates/store/src/backend/foundationdb/mod.rs index ffb831bd..585def96 100644 --- a/crates/store/src/backend/foundationdb/mod.rs +++ b/crates/store/src/backend/foundationdb/mod.rs @@ -77,7 +77,7 @@ impl TimedTransaction { #[inline(always)] fn into_error(error: FdbError) -> trc::Error { - trc::StoreEvent::FoundationDBError + trc::StoreEvent::FoundationdbError .reason(error.message()) .ctx(trc::Key::Code, error.code()) } diff --git a/crates/store/src/backend/foundationdb/write.rs b/crates/store/src/backend/foundationdb/write.rs index 7ae68fac..0eb55082 100644 --- a/crates/store/src/backend/foundationdb/write.rs +++ b/crates/store/src/backend/foundationdb/write.rs @@ -94,7 +94,7 @@ impl FdbStore { *key.last_mut().unwrap() += 1; } else { trx.cancel(); - return Err(trc::StoreEvent::FoundationDBError + return Err(trc::StoreEvent::FoundationdbError .ctx( trc::Key::Reason, "Value is too large", diff --git a/crates/store/src/backend/mysql/mod.rs b/crates/store/src/backend/mysql/mod.rs index 9571fcd4..08376334 100644 --- a/crates/store/src/backend/mysql/mod.rs +++ b/crates/store/src/backend/mysql/mod.rs @@ -20,5 +20,5 @@ pub struct MysqlStore { #[inline(always)] fn into_error(err: impl Display) -> trc::Error { - trc::StoreEvent::MySQLError.reason(err) + trc::StoreEvent::MysqlError.reason(err) } diff --git a/crates/store/src/backend/postgres/mod.rs b/crates/store/src/backend/postgres/mod.rs index 157d06f2..af839742 100644 --- a/crates/store/src/backend/postgres/mod.rs +++ b/crates/store/src/backend/postgres/mod.rs @@ -21,5 +21,5 @@ pub struct PostgresStore { #[inline(always)] fn into_error(err: impl Display) -> trc::Error { - trc::StoreEvent::PostgreSQLError.reason(err) + trc::StoreEvent::PostgresqlError.reason(err) } diff --git a/crates/store/src/backend/rocksdb/mod.rs b/crates/store/src/backend/rocksdb/mod.rs index b6ca584d..6e14130d 100644 --- a/crates/store/src/backend/rocksdb/mod.rs +++ b/crates/store/src/backend/rocksdb/mod.rs @@ -38,5 +38,5 @@ pub struct RocksDbStore { #[inline(always)] fn into_error(err: rocksdb::Error) -> trc::Error { - trc::StoreEvent::RocksDBError.reason(err) + trc::StoreEvent::RocksdbError.reason(err) } diff --git a/crates/store/src/backend/sqlite/mod.rs b/crates/store/src/backend/sqlite/mod.rs index 4f3089df..47ec465a 100644 --- a/crates/store/src/backend/sqlite/mod.rs +++ b/crates/store/src/backend/sqlite/mod.rs @@ -24,5 +24,5 @@ pub struct SqliteStore { #[inline(always)] fn into_error(err: impl Display) -> trc::Error { - trc::StoreEvent::SQLiteError.reason(err) + trc::StoreEvent::SqliteError.reason(err) } diff --git a/crates/trc/src/conv.rs b/crates/trc/src/conv.rs index 3b196fa4..7321ac23 100644 --- a/crates/trc/src/conv.rs +++ b/crates/trc/src/conv.rs @@ -275,7 +275,7 @@ impl From for Event { mail_auth::Error::ArcInvalidInstance(instance) => { EventType::Arc(ArcEvent::InvalidInstance).ctx(Key::Id, instance) } - mail_auth::Error::ArcInvalidCV => EventType::Arc(ArcEvent::InvalidCV).into_err(), + mail_auth::Error::ArcInvalidCV => EventType::Arc(ArcEvent::InvalidCv).into_err(), mail_auth::Error::ArcHasHeaderTag => EventType::Arc(ArcEvent::HasHeaderTag).into_err(), mail_auth::Error::ArcBrokenChain => EventType::Arc(ArcEvent::BrokenChain).into_err(), mail_auth::Error::NotAligned => { diff --git a/crates/trc/src/fmt.rs b/crates/trc/src/fmt.rs index 2e293fd4..b21b179d 100644 --- a/crates/trc/src/fmt.rs +++ b/crates/trc/src/fmt.rs @@ -333,9 +333,18 @@ mod tests { assert!(!Level::Error.is_contained(Level::Trace)); assert!(!Level::Debug.is_contained(Level::Trace)); + let mut names = Vec::with_capacity(100); + for event in EventType::variants() { - println!("{}", event.name()); + names.push(event.name()); assert_eq!(EventType::try_parse(event.name()).unwrap(), event); } + + // sort + names.sort(); + + for name in names { + println!("{:?},", name); + } } } diff --git a/crates/trc/src/imple.rs b/crates/trc/src/imple.rs index ee8883fd..f8d65307 100644 --- a/crates/trc/src/imple.rs +++ b/crates/trc/src/imple.rs @@ -146,7 +146,7 @@ impl Event { !matches!( self.inner, EventType::Jmap( - JmapEvent::UnknownCapability | JmapEvent::NotJSON | JmapEvent::NotRequest + JmapEvent::UnknownCapability | JmapEvent::NotJson | JmapEvent::NotRequest ) ) } @@ -256,13 +256,13 @@ impl StoreEvent { match self { Self::AssertValueFailed => "Another process has modified the value", Self::BlobMissingMarker => "Blob is missing marker", - Self::FoundationDBError => "FoundationDB error", - Self::MySQLError => "MySQL error", - Self::PostgreSQLError => "PostgreSQL error", - Self::RocksDBError => "RocksDB error", - Self::SQLiteError => "SQLite error", + Self::FoundationdbError => "FoundationDB error", + Self::MysqlError => "MySQL error", + Self::PostgresqlError => "PostgreSQL error", + Self::RocksdbError => "RocksDB error", + Self::SqliteError => "SQLite error", Self::LdapError => "LDAP error", - Self::ElasticSearchError => "ElasticSearch error", + Self::ElasticsearchError => "ElasticSearch error", Self::RedisError => "Redis error", Self::S3Error => "S3 error", Self::FilesystemError => "Filesystem error", @@ -388,7 +388,7 @@ impl JmapEvent { Self::CannotCalculateChanges => "Cannot calculate changes", Self::UnknownDataType => "Unknown data type", Self::UnknownCapability => "Unknown capability", - Self::NotJSON => "Not JSON", + Self::NotJson => "Not JSON", Self::NotRequest => "Not a request", _ => "Other message", } @@ -858,13 +858,13 @@ impl EventType { StoreEvent::Ingest | StoreEvent::IngestDuplicate => Level::Info, StoreEvent::IngestError | StoreEvent::AssertValueFailed - | StoreEvent::FoundationDBError - | StoreEvent::MySQLError - | StoreEvent::PostgreSQLError - | StoreEvent::RocksDBError - | StoreEvent::SQLiteError + | StoreEvent::FoundationdbError + | StoreEvent::MysqlError + | StoreEvent::PostgresqlError + | StoreEvent::RocksdbError + | StoreEvent::SqliteError | StoreEvent::LdapError - | StoreEvent::ElasticSearchError + | StoreEvent::ElasticsearchError | StoreEvent::RedisError | StoreEvent::S3Error | StoreEvent::FilesystemError @@ -1089,7 +1089,7 @@ impl EventType { EventType::Arc(event) => match event { ArcEvent::ChainTooLong | ArcEvent::InvalidInstance - | ArcEvent::InvalidCV + | ArcEvent::InvalidCv | ArcEvent::HasHeaderTag | ArcEvent::BrokenChain => Level::Debug, ArcEvent::SealerNotFound => Level::Warn, @@ -1109,10 +1109,9 @@ impl EventType { | PurgeEvent::TombstoneCleanup => Level::Debug, }, EventType::Eval(event) => match event { + EvalEvent::Error => Level::Debug, EvalEvent::Result => Level::Trace, - EvalEvent::Error | EvalEvent::DirectoryNotFound | EvalEvent::StoreNotFound => { - Level::Warn - } + EvalEvent::DirectoryNotFound | EvalEvent::StoreNotFound => Level::Warn, }, EventType::Server(event) => match event { ServerEvent::Startup | ServerEvent::Shutdown | ServerEvent::Licensing => { @@ -1144,18 +1143,18 @@ impl EventType { | AcmeEvent::DnsRecordCreationFailed => Level::Warn, AcmeEvent::RenewBackoff | AcmeEvent::DnsRecordDeletionFailed - | AcmeEvent::ClientSuppliedSNI - | AcmeEvent::ClientMissingSNI + | AcmeEvent::ClientSuppliedSni + | AcmeEvent::ClientMissingSni | AcmeEvent::DnsRecordNotPropagated | AcmeEvent::DnsRecordLookupFailed => Level::Debug, }, EventType::Tls(event) => match event { TlsEvent::Handshake => Level::Info, - TlsEvent::HandshakeError => Level::Debug, + TlsEvent::HandshakeError | TlsEvent::CertificateNotFound => Level::Debug, TlsEvent::NotConfigured => Level::Error, - TlsEvent::CertificateNotFound - | TlsEvent::NoCertificatesAvailable - | TlsEvent::MultipleCertificatesAvailable => Level::Warn, + TlsEvent::NoCertificatesAvailable | TlsEvent::MultipleCertificatesAvailable => { + Level::Warn + } }, EventType::Sieve(event) => match event { SieveEvent::NotSupported @@ -1182,8 +1181,8 @@ impl EventType { SpamEvent::ListUpdated => Level::Info, }, EventType::Http(event) => match event { - HttpEvent::Error | HttpEvent::XForwardedMissing => Level::Warn, - HttpEvent::RequestUrl => Level::Debug, + HttpEvent::XForwardedMissing => Level::Warn, + HttpEvent::Error | HttpEvent::RequestUrl => Level::Debug, HttpEvent::RequestBody | HttpEvent::ResponseBody => Level::Trace, }, EventType::PushSubscription(event) => match event { @@ -1269,7 +1268,7 @@ impl EventType { | DeliveryEvent::DomainDeliveryStart | DeliveryEvent::MxLookupFailed | DeliveryEvent::IpLookupFailed - | DeliveryEvent::NullMX + | DeliveryEvent::NullMx | DeliveryEvent::Connect | DeliveryEvent::ConnectError | DeliveryEvent::GreetingFailed @@ -1616,7 +1615,7 @@ impl DeliveryEvent { DeliveryEvent::MxLookupFailed => "MX record lookup failed", DeliveryEvent::IpLookup => "IP address lookup", DeliveryEvent::IpLookupFailed => "IP address lookup failed", - DeliveryEvent::NullMX => "Null MX record found", + DeliveryEvent::NullMx => "Null MX record found", DeliveryEvent::Connect => "Connecting to remote server", DeliveryEvent::ConnectError => "Connection error", DeliveryEvent::MissingOutboundHostname => "Missing outbound hostname in configuration", @@ -1849,9 +1848,9 @@ impl NetworkEvent { match self { NetworkEvent::ConnectionStart => "Network connection started", NetworkEvent::ConnectionEnd => "Network connection ended", - NetworkEvent::ListenStart => "Network listening started", - NetworkEvent::ListenStop => "Network listening stopped", - NetworkEvent::ListenError => "Network listening error", + NetworkEvent::ListenStart => "Network listener started", + NetworkEvent::ListenStop => "Network listener stopped", + NetworkEvent::ListenError => "Network listener error", NetworkEvent::BindError => "Network bind error", NetworkEvent::ReadError => "Network read error", NetworkEvent::WriteError => "Network write error", @@ -1920,8 +1919,8 @@ impl AcmeEvent { AcmeEvent::DnsRecordLookupFailed => "ACME DNS record lookup failed", AcmeEvent::DnsRecordPropagated => "ACME DNS record propagated", AcmeEvent::DnsRecordPropagationTimeout => "ACME DNS record propagation timeout", - AcmeEvent::ClientSuppliedSNI => "ACME client supplied SNI", - AcmeEvent::ClientMissingSNI => "ACME client missing SNI", + AcmeEvent::ClientSuppliedSni => "ACME client supplied SNI", + AcmeEvent::ClientMissingSni => "ACME client missing SNI", AcmeEvent::TlsAlpnReceived => "ACME TLS ALPN received", AcmeEvent::TlsAlpnError => "ACME TLS ALPN error", AcmeEvent::TokenNotFound => "ACME token not found", @@ -1980,7 +1979,7 @@ impl ArcEvent { match self { ArcEvent::ChainTooLong => "ARC chain too long", ArcEvent::InvalidInstance => "Invalid ARC instance", - ArcEvent::InvalidCV => "Invalid ARC CV", + ArcEvent::InvalidCv => "Invalid ARC CV", ArcEvent::HasHeaderTag => "ARC has header tag", ArcEvent::BrokenChain => "Broken ARC chain", ArcEvent::SealerNotFound => "ARC sealer not found", @@ -2073,13 +2072,13 @@ impl StoreEvent { match self { StoreEvent::IngestError => "Message ingestion error", StoreEvent::AssertValueFailed => "Another process modified the record", - StoreEvent::FoundationDBError => "FoundationDB error", - StoreEvent::MySQLError => "MySQL error", - StoreEvent::PostgreSQLError => "PostgreSQL error", - StoreEvent::RocksDBError => "RocksDB error", - StoreEvent::SQLiteError => "SQLite error", + StoreEvent::FoundationdbError => "FoundationDB error", + StoreEvent::MysqlError => "MySQL error", + StoreEvent::PostgresqlError => "PostgreSQL error", + StoreEvent::RocksdbError => "RocksDB error", + StoreEvent::SqliteError => "SQLite error", StoreEvent::LdapError => "LDAP error", - StoreEvent::ElasticSearchError => "ElasticSearch error", + StoreEvent::ElasticsearchError => "ElasticSearch error", StoreEvent::RedisError => "Redis error", StoreEvent::S3Error => "S3 error", StoreEvent::FilesystemError => "Filesystem error", @@ -2122,7 +2121,7 @@ impl JmapEvent { JmapEvent::CannotCalculateChanges => "Cannot calculate JMAP changes", JmapEvent::UnknownDataType => "Unknown JMAP data type", JmapEvent::UnknownCapability => "Unknown JMAP capability", - JmapEvent::NotJSON => "JMAP request is not JSON", + JmapEvent::NotJson => "JMAP request is not JSON", JmapEvent::NotRequest => "JMAP input is not a request", JmapEvent::WebsocketStart => "JMAP WebSocket connection started", JmapEvent::WebsocketStop => "JMAP WebSocket connection stopped", diff --git a/crates/trc/src/lib.rs b/crates/trc/src/lib.rs index 2cc00b4d..a7b6b3e3 100644 --- a/crates/trc/src/lib.rs +++ b/crates/trc/src/lib.rs @@ -444,7 +444,7 @@ pub enum DeliveryEvent { MxLookupFailed, IpLookup, IpLookupFailed, - NullMX, + NullMx, Connect, ConnectError, MissingOutboundHostname, @@ -693,8 +693,8 @@ pub enum AcmeEvent { DnsRecordLookupFailed, DnsRecordPropagated, DnsRecordPropagationTimeout, - ClientSuppliedSNI, - ClientMissingSNI, + ClientSuppliedSni, + ClientMissingSni, TlsAlpnReceived, TlsAlpnError, TokenNotFound, @@ -741,7 +741,7 @@ pub enum ConfigEvent { pub enum ArcEvent { ChainTooLong, InvalidInstance, - InvalidCV, + InvalidCv, HasHeaderTag, BrokenChain, SealerNotFound, @@ -817,13 +817,13 @@ pub enum StoreEvent { // Errors IngestError, AssertValueFailed, - FoundationDBError, - MySQLError, - PostgreSQLError, - RocksDBError, - SQLiteError, + FoundationdbError, + MysqlError, + PostgresqlError, + RocksdbError, + SqliteError, LdapError, - ElasticSearchError, + ElasticsearchError, RedisError, S3Error, FilesystemError, @@ -874,7 +874,7 @@ pub enum JmapEvent { // Request errors UnknownCapability, - NotJSON, + NotJson, NotRequest, // Not JMAP standard diff --git a/crates/trc/src/subscriber.rs b/crates/trc/src/subscriber.rs index c30a8ba6..405b1167 100644 --- a/crates/trc/src/subscriber.rs +++ b/crates/trc/src/subscriber.rs @@ -45,7 +45,10 @@ impl Subscriber { pub fn send_batch(&mut self) -> Result<(), ChannelError> { if !self.batch.is_empty() { - match self.tx.try_send(std::mem::take(&mut self.batch)) { + match self + .tx + .try_send(std::mem::replace(&mut self.batch, Vec::with_capacity(128))) + { Ok(_) => Ok(()), Err(TrySendError::Full(mut events)) => { if self.lossy && events.len() > MAX_BATCH_SIZE { diff --git a/crates/utils/src/config/utils.rs b/crates/utils/src/config/utils.rs index c2d992f3..504e5834 100644 --- a/crates/utils/src/config/utils.rs +++ b/crates/utils/src/config/utils.rs @@ -130,6 +130,13 @@ impl Config { }) } + pub fn prefix<'x, 'y: 'x>(&'y self, prefix: impl AsKey) -> impl Iterator + 'x { + let prefix = prefix.as_prefix(); + self.keys + .keys() + .filter_map(move |key| key.strip_prefix(&prefix)) + } + pub fn set_values<'x, 'y: 'x>(&'y self, prefix: impl AsKey) -> impl Iterator + 'x { let prefix = prefix.as_prefix(); diff --git a/tests/resources/ldap.cfg b/tests/resources/ldap.cfg deleted file mode 100644 index ad8945ea..00000000 --- a/tests/resources/ldap.cfg +++ /dev/null @@ -1,125 +0,0 @@ -################# -# LDAP test config - -################# -# General configuration. -debug = true -watchconfig = true - -################# -# Server configuration. -[ldap] - enabled = true - # run on a non privileged port - listen = "0.0.0.0:3893" - -[ldaps] -# to enable ldaps genrerate a certificate, eg. with: -# openssl req -x509 -newkey rsa:4096 -keyout example.key -out example.crt -days 365 -nodes -subj '/CN=`hostname`' - enabled = false - listen = "0.0.0.0:3894" - cert = "example.crt" - key = "example.key" - -################# -# The backend section controls the data store. -[backend] - datastore = "config" - baseDN = "dc=example,dc=org" - nameformat = "cn" - groupformat = "ou" - -[behaviors] - # Ignore all capabilities restrictions, for instance allowing every user to perform a search - IgnoreCapabilities = false - # Enable a "fail2ban" type backoff mechanism temporarily banning repeated failed login attempts - LimitFailedBinds = true - # How many failed login attempts are allowed before a ban is imposed - NumberOfFailedBinds = 3 - # How long (in seconds) is the window for failed login attempts - PeriodOfFailedBinds = 10 - # How long (in seconds) is the ban duration - BlockFailedBindsFor = 60 - # Clean learnt IP addresses every N seconds - PruneSourceTableEvery = 600 - # Clean learnt IP addresses not seen in N seconds - PruneSourcesOlderThan = 600 - -################# -# The users section contains a hardcoded list of valid users. -[[users]] - name = "john" - givenname = "john.doe@example.org" - sn = "info@example.org" - uidnumber = 2 - primarygroup = 5 - mail = "john@example.org" - [[users.customattributes]] - principalName = ["John Doe"] - userPassword = ["12345"] - -[[users]] - name = "jane" - sn = "info@example.org" - mail = "jane@example.org" - uidnumber = 3 - primarygroup = 5 - [[users.customattributes]] - otherGroups = ["support"] - principalName = ["Jane Doe"] - userPassword = ["abcde"] - -[[users]] - name = "bill" - sn = "info@example.org" - mail = "bill@example.org" - uidnumber = 4 - [[users.customattributes]] - principalName = ["Bill Foobar"] - diskQuota = [500000] - userPassword = ["$2y$05$bvIG6Nmid91Mu9RcmmWZfO5HJIMCT8riNW0hEp8f6/FuA2/mHZFpe"] - -[[users]] - name = "robert" - sn = "@catchall.org" - mail = "robert@catchall.org" - uidnumber = 7 - [[users.customattributes]] - principalName = ["Robect Foobar"] - userPassword = ["nopass"] - -[[users]] - name = "serviceuser" - mail = "serviceuser@example.org" - uidnumber = 5003 - primarygroup = 5502 - passsha256 = "652c7dc687d98c9889304ed2e408c74b611e86a40caa51c4b43f1dd5913c5cd0" # mysecret - [[users.capabilities]] - action = "search" - object = "*" - - -################# -# The groups section contains a hardcoded list of valid users. -[[groups]] - name = "sales" - gidnumber = 5 - -[[groups]] - name = "support" - gidnumber = 6 - -[[groups]] - name = "svcaccts" - gidnumber = 5502 - - -################# -# Enable and configure the optional REST API here. -[api] - enabled = false - internals = true # debug application performance - tls = false # enable TLS for production!! - listen = "0.0.0.0:5555" - cert = "cert.pem" - key = "key.pem" diff --git a/tests/resources/ldap/ldap.cfg b/tests/resources/ldap/ldap.cfg new file mode 100644 index 00000000..ad8945ea --- /dev/null +++ b/tests/resources/ldap/ldap.cfg @@ -0,0 +1,125 @@ +################# +# LDAP test config + +################# +# General configuration. +debug = true +watchconfig = true + +################# +# Server configuration. +[ldap] + enabled = true + # run on a non privileged port + listen = "0.0.0.0:3893" + +[ldaps] +# to enable ldaps genrerate a certificate, eg. with: +# openssl req -x509 -newkey rsa:4096 -keyout example.key -out example.crt -days 365 -nodes -subj '/CN=`hostname`' + enabled = false + listen = "0.0.0.0:3894" + cert = "example.crt" + key = "example.key" + +################# +# The backend section controls the data store. +[backend] + datastore = "config" + baseDN = "dc=example,dc=org" + nameformat = "cn" + groupformat = "ou" + +[behaviors] + # Ignore all capabilities restrictions, for instance allowing every user to perform a search + IgnoreCapabilities = false + # Enable a "fail2ban" type backoff mechanism temporarily banning repeated failed login attempts + LimitFailedBinds = true + # How many failed login attempts are allowed before a ban is imposed + NumberOfFailedBinds = 3 + # How long (in seconds) is the window for failed login attempts + PeriodOfFailedBinds = 10 + # How long (in seconds) is the ban duration + BlockFailedBindsFor = 60 + # Clean learnt IP addresses every N seconds + PruneSourceTableEvery = 600 + # Clean learnt IP addresses not seen in N seconds + PruneSourcesOlderThan = 600 + +################# +# The users section contains a hardcoded list of valid users. +[[users]] + name = "john" + givenname = "john.doe@example.org" + sn = "info@example.org" + uidnumber = 2 + primarygroup = 5 + mail = "john@example.org" + [[users.customattributes]] + principalName = ["John Doe"] + userPassword = ["12345"] + +[[users]] + name = "jane" + sn = "info@example.org" + mail = "jane@example.org" + uidnumber = 3 + primarygroup = 5 + [[users.customattributes]] + otherGroups = ["support"] + principalName = ["Jane Doe"] + userPassword = ["abcde"] + +[[users]] + name = "bill" + sn = "info@example.org" + mail = "bill@example.org" + uidnumber = 4 + [[users.customattributes]] + principalName = ["Bill Foobar"] + diskQuota = [500000] + userPassword = ["$2y$05$bvIG6Nmid91Mu9RcmmWZfO5HJIMCT8riNW0hEp8f6/FuA2/mHZFpe"] + +[[users]] + name = "robert" + sn = "@catchall.org" + mail = "robert@catchall.org" + uidnumber = 7 + [[users.customattributes]] + principalName = ["Robect Foobar"] + userPassword = ["nopass"] + +[[users]] + name = "serviceuser" + mail = "serviceuser@example.org" + uidnumber = 5003 + primarygroup = 5502 + passsha256 = "652c7dc687d98c9889304ed2e408c74b611e86a40caa51c4b43f1dd5913c5cd0" # mysecret + [[users.capabilities]] + action = "search" + object = "*" + + +################# +# The groups section contains a hardcoded list of valid users. +[[groups]] + name = "sales" + gidnumber = 5 + +[[groups]] + name = "support" + gidnumber = 6 + +[[groups]] + name = "svcaccts" + gidnumber = 5502 + + +################# +# Enable and configure the optional REST API here. +[api] + enabled = false + internals = true # debug application performance + tls = false # enable TLS for production!! + listen = "0.0.0.0:5555" + cert = "cert.pem" + key = "key.pem" diff --git a/tests/resources/ldap/run_glauth.sh b/tests/resources/ldap/run_glauth.sh new file mode 100644 index 00000000..a802fbb9 --- /dev/null +++ b/tests/resources/ldap/run_glauth.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +~/utils/glauth/glauth-darwin-arm64 -c tests/resources/ldap/ldap.cfg diff --git a/tests/resources/smtp/dsn/delay.eml b/tests/resources/smtp/dsn/delay.eml index 607f8147..dcac1178 100644 --- a/tests/resources/smtp/dsn/delay.eml +++ b/tests/resources/smtp/dsn/delay.eml @@ -2,6 +2,7 @@ From: "Mail Delivery Subsystem" To: sender@foobar.org Auto-Submitted: auto-generated Subject: Warning: Delay in message delivery +MIME-Version: 1.0 Content-Type: multipart/report; report-type="delivery-status"; boundary="mime_boundary" diff --git a/tests/resources/smtp/dsn/failure.eml b/tests/resources/smtp/dsn/failure.eml index 813b32ae..92372885 100644 --- a/tests/resources/smtp/dsn/failure.eml +++ b/tests/resources/smtp/dsn/failure.eml @@ -2,6 +2,7 @@ From: "Mail Delivery Subsystem" To: sender@foobar.org Auto-Submitted: auto-generated Subject: Failed to deliver message +MIME-Version: 1.0 Content-Type: multipart/report; report-type="delivery-status"; boundary="mime_boundary" diff --git a/tests/resources/smtp/dsn/mixed.eml b/tests/resources/smtp/dsn/mixed.eml index a4b7595a..2e305f56 100644 --- a/tests/resources/smtp/dsn/mixed.eml +++ b/tests/resources/smtp/dsn/mixed.eml @@ -2,6 +2,7 @@ From: "Mail Delivery Subsystem" To: sender@foobar.org Auto-Submitted: auto-generated Subject: Partially delivered message +MIME-Version: 1.0 Content-Type: multipart/report; report-type="delivery-status"; boundary="mime_boundary" diff --git a/tests/resources/smtp/dsn/success.eml b/tests/resources/smtp/dsn/success.eml index 15c631be..ffc0e3a2 100644 --- a/tests/resources/smtp/dsn/success.eml +++ b/tests/resources/smtp/dsn/success.eml @@ -2,6 +2,7 @@ From: "Mail Delivery Subsystem" To: sender@foobar.org Auto-Submitted: auto-generated Subject: Successfully delivered message +MIME-Version: 1.0 Content-Type: multipart/report; report-type="delivery-status"; boundary="mime_boundary" -- cgit v1.2.3-70-g09d2