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"
|
getopts = "0.2.24"
|
||||||
log = "0.4.28"
|
log = "0.4.28"
|
||||||
simplelog = "0.12.2"
|
simplelog = "0.12.2"
|
||||||
toml = "0.9.8"
|
toml = "0.9.12+spec-1.1.0"
|
||||||
sha2 = "0.10.9"
|
sha2 = "0.10.9"
|
||||||
ed25519-dalek = "2.2.0"
|
ed25519-dalek = "2.2.0"
|
||||||
x25519-dalek = { version = "2.0.1", features = ["reusable_secrets"] }
|
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"
|
lazy_static = "1.5.0"
|
||||||
spmc = "0.3.0"
|
spmc = "0.3.0"
|
||||||
thread-priority = "3.0.0"
|
thread-priority = "3.0.0"
|
||||||
|
crossbeam-channel = "0.5.13"
|
||||||
|
|
||||||
# Optional dependencies regulated by features
|
# Optional dependencies regulated by features
|
||||||
wry = { version = "0.53", optional = true }
|
wry = { version = "0.53", optional = true }
|
||||||
|
|||||||
@@ -510,7 +510,6 @@ impl BootstrapResolver {
|
|||||||
|
|
||||||
#[cfg(feature = "doh")]
|
#[cfg(feature = "doh")]
|
||||||
impl Resolver for BootstrapResolver {
|
impl Resolver for BootstrapResolver {
|
||||||
// TODO use timeout parameter
|
|
||||||
fn resolve(&self, uri: &Uri, _config: &Config, timeout: NextTimeout) -> std::result::Result<ResolvedSocketAddrs, ureq::Error> {
|
fn resolve(&self, uri: &Uri, _config: &Config, timeout: NextTimeout) -> std::result::Result<ResolvedSocketAddrs, ureq::Error> {
|
||||||
let domain = uri.host().unwrap_or("localhost");
|
let domain = uri.host().unwrap_or("localhost");
|
||||||
let port = uri.port_u16().unwrap_or(443);
|
let port = uri.port_u16().unwrap_or(443);
|
||||||
|
|||||||
+10
-4
@@ -312,11 +312,17 @@ impl DnsRecord {
|
|||||||
}
|
}
|
||||||
QueryType::TXT => {
|
QueryType::TXT => {
|
||||||
let mut txt = String::new();
|
let mut txt = String::new();
|
||||||
|
let end_pos = buffer.pos() + data_len as usize;
|
||||||
|
|
||||||
let cur_pos = buffer.pos();
|
// TXT RDATA consists of one or more <length><text> segments (RFC 1035 3.3.14)
|
||||||
txt.push_str(&String::from_utf8_lossy(buffer.get_range(cur_pos, data_len as usize)?));
|
while buffer.pos() < end_pos {
|
||||||
|
let seg_len = buffer.read()? as usize;
|
||||||
buffer.step(data_len 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) })
|
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];
|
let question = &request.questions[0];
|
||||||
packet.questions.push(question.clone());
|
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 mut resolver = context.create_resolver(Arc::clone(&context));
|
||||||
let res_code = match resolver.resolve(&question.name, question.qtype, request.header.recursion_desired) {
|
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");
|
debug!("UDP service loop has finished");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if code == 10054 {
|
||||||
|
// Ignore
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
debug!("Failed to read from UDP socket: {:?}", err);
|
debug!("Failed to read from UDP socket: {:?}", err);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user