diff --git a/crates/kumo-spf/src/record.rs b/crates/kumo-spf/src/record.rs index 8400686e..50a0bbac 100644 --- a/crates/kumo-spf/src/record.rs +++ b/crates/kumo-spf/src/record.rs @@ -234,7 +234,18 @@ impl Directive { } } } - _ => todo!("evaluate directive {self:?}"), + Mechanism::Exists { domain } => { + let domain = cx.domain(Some(domain))?; + match resolver.lookup_ip(&domain).await { + Ok(ips) => ips.iter().any(|ip| ip.is_ipv4()), + Err(err) => { + return Err(SpfResult { + disposition: SpfDisposition::TempError, + context: format!("error looking up IP for {domain}: {err}"), + }) + } + } + } }; Ok(match matched {