diff --git a/Cargo.lock b/Cargo.lock index 1841dac9..fea091bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,12 +109,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -1022,9 +1016,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.36" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "jobserver", @@ -1090,18 +1084,17 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "pure-rust-locales", "serde", "wasm-bindgen", - "windows-link 0.1.3", + "windows-link 0.2.0", ] [[package]] @@ -1248,7 +1241,7 @@ dependencies = [ "idna", "imagesize", "imap_proto", - "indexmap 2.11.0", + "indexmap 2.11.1", "infer 0.19.0", "jmap_proto", "libc", @@ -1297,7 +1290,7 @@ dependencies = [ "whatlang", "x509-parser 0.17.0", "xxhash-rust", - "zip", + "zip 4.6.1", ] [[package]] @@ -1403,9 +1396,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb8a602185c3c95b52f86dc78e55a6df9a287a7a93ddbcf012509930880cf879" +checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" dependencies = [ "typewit", ] @@ -1460,6 +1453,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc16" version = "0.4.0" @@ -2294,22 +2302,22 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "110ca254af04e46794fcc4be0991e72e13fdd8c78119e02c76a5473f6f74e049" dependencies = [ - "serde", + "serde_core", "typeid", ] [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -2693,15 +2701,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generator" version = "0.8.7" @@ -2780,7 +2779,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.4+wasi-0.2.4", + "wasi 0.14.5+wasi-0.2.4", "wasm-bindgen", ] @@ -2870,7 +2869,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.0", + "indexmap 2.11.1", "slab", "tokio", "tokio-util", @@ -2889,7 +2888,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.0", + "indexmap 2.11.1", "slab", "tokio", "tokio-util", @@ -3277,9 +3276,9 @@ checksum = "9994b79e8c1a39b3166c63ae7823bb2b00831e2a96a31399c50fe69df408eaeb" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" @@ -3398,9 +3397,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3408,7 +3407,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.0", ] [[package]] @@ -3558,7 +3557,7 @@ dependencies = [ "directory", "email", "imap_proto", - "indexmap 2.11.0", + "indexmap 2.11.1", "jmap_proto", "mail-parser", "mail-send", @@ -3640,9 +3639,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -3825,25 +3824,25 @@ dependencies = [ [[package]] name = "jieba-macros" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105f38f083bb1a79ad523bd32fa0d8ffcb6abd2fc4da9da203c32bca5b6ace3" +checksum = "348294e44ee7e3c42685da656490f8febc7359632544019621588902216da95c" dependencies = [ "phf_codegen", ] [[package]] name = "jieba-rs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47982a320106da83b0c5d6aec0fb83e109f0132b69670b063adaa6fa5b4f3f4a" +checksum = "766bd7012aa5ba49411ebdf4e93bddd59b182d2918e085d58dec5bb9b54b7105" dependencies = [ "cedarwood", - "fxhash", "include-flate", "jieba-macros", - "phf 0.12.1", + "phf 0.13.1", "regex", + "rustc-hash 2.1.1", ] [[package]] @@ -4012,7 +4011,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", ] [[package]] @@ -4249,9 +4248,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -4332,17 +4331,28 @@ dependencies = [ ] [[package]] -name = "mail-auth" -version = "0.7.1" +name = "lzma-rust2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628034968911ec4ac1d03468d55113c182af3848b4f6da19e736c5fa2bc684a3" +checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +dependencies = [ + "crc", + "sha2 0.10.9", +] + +[[package]] +name = "mail-auth" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cf926be0f7007993709797fcb467b16b0d22acea729af7543c8b4eed5a8bb7" dependencies = [ "ahash", "flate2", + "hashify", "hickory-resolver", "mail-builder", "mail-parser", - "quick-xml 0.37.5", + "quick-xml 0.38.3", "quick_cache", "rand 0.8.5", "ring 0.17.14", @@ -4351,7 +4361,7 @@ dependencies = [ "rustls-pemfile 2.2.0", "serde", "serde_json", - "zip", + "zip 5.1.1", ] [[package]] @@ -4377,13 +4387,13 @@ dependencies = [ [[package]] name = "mail-send" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac383831b06755f2ad93f65dd04e9927790c75b5cb9366034e0af11ae369bd7" +checksum = "114a4e27f3cfaf8918783e8fa4149b820c813b1bedc7755e20e12eff4518331e" dependencies = [ "base64 0.22.1", "gethostname", - "md5 0.7.0", + "md5 0.8.0", "rustls 0.23.31", "rustls-pki-types", "smtp-proto", @@ -5249,9 +5259,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" dependencies = [ "memchr", "thiserror 2.0.16", @@ -5260,9 +5270,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" dependencies = [ "pest", "pest_generator", @@ -5270,9 +5280,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" dependencies = [ "pest", "pest_meta", @@ -5283,9 +5293,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" dependencies = [ "pest", "sha2 0.10.9", @@ -5298,7 +5308,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.11.0", + "indexmap 2.11.1", ] [[package]] @@ -5318,17 +5328,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" dependencies = [ "phf_shared 0.12.1", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared 0.13.1", "serde", ] [[package]] name = "phf_codegen" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbdcb6f01d193b17f0b9c3360fa7e0e620991b193ff08702f78b3ce365d7e61" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" dependencies = [ - "phf_generator 0.12.1", - "phf_shared 0.12.1", + "phf_generator 0.13.1", + "phf_shared 0.13.1", ] [[package]] @@ -5343,12 +5362,12 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cbb1126afed61dd6368748dae63b1ee7dc480191c6262a3b4ff1e29d86a6c5b" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand 2.3.0", - "phf_shared 0.12.1", + "phf_shared 0.13.1", ] [[package]] @@ -5382,6 +5401,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.10" @@ -5740,9 +5768,9 @@ dependencies = [ [[package]] name = "psl" -version = "2.1.140" +version = "2.1.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a33878b44e45231ecbc8c619cc8059e4adab882b25812192676fe08dcf352f" +checksum = "98c10a4dce9ad24c1fad826cffc79a624cf626bfaddb466e969368a53d877b30" dependencies = [ "psl-types", ] @@ -5814,15 +5842,6 @@ dependencies = [ "serde", ] -[[package]] -name = "quick-xml" -version = "0.37.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" -dependencies = [ - "memchr", -] - [[package]] name = "quick-xml" version = "0.38.3" @@ -6393,9 +6412,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "rev_lines" @@ -6473,7 +6492,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "munge", "ptr_meta", "rancor", @@ -6697,15 +6716,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags 2.9.4", "errno", "libc", "linux-raw-sys", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -6744,7 +6763,7 @@ dependencies = [ "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.5", "subtle", "zeroize", ] @@ -6783,7 +6802,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework 3.4.0", ] [[package]] @@ -6828,8 +6847,8 @@ dependencies = [ "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-platform-verifier-android", - "rustls-webpki 0.103.4", - "security-framework 3.3.0", + "rustls-webpki 0.103.5", + "security-framework 3.4.0", "security-framework-sys", "webpki-root-certs", "windows-sys 0.59.0", @@ -6864,9 +6883,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" dependencies = [ "ring 0.17.14", "rustls-pki-types", @@ -6920,11 +6939,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] @@ -7064,9 +7083,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" dependencies = [ "bitflags 2.9.4", "core-foundation 0.10.1", @@ -7077,9 +7096,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -7166,10 +7185,11 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.221" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "341877e04a22458705eb4e131a1508483c877dca2792b3781d4e5d8a6019ec43" dependencies = [ + "serde_core", "serde_derive", ] @@ -7183,10 +7203,19 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "serde_core" +version = "1.0.221" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "0c459bc0a14c840cb403fc14b148620de1e0778c96ecd6e0c8c3cacb6d8d00fe" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.221" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0" dependencies = [ "proc-macro2", "quote", @@ -7206,15 +7235,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "56177480b00303e689183f110b4e727bb4211d692c62d4fcd16d02be93077d40" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "itoa", "memchr", "ryu", - "serde", + "serde_core", ] [[package]] @@ -7280,7 +7309,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.0", + "indexmap 2.11.1", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -7320,7 +7349,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "itoa", "ryu", "serde", @@ -7611,9 +7640,9 @@ dependencies = [ [[package]] name = "smtp-proto" -version = "0.1.7" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8003eb09806ff2ae4661dd0dca27cbd9f65ba85de06cc0302c364b0d661ba368" +checksum = "d55cc1c74d3b758d7dd1fa4dc4cf694cad2732cac14f304228477c2b0ce6233a" dependencies = [ "rkyv", "serde", @@ -8366,7 +8395,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "toml_datetime", "winnow", ] @@ -8663,9 +8692,9 @@ checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "typewit" -version = "1.14.1" +version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c98488b93df24b7c794d6a58c4198d7a2abde676324beaca84f7fb5b39c0811" +checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71" dependencies = [ "typewit_proc_macros", ] @@ -8710,9 +8739,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-normalization" @@ -8996,9 +9025,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.4+wasi-0.2.4" +version = "0.14.5+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" dependencies = [ "wit-bindgen", ] @@ -9192,11 +9230,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -9212,7 +9250,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", - "windows-core", + "windows-core 0.61.2", "windows-future", "windows-link 0.1.3", "windows-numerics", @@ -9224,7 +9262,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core", + "windows-core 0.61.2", ] [[package]] @@ -9236,8 +9274,21 @@ dependencies = [ "windows-implement", "windows-interface", "windows-link 0.1.3", - "windows-result", - "windows-strings", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings 0.5.0", ] [[package]] @@ -9246,7 +9297,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core", + "windows-core 0.61.2", "windows-link 0.1.3", "windows-threading", ] @@ -9291,7 +9342,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core", + "windows-core 0.61.2", "windows-link 0.1.3", ] @@ -9304,6 +9355,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-result" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-strings" version = "0.4.2" @@ -9313,6 +9373,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-strings" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -10327,7 +10396,7 @@ dependencies = [ "flate2", "getrandom 0.3.3", "hmac 0.12.1", - "indexmap 2.11.0", + "indexmap 2.11.1", "liblzma", "memchr", "pbkdf2", @@ -10339,6 +10408,33 @@ dependencies = [ "zstd", ] +[[package]] +name = "zip" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.3.3", + "hmac 0.12.1", + "indexmap 2.11.1", + "lzma-rust2", + "memchr", + "pbkdf2", + "ppmd-rust", + "sha1", + "time", + "zeroize", + "zopfli", + "zstd", +] + [[package]] name = "zlib-rs" version = "0.5.2" diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 846ee02b..c67ebb60 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -18,7 +18,7 @@ mail-parser = { version = "0.11", features = ["full_encoding"] } mail-builder = { version = "0.4" } mail-auth = { version = "0.7.1" } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } -smtp-proto = { version = "0.1", features = ["rkyv"] } +smtp-proto = { version = "0.2", features = ["rkyv"] } dns-update = { version = "0.1.5" } calcard = { version = "0.1.3", features = ["rkyv"] } ahash = { version = "0.8.2", features = ["serde"] } diff --git a/crates/directory/Cargo.toml b/crates/directory/Cargo.toml index 25a811b6..591473a9 100644 --- a/crates/directory/Cargo.toml +++ b/crates/directory/Cargo.toml @@ -11,7 +11,7 @@ store = { path = "../store" } trc = { path = "../trc" } nlp = { path = "../nlp" } jmap_proto = { path = "../jmap-proto" } -smtp-proto = { version = "0.1" } +smtp-proto = { version = "0.2" } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } mail-builder = { version = "0.4" } diff --git a/crates/directory/src/backend/smtp/config.rs b/crates/directory/src/backend/smtp/config.rs index 397324fd..ac22c709 100644 --- a/crates/directory/src/backend/smtp/config.rs +++ b/crates/directory/src/backend/smtp/config.rs @@ -44,6 +44,7 @@ impl SmtpDirectory { .unwrap_or("[127.0.0.1]") .to_string(), say_ehlo: false, + local_ip: None, }, max_rcpt: config .property_or_default((&prefix, "limits.rcpt"), "10") diff --git a/crates/email/Cargo.toml b/crates/email/Cargo.toml index b4a33a9e..0db741ce 100644 --- a/crates/email/Cargo.toml +++ b/crates/email/Cargo.toml @@ -14,7 +14,7 @@ common = { path = "../common" } directory = { path = "../directory" } groupware = { path = "../groupware" } spam-filter = { path = "../spam-filter" } -smtp-proto = { version = "0.1", features = ["rkyv"] } +smtp-proto = { version = "0.2", features = ["rkyv"] } mail-parser = { version = "0.11", features = ["full_encoding"] } mail-builder = { version = "0.4" } sieve-rs = { version = "0.7", features = ["rkyv"] } diff --git a/crates/http/Cargo.toml b/crates/http/Cargo.toml index c8911142..91b37d09 100644 --- a/crates/http/Cargo.toml +++ b/crates/http/Cargo.toml @@ -19,7 +19,7 @@ http_proto = { path = "../http-proto" } jmap_proto = { path = "../jmap-proto" } directory = { path = "../directory" } services = { path = "../services" } -smtp-proto = { version = "0.1" } +smtp-proto = { version = "0.2" } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } mail-builder = { version = "0.4" } mail-auth = { version = "0.7.1", features = ["generate"] } diff --git a/crates/jmap/Cargo.toml b/crates/jmap/Cargo.toml index 4c2190ce..8c262930 100644 --- a/crates/jmap/Cargo.toml +++ b/crates/jmap/Cargo.toml @@ -17,7 +17,7 @@ directory = { path = "../directory" } trc = { path = "../trc" } spam-filter = { path = "../spam-filter" } email = { path = "../email" } -smtp-proto = { version = "0.1" } +smtp-proto = { version = "0.2" } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } mail-builder = { version = "0.4" } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } diff --git a/crates/jmap/src/submission/set.rs b/crates/jmap/src/submission/set.rs index 60ac91b2..6d1142d4 100644 --- a/crates/jmap/src/submission/set.rs +++ b/crates/jmap/src/submission/set.rs @@ -40,7 +40,7 @@ use smtp::{ queue::spool::SmtpSpool, }; use smtp_proto::{MailFrom, RcptTo, request::parser::Rfc5321Parser}; -use std::future::Future; +use std::{borrow::Cow, future::Future}; use std::{collections::HashMap, sync::Arc, time::Duration}; use store::write::{BatchBuilder, now}; use trc::AddContext; @@ -320,8 +320,8 @@ impl EmailSubmissionSet for Server { thread_id: u32::MAX, ..Default::default() }; - let mut mail_from: Option> = None; - let mut rcpt_to: Vec> = Vec::new(); + let mut mail_from: Option>> = None; + let mut rcpt_to: Vec>> = Vec::new(); for (property, value) in object.0 { let value = match response.eval_object_references(value) { @@ -350,14 +350,14 @@ impl EmailSubmissionSet for Server { .map_or(&b"\n"[..], |p| p.as_bytes()) .iter(), ) - .mail_from_parameters(addr) + .mail_from_parameters(addr.into()) { Ok(addr) => { submission.envelope.mail_from = Address { - email: addr.address.clone(), + email: addr.address.as_ref().to_string(), parameters: params, }; - mail_from = addr.into(); + mail_from = from_into_static(addr).into(); } Err(err) => { return Ok(Err(SetError::invalid_properties() @@ -382,7 +382,7 @@ impl EmailSubmissionSet for Server { .map_or(&b"\n"[..], |p| p.as_bytes()) .iter(), ) - .rcpt_to_parameters(addr) + .rcpt_to_parameters(addr.into()) { Ok(addr) => { if !rcpt_to @@ -390,10 +390,13 @@ impl EmailSubmissionSet for Server { .any(|rcpt| rcpt.address == addr.address) { submission.envelope.rcpt_to.push(Address { - email: addr.address.clone(), + email: addr + .address + .as_ref() + .to_string(), parameters: params, }); - rcpt_to.push(addr); + rcpt_to.push(rcpt_into_static(addr)); } } Err(err) => { @@ -473,7 +476,7 @@ impl EmailSubmissionSet for Server { parameters: None, }; MailFrom { - address: identity_mail_from, + address: Cow::Owned(identity_mail_from), ..Default::default() } }; @@ -519,7 +522,7 @@ impl EmailSubmissionSet for Server { parameters: None, }); rcpt_to.push(RcptTo { - address, + address: Cow::Owned(address), ..Default::default() }); } @@ -734,3 +737,35 @@ fn parse_envelope_address( .with_description("Invalid envelope object.")) } } + +fn from_into_static(from: MailFrom>) -> MailFrom> { + MailFrom { + address: from.address.into_owned().into(), + flags: from.flags, + size: from.size, + trans_id: from.trans_id.map(Cow::into_owned).map(Cow::Owned), + by: from.by, + env_id: from.env_id.map(Cow::into_owned).map(Cow::Owned), + solicit: from.solicit.map(Cow::into_owned).map(Cow::Owned), + mtrk: from + .mtrk + .map(smtp_proto::Mtrk::into_owned) + .map(|v| smtp_proto::Mtrk { + certifier: Cow::Owned(v.certifier), + timeout: v.timeout, + }), + auth: from.auth.map(Cow::into_owned).map(Cow::Owned), + hold_for: from.hold_for, + hold_until: from.hold_until, + mt_priority: from.mt_priority, + } +} + +fn rcpt_into_static(rcpt: RcptTo>) -> RcptTo> { + RcptTo { + address: rcpt.address.into_owned().into(), + orcpt: rcpt.orcpt.map(Cow::into_owned).map(Cow::Owned), + rrvs: rcpt.rrvs, + flags: rcpt.flags, + } +} diff --git a/crates/services/Cargo.toml b/crates/services/Cargo.toml index 6ed16556..5121590b 100644 --- a/crates/services/Cargo.toml +++ b/crates/services/Cargo.toml @@ -14,7 +14,7 @@ smtp = { path = "../smtp" } groupware = { path = "../groupware" } jmap_proto = { path = "../jmap-proto" } directory = { path = "../directory" } -smtp-proto = { version = "0.1.6", features = ["rkyv", "serde"] } +smtp-proto = { version = "0.2", features = ["rkyv", "serde"] } tokio = { version = "1.47", features = ["rt"] } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } mail-builder = { version = "0.4" } diff --git a/crates/services/src/task_manager/alarm.rs b/crates/services/src/task_manager/alarm.rs index d9327dd8..34d48396 100644 --- a/crates/services/src/task_manager/alarm.rs +++ b/crates/services/src/task_manager/alarm.rs @@ -202,7 +202,7 @@ async fn send_alarm( // MAIL FROM let _ = session .handle_mail_from(MailFrom { - address: mail_from, + address: mail_from.into(), ..Default::default() }) .await; @@ -214,7 +214,7 @@ async fn send_alarm( session.params.rcpt_errors_wait = Duration::from_secs(0); let _ = session .handle_rcpt_to(RcptTo { - address: to, + address: to.into(), ..Default::default() }) .await; diff --git a/crates/services/src/task_manager/imip.rs b/crates/services/src/task_manager/imip.rs index 98a6642d..f543cc69 100644 --- a/crates/services/src/task_manager/imip.rs +++ b/crates/services/src/task_manager/imip.rs @@ -223,7 +223,7 @@ async fn send_imip( // MAIL FROM let _ = session .handle_mail_from(MailFrom { - address: from.clone(), + address: from.as_str().into(), ..Default::default() }) .await; @@ -243,7 +243,7 @@ async fn send_imip( session.params.rcpt_errors_wait = Duration::from_secs(0); let _ = session .handle_rcpt_to(RcptTo { - address: to.clone(), + address: to.as_str().into(), ..Default::default() }) .await; diff --git a/crates/smtp/Cargo.toml b/crates/smtp/Cargo.toml index a8f5b216..ce705cb7 100644 --- a/crates/smtp/Cargo.toml +++ b/crates/smtp/Cargo.toml @@ -24,7 +24,7 @@ mail-auth = { version = "0.7.1", features = ["rkyv"] } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } mail-parser = { version = "0.11", features = ["full_encoding"] } mail-builder = { version = "0.4" } -smtp-proto = { version = "0.1.6", features = ["rkyv", "serde"] } +smtp-proto = { version = "0.2", features = ["rkyv", "serde"] } sieve-rs = { version = "0.7", features = ["rkyv"] } ahash = { version = "0.8" } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } diff --git a/crates/smtp/src/inbound/ehlo.rs b/crates/smtp/src/inbound/ehlo.rs index c5b9135b..89ffe213 100644 --- a/crates/smtp/src/inbound/ehlo.rs +++ b/crates/smtp/src/inbound/ehlo.rs @@ -4,32 +4,33 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ -use std::time::{Duration, Instant, SystemTime}; - use crate::{core::Session, scripts::ScriptResult}; use common::{ config::smtp::session::{Mechanism, Stage}, listener::SessionStream, }; - use mail_auth::{ SpfResult, spf::verify::{HasValidLabels, SpfParameters}, }; use smtp_proto::*; +use std::{ + borrow::Cow, + time::{Duration, Instant, SystemTime}, +}; use trc::SmtpEvent; impl Session { - pub async fn handle_ehlo(&mut self, domain: String, is_extended: bool) -> Result<(), ()> { + pub async fn handle_ehlo(&mut self, domain: Cow<'_, str>, is_extended: bool) -> Result<(), ()> { // Set EHLO domain if domain != self.data.helo_domain { // Reject non-FQDN EHLO domains - simply checks that the hostname has at least one dot - if self.params.ehlo_reject_non_fqdn && !domain.as_str().has_valid_labels() { + if self.params.ehlo_reject_non_fqdn && !domain.as_ref().has_valid_labels() { trc::event!( Smtp(SmtpEvent::InvalidEhlo), SpanId = self.data.session_id, - Domain = domain, + Domain = domain.as_ref().to_string(), ); return self.write(b"550 5.5.0 Invalid EHLO domain.\r\n").await; @@ -38,11 +39,12 @@ impl Session { trc::event!( Smtp(SmtpEvent::Ehlo), SpanId = self.data.session_id, - Domain = domain.clone(), + Domain = domain.as_ref().to_string(), ); // SPF check - let prev_helo_domain = std::mem::replace(&mut self.data.helo_domain, domain); + let prev_helo_domain = + std::mem::replace(&mut self.data.helo_domain, domain.into_owned()); if self.params.spf_ehlo.verify() { let time = Instant::now(); let spf_output = self diff --git a/crates/smtp/src/inbound/mail.rs b/crates/smtp/src/inbound/mail.rs index f94f17f4..29aa6637 100644 --- a/crates/smtp/src/inbound/mail.rs +++ b/crates/smtp/src/inbound/mail.rs @@ -4,23 +4,23 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ -use std::time::{Duration, Instant, SystemTime}; - -use common::{config::smtp::session::Stage, listener::SessionStream, scripts::ScriptModification}; - -use mail_auth::{IprevOutput, IprevResult, SpfOutput, SpfResult, spf::verify::SpfParameters}; -use smtp_proto::{MAIL_BY_NOTIFY, MAIL_BY_RETURN, MAIL_REQUIRETLS, MailFrom, MtPriority}; -use trc::SmtpEvent; -use utils::config::Rate; - use crate::{ core::{Session, SessionAddress}, queue::DomainPart, scripts::ScriptResult, }; +use common::{config::smtp::session::Stage, listener::SessionStream, scripts::ScriptModification}; +use mail_auth::{IprevOutput, IprevResult, SpfOutput, SpfResult, spf::verify::SpfParameters}; +use smtp_proto::{MAIL_BY_NOTIFY, MAIL_BY_RETURN, MAIL_REQUIRETLS, MailFrom, MtPriority}; +use std::{ + borrow::Cow, + time::{Duration, Instant, SystemTime}, +}; +use trc::SmtpEvent; +use utils::config::Rate; impl Session { - pub async fn handle_mail_from(&mut self, from: MailFrom) -> Result<(), ()> { + pub async fn handle_mail_from(&mut self, from: MailFrom>) -> Result<(), ()> { if self.data.helo_domain.is_empty() && (self.params.ehlo_require || self.params.spf_ehlo.verify() @@ -111,7 +111,7 @@ impl Session { let (address, address_lcase, domain) = if !from.address.is_empty() { let address_lcase = from.address.to_lowercase(); let domain = address_lcase.domain_part().into(); - (from.address, address_lcase, domain) + (from.address.into_owned(), address_lcase, domain) } else { (String::new(), String::new(), String::new()) }; @@ -122,7 +122,7 @@ impl Session { address_lcase, domain, flags: from.flags, - dsn_info: from.env_id, + dsn_info: from.env_id.map(|e| e.into_owned()), } .into(); diff --git a/crates/smtp/src/inbound/milter/message.rs b/crates/smtp/src/inbound/milter/message.rs index cd4e18a5..6d221e67 100644 --- a/crates/smtp/src/inbound/milter/message.rs +++ b/crates/smtp/src/inbound/milter/message.rs @@ -316,11 +316,11 @@ impl SessionData { if !args.is_empty() { args.push('\n'); match Rfc5321Parser::new(&mut args.as_bytes().iter()) - .mail_from_parameters(String::new()) + .mail_from_parameters(Cow::Borrowed("")) { Ok(addr) => { mail_from.flags = addr.flags; - mail_from.dsn_info = addr.env_id; + mail_from.dsn_info = addr.env_id.map(|e| e.into_owned()); } Err(err) => { trc::event!( @@ -352,11 +352,11 @@ impl SessionData { if !args.is_empty() { args.push('\n'); match Rfc5321Parser::new(&mut args.as_bytes().iter()) - .rcpt_to_parameters(String::new()) + .rcpt_to_parameters(Cow::Borrowed("")) { Ok(addr) => { rcpt.flags = addr.flags; - rcpt.dsn_info = addr.orcpt; + rcpt.dsn_info = addr.orcpt.map(|e| e.into_owned()); } Err(err) => { trc::event!( diff --git a/crates/smtp/src/inbound/rcpt.rs b/crates/smtp/src/inbound/rcpt.rs index 7a7c92cd..b1300c1c 100644 --- a/crates/smtp/src/inbound/rcpt.rs +++ b/crates/smtp/src/inbound/rcpt.rs @@ -4,6 +4,8 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ +use std::borrow::Cow; + use common::{ KV_GREYLIST, config::smtp::session::Stage, listener::SessionStream, scripts::ScriptModification, }; @@ -22,7 +24,7 @@ use crate::{ }; impl Session { - pub async fn handle_rcpt_to(&mut self, to: RcptTo) -> Result<(), ()> { + pub async fn handle_rcpt_to(&mut self, to: RcptTo>) -> Result<(), ()> { #[cfg(feature = "test_mode")] if self.instance.id.ends_with("-debug") { if to.address.contains("fail@") { @@ -72,9 +74,9 @@ impl Session { let rcpt = SessionAddress { domain: address_lcase.domain_part().into(), address_lcase, - address: to.address, + address: to.address.into_owned(), flags: to.flags, - dsn_info: to.orcpt, + dsn_info: to.orcpt.map(|e| e.into_owned()), }; if self.data.rcpt_to.contains(&rcpt) { diff --git a/crates/smtp/src/inbound/session.rs b/crates/smtp/src/inbound/session.rs index 19996485..aba24aa7 100644 --- a/crates/smtp/src/inbound/session.rs +++ b/crates/smtp/src/inbound/session.rs @@ -33,7 +33,7 @@ impl Session { 'outer: loop { match &mut state { State::Request(receiver) => loop { - match receiver.ingest(&mut iter, bytes) { + match receiver.ingest(&mut iter) { Ok(request) => match request { Request::Rcpt { to } => { self.handle_rcpt_to(to).await?; @@ -301,7 +301,7 @@ impl Session { if !self.params.ehlo_reject_non_fqdn && syntax.starts_with("EHLO ") { - self.handle_ehlo("null".to_string(), true).await? + self.handle_ehlo("null".into(), true).await? } else { self.write( format!("501 5.5.2 Syntax error, expected: {syntax}\r\n") diff --git a/crates/smtp/src/inbound/vrfy.rs b/crates/smtp/src/inbound/vrfy.rs index 5166ea70..d430196f 100644 --- a/crates/smtp/src/inbound/vrfy.rs +++ b/crates/smtp/src/inbound/vrfy.rs @@ -4,15 +4,13 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ +use crate::core::Session; use common::listener::SessionStream; - +use std::{borrow::Cow, fmt::Write}; use trc::SmtpEvent; -use crate::core::Session; -use std::fmt::Write; - impl Session { - pub async fn handle_vrfy(&mut self, address: String) -> Result<(), ()> { + pub async fn handle_vrfy(&mut self, address: Cow<'_, str>) -> Result<(), ()> { match self .server .eval_if::( @@ -43,7 +41,7 @@ impl Session { trc::event!( Smtp(SmtpEvent::Vrfy), SpanId = self.data.session_id, - To = address, + To = address.as_ref().to_string(), Result = values, ); @@ -53,7 +51,7 @@ impl Session { trc::event!( Smtp(SmtpEvent::VrfyNotFound), SpanId = self.data.session_id, - To = address, + To = address.as_ref().to_string(), ); self.write(b"550 5.1.2 Address not found.\r\n").await @@ -77,7 +75,7 @@ impl Session { trc::event!( Smtp(SmtpEvent::VrfyDisabled), SpanId = self.data.session_id, - To = address, + To = address.as_ref().to_string(), ); self.write(b"252 2.5.1 VRFY is disabled.\r\n").await @@ -85,7 +83,7 @@ impl Session { } } - pub async fn handle_expn(&mut self, address: String) -> Result<(), ()> { + pub async fn handle_expn(&mut self, address: Cow<'_, str>) -> Result<(), ()> { match self .server .eval_if::( @@ -116,7 +114,7 @@ impl Session { trc::event!( Smtp(SmtpEvent::Expn), SpanId = self.data.session_id, - To = address, + To = address.as_ref().to_string(), Result = values, ); @@ -126,7 +124,7 @@ impl Session { trc::event!( Smtp(SmtpEvent::ExpnNotFound), SpanId = self.data.session_id, - To = address, + To = address.as_ref().to_string(), ); self.write(b"550 5.1.2 Mailing list not found.\r\n").await @@ -150,7 +148,7 @@ impl Session { trc::event!( Smtp(SmtpEvent::ExpnDisabled), SpanId = self.data.session_id, - To = address, + To = address.as_ref().to_string(), ); self.write(b"252 2.5.1 EXPN is disabled.\r\n").await diff --git a/crates/spam-filter/Cargo.toml b/crates/spam-filter/Cargo.toml index d7f17690..eae5d0f7 100644 --- a/crates/spam-filter/Cargo.toml +++ b/crates/spam-filter/Cargo.toml @@ -10,7 +10,7 @@ nlp = { path = "../nlp" } store = { path = "../store" } trc = { path = "../trc" } common = { path = "../common" } -smtp-proto = { version = "0.1", features = ["rkyv"] } +smtp-proto = { version = "0.2", features = ["rkyv"] } mail-parser = { version = "0.11", features = ["full_encoding"] } mail-builder = { version = "0.4" } mail-auth = { version = "0.7.1" } diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index dc816ce5..01cffb08 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -13,7 +13,7 @@ tokio = { version = "1.47", features = ["net", "macros", "signal"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } serde = { version = "1.0", features = ["derive"]} mail-auth = { version = "0.7.1" } -smtp-proto = { version = "0.1" } +smtp-proto = { version = "0.2" } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } ahash = { version = "0.8", features = ["serde"] } chrono = "0.4" diff --git a/tests/Cargo.toml b/tests/Cargo.toml index ab58289d..e8364048 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -42,7 +42,7 @@ spam-filter = { path = "../crates/spam-filter", features = ["test_mode", "enterp migration = { path = "../crates/migration", features = ["test_mode", "enterprise"] } trc = { path = "../crates/trc", features = ["enterprise"] } managesieve = { path = "../crates/managesieve", features = ["test_mode", "enterprise"] } -smtp-proto = { version = "0.1" } +smtp-proto = { version = "0.2" } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } mail-auth = { version = "0.7.1", features = ["test"] } sieve-rs = { version = "0.7", features = ["rkyv"] } diff --git a/tests/src/jmap/mod.rs b/tests/src/jmap/mod.rs index b7fb7b06..96a31d45 100644 --- a/tests/src/jmap/mod.rs +++ b/tests/src/jmap/mod.rs @@ -4,8 +4,9 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ -use std::{fmt::Debug, path::PathBuf, sync::Arc, time::Duration}; - +use crate::{ + AssertConfig, add_test_certs, directory::internal::TestInternalDirectory, store::TempDir, +}; use base64::{ Engine, engine::general_purpose::{self, STANDARD}, @@ -36,7 +37,7 @@ use reqwest::header; use serde::{Deserialize, Serialize, de::DeserializeOwned}; use services::SpawnServices; use smtp::{SpawnQueueManager, core::SmtpSessionManager}; - +use std::{fmt::Debug, path::PathBuf, sync::Arc, time::Duration}; use store::{ IterateParams, SUBSPACE_PROPERTY, Stores, ValueKey, roaring::RoaringBitmap, @@ -46,10 +47,6 @@ use tokio::sync::watch; use utils::{BlobHash, config::Config}; use webhooks::{MockWebhookEndpoint, spawn_mock_webhook_endpoint}; -use crate::{ - AssertConfig, add_test_certs, directory::internal::TestInternalDirectory, store::TempDir, -}; - pub mod auth_acl; pub mod auth_limits; pub mod auth_oauth; @@ -102,7 +99,7 @@ async fn jmap_tests() { thread_merge::test(&mut params).await; mailbox::test(&mut params).await; delivery::test(&mut params).await; - auth_acl::test(&mut params).await; + auth_acl::test(&mut params).await;*/ auth_limits::test(&mut params).await; auth_oauth::test(&mut params).await; event_source::test(&mut params).await; @@ -113,7 +110,7 @@ async fn jmap_tests() { websocket::test(&mut params).await; quota::test(&mut params).await; crypto::test(&mut params).await; - blob::test(&mut params).await;*/ + blob::test(&mut params).await; permissions::test(¶ms).await; purge::test(&mut params).await; enterprise::test(&mut params).await;