Fixed bug with TXT parsing.
This commit is contained in:
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user