From 608aab58795d77d9b7ea78ad6abffeec978facee Mon Sep 17 00:00:00 2001 From: Lowder Date: Wed, 8 Apr 2026 15:28:32 +0500 Subject: [PATCH] fix: show not found error instead of 500 (#59) --- querying/src/resolver.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/querying/src/resolver.rs b/querying/src/resolver.rs index 7d00542..cdeb9f7 100644 --- a/querying/src/resolver.rs +++ b/querying/src/resolver.rs @@ -1,5 +1,6 @@ use hickory_resolver::config::{LookupIpStrategy, ResolverConfig, ResolverOpts}; use hickory_resolver::name_server::TokioConnectionProvider; +use hickory_resolver::proto::ProtoErrorKind; use std::io::{Error, ErrorKind}; use std::net::IpAddr; use std::sync::Arc; @@ -54,10 +55,12 @@ impl Resolver { pub async fn lookup_ips(&self, domain: &str) -> Result, ResolveError> { Ok(self.resolver.lookup_ip(domain).await - .map_err(|e| if e.kind.is_no_records_found() { - ResolveError::NxDomain - } else { - ResolveError::Other(Error::new(ErrorKind::Other, e)) + .map_err(|e| match e.kind() { + ProtoErrorKind::NoRecordsFound(..) => ResolveError::NxDomain, + ProtoErrorKind::Msg(msg) + if msg.contains("Malformed label") || + msg.contains("invalid characters") => ResolveError::NxDomain, + _ => ResolveError::Other(Error::new(ErrorKind::Other, e)) })? .into_iter().collect()) }