Fixed bug with TXT parsing.
This commit is contained in:
Generated
+501
-333
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -14,7 +14,7 @@ exclude = ["blockchain.db", "alfis.toml"]
|
||||
getopts = "0.2.24"
|
||||
log = "0.4.28"
|
||||
simplelog = "0.12.2"
|
||||
toml = "0.9.8"
|
||||
toml = "0.9.12+spec-1.1.0"
|
||||
sha2 = "0.10.9"
|
||||
ed25519-dalek = "2.2.0"
|
||||
x25519-dalek = { version = "2.0.1", features = ["reusable_secrets"] }
|
||||
@@ -40,6 +40,7 @@ derive_more = { version = "2.0.1", features = ["display", "error", "from"] }
|
||||
lazy_static = "1.5.0"
|
||||
spmc = "0.3.0"
|
||||
thread-priority = "3.0.0"
|
||||
crossbeam-channel = "0.5.13"
|
||||
|
||||
# Optional dependencies regulated by features
|
||||
wry = { version = "0.53", optional = true }
|
||||
|
||||
@@ -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);
|
||||
|
||||
+9
-3
@@ -312,11 +312,17 @@ impl DnsRecord {
|
||||
}
|
||||
QueryType::TXT => {
|
||||
let mut txt = String::new();
|
||||
let end_pos = buffer.pos() + 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, data_len as usize)?));
|
||||
|
||||
buffer.step(data_len as usize)?;
|
||||
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