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/ldap.cfg similarity index 100% rename from tests/resources/ldap.cfg rename to tests/resources/ldap/ldap.cfg 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"