From 99145fca7ca587fd7666d0321ef9a00734f5e41c Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Wed, 4 Sep 2024 22:58:32 +0200 Subject: [PATCH] remove native-tls dependency --- Cargo.lock | 174 +++++++++------------------------------------------- Cargo.toml | 7 ++- src/main.rs | 14 +++-- 3 files changed, 41 insertions(+), 154 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc7d4e4..0ab45bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -490,22 +490,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" - [[package]] name = "flate2" version = "1.0.33" @@ -516,21 +500,6 @@ dependencies = [ "miniz_oxide 0.8.0", ] -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -766,7 +735,6 @@ dependencies = [ "chrono", "imap-proto", "lazy_static", - "native-tls", "nom", "regex", ] @@ -878,12 +846,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "lock_api" version = "0.4.12" @@ -992,7 +954,8 @@ dependencies = [ "imap", "mail-parser", "mail-send", - "native-tls", + "rustls 0.23.12", + "rustls-connector", "serde", "tokio", "toml", @@ -1046,23 +1009,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nom" version = "5.1.3" @@ -1104,50 +1050,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "openssl" -version = "0.10.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-sys" -version = "0.9.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "parking_lot" version = "0.12.3" @@ -1367,19 +1275,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustix" -version = "0.38.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "rustls" version = "0.21.12" @@ -1406,6 +1301,32 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-connector" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc9c089855dc1b0f982d0d56ec62e19cf935fe6720aa6705dc61190e99b36f32" +dependencies = [ + "log", + "rustls 0.23.12", + "rustls-native-certs", + "rustls-pki-types", + "rustls-webpki 0.102.7", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -1564,15 +1485,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - [[package]] name = "simd-adler32" version = "0.3.7" @@ -1651,19 +1563,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "tempfile" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" -dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "thiserror" version = "1.0.63" @@ -1728,9 +1627,7 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot", "pin-project-lite", - "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.52.0", @@ -1889,12 +1786,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -2036,15 +1927,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-targets" version = "0.48.5" diff --git a/Cargo.toml b/Cargo.toml index eb4aadb..358ccb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,9 @@ license = "0BSD" serde = "1.0.209" toml = "0.8.19" clap = { version = "4.5.16", features = ["derive"] } -imap = "2.4.1" +imap = { version = "2.4.1", default-features = false } mail-parser = "0.9.4" mail-send = "0.4.9" -native-tls = "0.2.12" -tokio = { version = "1", features = ["full"] } +rustls = { version = "0.23", default-features = false, features = ["std", "ring"] } +rustls-connector = { version = "0.21.4", default-features = false, features = ["native-certs", "rustls--ring"] } +tokio = { version = "1.40.0", features = ["net", "io-util", "time", "macros"] } diff --git a/src/main.rs b/src/main.rs index 6ed757e..9b5b0fb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,12 @@ use clap::Parser; use imap::types::Fetch; use imap::types::ZeroCopy; +use imap::Session; use mail_parser::*; use mail_send::SmtpClientBuilder; +use rustls::ClientConnection; +use rustls::StreamOwned; +use rustls_connector::RustlsConnector; use serde::Deserialize; use serde::Serialize; use std::collections::HashMap; @@ -39,14 +43,14 @@ fn open_session( config: &Config, ) -> Result< ( - imap::Session>, - native_tls::TlsConnector, + Session>, + RustlsConnector, ), Box, > { // Setup Rustls TcpStream let stream = TcpStream::connect((config.imap_domain.as_ref(), 993))?; - let tls = native_tls::TlsConnector::builder().build().unwrap(); + let tls = RustlsConnector::default(); let tlsstream = tls.connect(&config.imap_domain, stream)?; // we pass in the domain twice to check that the server's TLS @@ -63,7 +67,7 @@ fn open_session( } fn fetch_unread_mail( - session: &mut imap::Session>, + session: &mut Session>, ) -> Result>, Box> { let unseen = session.uid_search("NOT SEEN")?; let unseen_str = unseen @@ -95,7 +99,7 @@ fn build_forward_message<'a>( } fn mark_as_seen( - session: &mut imap::Session>, + session: &mut Session>, fetch: &Fetch, ) -> Result>, Box> { Ok(session.uid_store(