Fixed bug with TXT parsing.

This commit is contained in:
Revertron
2026-03-20 11:13:00 +01:00
parent 2e1f05cadb
commit eb30037f53
5 changed files with 518 additions and 340 deletions
-1
View File
@@ -510,7 +510,6 @@ impl BootstrapResolver {
#[cfg(feature = "doh")]
impl Resolver for BootstrapResolver {
// TODO use timeout parameter
fn resolve(&self, uri: &Uri, _config: &Config, timeout: NextTimeout) -> std::result::Result<ResolvedSocketAddrs, ureq::Error> {
let domain = uri.host().unwrap_or("localhost");
let port = uri.port_u16().unwrap_or(443);
+10 -4
View File
@@ -312,11 +312,17 @@ impl DnsRecord {
}
QueryType::TXT => {
let mut txt = String::new();
let end_pos = buffer.pos() + data_len as usize;
let cur_pos = buffer.pos();
txt.push_str(&String::from_utf8_lossy(buffer.get_range(cur_pos, data_len as usize)?));
buffer.step(data_len as usize)?;
// TXT RDATA consists of one or more <length><text> segments (RFC 1035 3.3.14)
while buffer.pos() < end_pos {
let seg_len = buffer.read()? as usize;
if seg_len > 0 {
let cur_pos = buffer.pos();
txt.push_str(&String::from_utf8_lossy(buffer.get_range(cur_pos, seg_len)?));
buffer.step(seg_len)?;
}
}
Ok(DnsRecord::TXT { domain, data: txt, ttl: TransientTtl(ttl) })
}
+5 -1
View File
@@ -107,7 +107,7 @@ pub fn execute_query(context: Arc<ServerContext>, request: &DnsPacket) -> DnsPac
let question = &request.questions[0];
packet.questions.push(question.clone());
log::trace!("Resolving: {}, type {:?}", &question.name, &question.qtype);
debug!("Resolving: {}, type {:?}", &question.name, &question.qtype);
let mut resolver = context.create_resolver(Arc::clone(&context));
let res_code = match resolver.resolve(&question.name, question.qtype, request.header.recursion_desired) {
@@ -246,6 +246,10 @@ impl DnsServer for DnsUdpServer {
debug!("UDP service loop has finished");
break;
}
if code == 10054 {
// Ignore
continue;
}
}
debug!("Failed to read from UDP socket: {:?}", err);
continue;