From a81401c4cb339329b23ebf07c580ff484ab0543f Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Fri, 23 Aug 2024 09:24:05 +0200 Subject: [PATCH] Fix latest clippy warnings (#979) --- Cargo.toml | 2 - src/executor.rs | 4 +- src/lib.rs | 16 +------- src/message/header/mod.rs | 5 +-- src/transport/smtp/async_transport.rs | 3 -- src/transport/smtp/client/async_net.rs | 51 ++------------------------ src/transport/smtp/client/mod.rs | 2 +- src/transport/smtp/client/tls.rs | 4 +- 8 files changed, 11 insertions(+), 76 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a05abed..2ba84a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,6 @@ async-trait = { version = "0.1", optional = true } ## async-std async-std = { version = "1.8", optional = true } -#async-native-tls = { version = "0.3.3", optional = true } futures-rustls = { version = "0.26", default-features = false, features = ["logging", "tls12", "ring"], optional = true } ## tokio @@ -115,7 +114,6 @@ boring-tls = ["dep:boring"] # async async-std1 = ["dep:async-std", "dep:async-trait", "dep:futures-io", "dep:futures-util"] -#async-std1-native-tls = ["async-std1", "native-tls", "dep:async-native-tls"] async-std1-rustls-tls = ["async-std1", "rustls-tls", "dep:futures-rustls"] tokio1 = ["dep:tokio1_crate", "dep:async-trait", "dep:futures-io", "dep:futures-util"] tokio1-native-tls = ["tokio1", "native-tls", "dep:tokio1_native_tls_crate"] diff --git a/src/executor.rs b/src/executor.rs index fa99617..d698cb2 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -230,7 +230,7 @@ impl Executor for AsyncStd1Executor { ) -> Result { #[allow(clippy::match_single_binding)] let tls_parameters = match tls { - #[cfg(any(feature = "async-std1-native-tls", feature = "async-std1-rustls-tls"))] + #[cfg(feature = "async-std1-rustls-tls")] Tls::Wrapper(tls_parameters) => Some(tls_parameters.clone()), _ => None, }; @@ -243,7 +243,7 @@ impl Executor for AsyncStd1Executor { ) .await?; - #[cfg(any(feature = "async-std1-native-tls", feature = "async-std1-rustls-tls"))] + #[cfg(feature = "async-std1-rustls-tls")] match tls { Tls::Opportunistic(tls_parameters) => { if conn.can_starttls() { diff --git a/src/lib.rs b/src/lib.rs index ecff1b2..b529f3a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -174,21 +174,7 @@ mod compiletime_checks { If you'd like to use `boring-tls` make sure that the `rustls-tls` feature hasn't been enabled by mistake. Make sure to apply the same to any of your crate dependencies that use the `lettre` crate."); - /* - #[cfg(all( - feature = "async-std1", - feature = "native-tls", - not(feature = "async-std1-native-tls") - ))] - compile_error!("Lettre is being built with the `async-std1` and the `native-tls` features, but the `async-std1-native-tls` feature hasn't been turned on. - If you'd like to use rustls make sure that the `native-tls` hasn't been enabled by mistake (you may need to import lettre without default features) - If you're building a library which depends on lettre import it without default features and enable just the features you need."); - */ - #[cfg(all( - feature = "async-std1", - feature = "native-tls", - not(feature = "async-std1-native-tls") - ))] + #[cfg(all(feature = "async-std1", feature = "native-tls",))] compile_error!("Lettre is being built with the `async-std1` and the `native-tls` features, but the async-std integration doesn't support native-tls yet. If you'd like to work on the issue please take a look at https://github.com/lettre/lettre/issues/576. If you were trying to opt into `rustls-tls` and did not activate `native-tls`, disable the default-features of lettre in `Cargo.toml` and manually add the required features. diff --git a/src/message/header/mod.rs b/src/message/header/mod.rs index 76f367e..bcb128c 100644 --- a/src/message/header/mod.rs +++ b/src/message/header/mod.rs @@ -189,10 +189,7 @@ pub struct HeaderName(Cow<'static, str>); impl HeaderName { /// Creates a new header name pub fn new_from_ascii(ascii: String) -> Result { - if !ascii.is_empty() - && ascii.len() <= 76 - && ascii.is_ascii() - && !ascii.contains(|c| c == ':' || c == ' ') + if !ascii.is_empty() && ascii.len() <= 76 && ascii.is_ascii() && !ascii.contains([':', ' ']) { Ok(Self(Cow::Owned(ascii))) } else { diff --git a/src/transport/smtp/async_transport.rs b/src/transport/smtp/async_transport.rs index c1b43f6..24cc39d 100644 --- a/src/transport/smtp/async_transport.rs +++ b/src/transport/smtp/async_transport.rs @@ -82,7 +82,6 @@ where #[cfg(any( feature = "tokio1-native-tls", feature = "tokio1-rustls-tls", - feature = "async-std1-native-tls", feature = "async-std1-rustls-tls" ))] #[cfg_attr( @@ -117,7 +116,6 @@ where #[cfg(any( feature = "tokio1-native-tls", feature = "tokio1-rustls-tls", - feature = "async-std1-native-tls", feature = "async-std1-rustls-tls" ))] #[cfg_attr( @@ -353,7 +351,6 @@ impl AsyncSmtpTransportBuilder { #[cfg(any( feature = "tokio1-native-tls", feature = "tokio1-rustls-tls", - feature = "async-std1-native-tls", feature = "async-std1-rustls-tls" ))] #[cfg_attr( diff --git a/src/transport/smtp/client/async_net.rs b/src/transport/smtp/client/async_net.rs index 1c41243..f4eadb6 100644 --- a/src/transport/smtp/client/async_net.rs +++ b/src/transport/smtp/client/async_net.rs @@ -6,8 +6,6 @@ use std::{ time::Duration, }; -#[cfg(feature = "async-std1-native-tls")] -use async_native_tls::TlsStream as AsyncStd1TlsStream; #[cfg(feature = "async-std1")] use async_std::net::{TcpStream as AsyncStd1TcpStream, ToSocketAddrs as AsyncStd1ToSocketAddrs}; use futures_io::{ @@ -36,7 +34,6 @@ use tokio1_rustls::client::TlsStream as Tokio1RustlsTlsStream; feature = "tokio1-native-tls", feature = "tokio1-rustls-tls", feature = "tokio1-boring-tls", - feature = "async-std1-native-tls", feature = "async-std1-rustls-tls" ))] use super::InnerTlsParameters; @@ -86,9 +83,6 @@ enum InnerAsyncNetworkStream { #[cfg(feature = "async-std1")] AsyncStd1Tcp(AsyncStd1TcpStream), /// Encrypted Tokio 1.x TCP stream - #[cfg(feature = "async-std1-native-tls")] - AsyncStd1NativeTls(AsyncStd1TlsStream), - /// Encrypted Tokio 1.x TCP stream #[cfg(feature = "async-std1-rustls-tls")] AsyncStd1RustlsTls(AsyncStd1RustlsTlsStream), /// Can't be built @@ -119,8 +113,6 @@ impl AsyncNetworkStream { InnerAsyncNetworkStream::Tokio1BoringTls(s) => s.get_ref().peer_addr(), #[cfg(feature = "async-std1")] InnerAsyncNetworkStream::AsyncStd1Tcp(s) => s.peer_addr(), - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(s) => s.get_ref().peer_addr(), #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(s) => s.get_ref().0.peer_addr(), InnerAsyncNetworkStream::None => { @@ -288,16 +280,13 @@ impl AsyncNetworkStream { .map_err(error::connection)?; Ok(()) } - #[cfg(all( - feature = "async-std1", - not(any(feature = "async-std1-native-tls", feature = "async-std1-rustls-tls")) - ))] + #[cfg(all(feature = "async-std1", not(feature = "async-std1-rustls-tls")))] InnerAsyncNetworkStream::AsyncStd1Tcp(_) => { let _ = tls_parameters; - panic!("Trying to upgrade an AsyncNetworkStream without having enabled either the async-std1-native-tls or the async-std1-rustls-tls feature"); + panic!("Trying to upgrade an AsyncNetworkStream without having enabled the async-std1-rustls-tls feature"); } - #[cfg(any(feature = "async-std1-native-tls", feature = "async-std1-rustls-tls"))] + #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1Tcp(_) => { // get owned TcpStream let tcp_stream = mem::replace(&mut self.inner, InnerAsyncNetworkStream::None); @@ -385,11 +374,7 @@ impl AsyncNetworkStream { } #[allow(unused_variables)] - #[cfg(any( - feature = "async-std1-native-tls", - feature = "async-std1-rustls-tls", - feature = "async-std1-boring-tls" - ))] + #[cfg(feature = "async-std1-rustls-tls")] async fn upgrade_asyncstd1_tls( tcp_stream: AsyncStd1TcpStream, mut tls_parameters: TlsParameters, @@ -400,22 +385,6 @@ impl AsyncNetworkStream { #[cfg(feature = "native-tls")] InnerTlsParameters::NativeTls(connector) => { panic!("native-tls isn't supported with async-std yet. See https://github.com/lettre/lettre/pull/531#issuecomment-757893531"); - - /* - #[cfg(not(feature = "async-std1-native-tls"))] - panic!("built without the async-std1-native-tls feature"); - - #[cfg(feature = "async-std1-native-tls")] - return { - use async_native_tls::TlsConnector; - - // TODO: fix - let connector: TlsConnector = todo!(); - // let connector = TlsConnector::from(connector); - let stream = connector.connect(&domain, tcp_stream).await?; - Ok(InnerAsyncNetworkStream::AsyncStd1NativeTls(stream)) - }; - */ } #[cfg(feature = "rustls-tls")] InnerTlsParameters::RustlsTls(config) => { @@ -456,8 +425,6 @@ impl AsyncNetworkStream { InnerAsyncNetworkStream::Tokio1BoringTls(_) => true, #[cfg(feature = "async-std1")] InnerAsyncNetworkStream::AsyncStd1Tcp(_) => false, - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(_) => true, #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(_) => true, InnerAsyncNetworkStream::None => false, @@ -498,8 +465,6 @@ impl AsyncNetworkStream { InnerAsyncNetworkStream::AsyncStd1Tcp(_) => { Err(error::client("Connection is not encrypted")) } - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(t) => panic!("Unsupported"), #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(stream) => Ok(stream .get_ref() @@ -559,8 +524,6 @@ impl FuturesAsyncRead for AsyncNetworkStream { } #[cfg(feature = "async-std1")] InnerAsyncNetworkStream::AsyncStd1Tcp(s) => Pin::new(s).poll_read(cx, buf), - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(s) => Pin::new(s).poll_read(cx, buf), #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(s) => Pin::new(s).poll_read(cx, buf), InnerAsyncNetworkStream::None => { @@ -588,8 +551,6 @@ impl FuturesAsyncWrite for AsyncNetworkStream { InnerAsyncNetworkStream::Tokio1BoringTls(s) => Pin::new(s).poll_write(cx, buf), #[cfg(feature = "async-std1")] InnerAsyncNetworkStream::AsyncStd1Tcp(s) => Pin::new(s).poll_write(cx, buf), - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(s) => Pin::new(s).poll_write(cx, buf), #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(s) => Pin::new(s).poll_write(cx, buf), InnerAsyncNetworkStream::None => { @@ -611,8 +572,6 @@ impl FuturesAsyncWrite for AsyncNetworkStream { InnerAsyncNetworkStream::Tokio1BoringTls(s) => Pin::new(s).poll_flush(cx), #[cfg(feature = "async-std1")] InnerAsyncNetworkStream::AsyncStd1Tcp(s) => Pin::new(s).poll_flush(cx), - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(s) => Pin::new(s).poll_flush(cx), #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(s) => Pin::new(s).poll_flush(cx), InnerAsyncNetworkStream::None => { @@ -634,8 +593,6 @@ impl FuturesAsyncWrite for AsyncNetworkStream { InnerAsyncNetworkStream::Tokio1BoringTls(s) => Pin::new(s).poll_shutdown(cx), #[cfg(feature = "async-std1")] InnerAsyncNetworkStream::AsyncStd1Tcp(s) => Pin::new(s).poll_close(cx), - #[cfg(feature = "async-std1-native-tls")] - InnerAsyncNetworkStream::AsyncStd1NativeTls(s) => Pin::new(s).poll_close(cx), #[cfg(feature = "async-std1-rustls-tls")] InnerAsyncNetworkStream::AsyncStd1RustlsTls(s) => Pin::new(s).poll_close(cx), InnerAsyncNetworkStream::None => { diff --git a/src/transport/smtp/client/mod.rs b/src/transport/smtp/client/mod.rs index 87c4725..bb225b4 100644 --- a/src/transport/smtp/client/mod.rs +++ b/src/transport/smtp/client/mod.rs @@ -139,7 +139,7 @@ mod test { } #[test] - #[cfg(feature = "log")] + #[cfg(feature = "tracing")] fn test_escape_crlf() { assert_eq!(escape_crlf("\r\n"), ""); assert_eq!(escape_crlf("EHLO my_name\r\n"), "EHLO my_name"); diff --git a/src/transport/smtp/client/tls.rs b/src/transport/smtp/client/tls.rs index 92dca93..59037b1 100644 --- a/src/transport/smtp/client/tls.rs +++ b/src/transport/smtp/client/tls.rs @@ -380,7 +380,7 @@ impl TlsParametersBuilder { let tls = ClientConfig::builder_with_protocol_versions(supported_versions); let provider = rustls::crypto::CryptoProvider::get_default() - .map(|arc| arc.clone()) + .cloned() .unwrap_or_else(|| Arc::new(rustls::crypto::ring::default_provider())); // Build TLS config @@ -659,7 +659,7 @@ impl ServerCertVerifier for InvalidCertsVerifier { end_entity: &CertificateDer<'_>, intermediates: &[CertificateDer<'_>], server_name: &ServerName<'_>, - ocsp_response: &[u8], + _ocsp_response: &[u8], now: UnixTime, ) -> Result { let cert = ParsedCertificate::try_from(end_entity)?;