From a0ceaeba1c7d7a09968ab3689045b36efd614dfd Mon Sep 17 00:00:00 2001 From: mdecimus Date: Fri, 4 Aug 2023 16:19:01 +0200 Subject: [PATCH] Remove CRLF from Milter headers --- crates/smtp/src/inbound/milter/client.rs | 8 ++++---- crates/smtp/src/inbound/milter/message.rs | 7 ++++++- tests/src/smtp/inbound/milter.rs | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/crates/smtp/src/inbound/milter/client.rs b/crates/smtp/src/inbound/milter/client.rs index ba18d4cd..0bcf1f16 100644 --- a/crates/smtp/src/inbound/milter/client.rs +++ b/crates/smtp/src/inbound/milter/client.rs @@ -227,14 +227,14 @@ impl MilterClient { pub async fn headers(&mut self, headers: I) -> super::Result where I: Iterator, - H: AsRef<[u8]>, - V: AsRef<[u8]>, + H: AsRef, + V: AsRef, { if !self.has_option(SMFIP_NOHDRS) { for (name, value) in headers { self.write(Command::Header { - name: name.as_ref(), - value: value.as_ref(), + name: name.as_ref().trim().as_bytes(), + value: value.as_ref().trim().as_bytes(), }) .await?; if !self.has_option(SMFIP_NR_HDR) { diff --git a/crates/smtp/src/inbound/milter/message.rs b/crates/smtp/src/inbound/milter/message.rs index 3792d605..29f58217 100644 --- a/crates/smtp/src/inbound/milter/message.rs +++ b/crates/smtp/src/inbound/milter/message.rs @@ -219,7 +219,12 @@ impl Session { // Headers client - .headers(message.raw_parsed_headers().iter().cloned()) + .headers(message.raw_parsed_headers().iter().map(|(k, v)| { + ( + std::str::from_utf8(k).unwrap_or_default(), + std::str::from_utf8(v).unwrap_or_default(), + ) + })) .await? .assert_continue()?; diff --git a/tests/src/smtp/inbound/milter.rs b/tests/src/smtp/inbound/milter.rs index fad22580..b06173a9 100644 --- a/tests/src/smtp/inbound/milter.rs +++ b/tests/src/smtp/inbound/milter.rs @@ -377,9 +377,9 @@ async fn milter_client_test() { let mut client = MilterClient::connect( &Milter { enable: IfBlock::default(), - addrs: vec![SocketAddr::from(([127, 0, 0, 1], 1234))], + addrs: vec![SocketAddr::from(([127, 0, 0, 1], 11332))], hostname: "localhost".to_string(), - port: 1234, + port: 11332, timeout_connect: Duration::from_secs(10), timeout_command: Duration::from_secs(30), timeout_data: Duration::from_secs(30),