From 236afa417f6d981dbc15cd686b4dea7ffb712a0e Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sat, 11 Oct 2025 07:00:21 +0100 Subject: [PATCH] spf: avoid wrong kind of json -> string conversion When populating ehlo_domain in particular, we were using the json Value::to_string() impl which produces a json-serialized string which includes quotes. This is a bit of a foot-gun, so let's add a get_meta_string method to ConnectionMetaData to parallel the equivalent Message::get_meta_string method. --- crates/kumod/src/smtp_server.rs | 5 +++++ crates/kumod/src/spf.rs | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/kumod/src/smtp_server.rs b/crates/kumod/src/smtp_server.rs index 180db5d5..fdf08724 100644 --- a/crates/kumod/src/smtp_server.rs +++ b/crates/kumod/src/smtp_server.rs @@ -2965,6 +2965,11 @@ impl ConnectionMetaData { meta.get(name.as_ref()).cloned() } + pub fn get_meta_string>(&self, name: N) -> Option { + self.get_meta(name) + .and_then(|v| v.as_str().map(|s| s.to_string())) + } + pub fn clone_inner(&self) -> serde_json::Value { self.map.lock().clone() } diff --git a/crates/kumod/src/spf.rs b/crates/kumod/src/spf.rs index dc1f5781..c1ce9335 100644 --- a/crates/kumod/src/spf.rs +++ b/crates/kumod/src/spf.rs @@ -26,8 +26,8 @@ pub fn register<'lua>(lua: &'lua Lua) -> anyhow::Result<()> { .and_then(|v| SocketAddr::from_str(v.as_str()?).ok()) .expect("`received_from` is always set, and always to a value representing a `SocketAddr`"); - let ehlo_domain = meta.get_meta("ehlo_domain").map(|s| s.to_string()); - let relaying_host_name = meta.get_meta("hostname").map(|s| s.to_string()); + let ehlo_domain = meta.get_meta_string("ehlo_domain"); + let relaying_host_name = meta.get_meta_string("hostname"); let resolver = dns_resolver::get_resolver(); let result = CheckHostParams {