Fixed multiple clippy warnings.
This commit is contained in:
@@ -39,9 +39,9 @@ pub struct Zone {
|
||||
impl Zone {
|
||||
pub fn new(domain: String, m_name: String, r_name: String) -> Zone {
|
||||
Zone {
|
||||
domain: domain,
|
||||
m_name: m_name,
|
||||
r_name: r_name,
|
||||
domain,
|
||||
m_name,
|
||||
r_name,
|
||||
serial: 0,
|
||||
refresh: 0,
|
||||
retry: 0,
|
||||
@@ -222,7 +222,7 @@ impl Authority {
|
||||
None => continue
|
||||
};
|
||||
|
||||
if &domain != qname {
|
||||
if domain != qname {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -49,7 +49,7 @@ pub trait PacketBuffer {
|
||||
self.write(((val >> 24) & 0xFF) as u8)?;
|
||||
self.write(((val >> 16) & 0xFF) as u8)?;
|
||||
self.write(((val >> 8) & 0xFF) as u8)?;
|
||||
self.write(((val >> 0) & 0xFF) as u8)?;
|
||||
self.write((val & 0xFF) as u8)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -95,7 +95,7 @@ pub trait PacketBuffer {
|
||||
let res = ((self.read()? as u32) << 24)
|
||||
| ((self.read()? as u32) << 16)
|
||||
| ((self.read()? as u32) << 8)
|
||||
| ((self.read()? as u32) << 0);
|
||||
| (self.read()? as u32);
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
@@ -239,7 +239,7 @@ impl<'a, T> PacketBuffer for StreamPacketBuffer<'a, T> where T: Read + 'a {
|
||||
fn read(&mut self) -> Result<u8> {
|
||||
while self.pos >= self.buffer.len() {
|
||||
let mut local_buffer = [0; 1];
|
||||
self.stream.read(&mut local_buffer)?;
|
||||
self.stream.read_exact(&mut local_buffer)?;
|
||||
self.buffer.push(local_buffer[0]);
|
||||
}
|
||||
|
||||
@@ -252,7 +252,7 @@ impl<'a, T> PacketBuffer for StreamPacketBuffer<'a, T> where T: Read + 'a {
|
||||
fn get(&mut self, pos: usize) -> Result<u8> {
|
||||
while pos >= self.buffer.len() {
|
||||
let mut local_buffer = [0; 1];
|
||||
self.stream.read(&mut local_buffer)?;
|
||||
self.stream.read_exact(&mut local_buffer)?;
|
||||
self.buffer.push(local_buffer[0]);
|
||||
}
|
||||
|
||||
@@ -262,7 +262,7 @@ impl<'a, T> PacketBuffer for StreamPacketBuffer<'a, T> where T: Read + 'a {
|
||||
fn get_range(&mut self, start: usize, len: usize) -> Result<&[u8]> {
|
||||
while start + len > self.buffer.len() {
|
||||
let mut local_buffer = [0; 1];
|
||||
self.stream.read(&mut local_buffer)?;
|
||||
self.stream.read_exact(&mut local_buffer)?;
|
||||
self.buffer.push(local_buffer[0]);
|
||||
}
|
||||
|
||||
|
||||
+8
-10
@@ -131,7 +131,7 @@ impl DnsNetworkClient {
|
||||
let mut socket = TcpStream::connect(server)?;
|
||||
|
||||
write_packet_length(&mut socket, req_buffer.pos())?;
|
||||
socket.write(&req_buffer.buf[0..req_buffer.pos])?;
|
||||
socket.write_all(&req_buffer.buf[0..req_buffer.pos])?;
|
||||
socket.flush()?;
|
||||
|
||||
let _ = read_packet_length(&mut socket)?;
|
||||
@@ -409,7 +409,7 @@ impl HttpsDnsClient {
|
||||
.max_idle_connections_per_host(8)
|
||||
.max_idle_connections(16)
|
||||
.resolver(move |addr: &str| {
|
||||
let addr = match addr.find(":") {
|
||||
let addr = match addr.find(':') {
|
||||
Some(index) => addr[0..index].to_string(),
|
||||
None => addr.to_string()
|
||||
};
|
||||
@@ -427,17 +427,15 @@ impl HttpsDnsClient {
|
||||
for server in &servers {
|
||||
if let Ok(res) = dns_client.send_udp_query(&addr, QueryType::A, server, true) {
|
||||
for answer in &res.answers {
|
||||
match answer {
|
||||
DnsRecord::A { addr, .. } => result.push(IpAddr::V4(addr.clone())),
|
||||
_ => {}
|
||||
if let DnsRecord::A { addr, .. } = answer {
|
||||
result.push(IpAddr::V4(*addr))
|
||||
}
|
||||
}
|
||||
}
|
||||
if let Ok(res) = dns_client.send_udp_query(&addr, QueryType::AAAA, server, true) {
|
||||
for answer in &res.answers {
|
||||
match answer {
|
||||
DnsRecord::AAAA { addr, .. } => result.push(IpAddr::V6(addr.clone())),
|
||||
_ => {}
|
||||
if let DnsRecord::AAAA { addr, .. } = answer {
|
||||
result.push(IpAddr::V6(*addr))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -496,7 +494,7 @@ impl DnsClient for HttpsDnsClient {
|
||||
let response = self.agent
|
||||
.post(doh_url)
|
||||
.set("Content-Type", "application/dns-message")
|
||||
.send_bytes(&req_buffer.buffer.as_slice());
|
||||
.send_bytes(req_buffer.buffer.as_slice());
|
||||
|
||||
match response {
|
||||
Ok(response) => {
|
||||
@@ -512,7 +510,7 @@ impl DnsClient for HttpsDnsClient {
|
||||
.take(4096)
|
||||
.read_to_end(&mut bytes)?;
|
||||
let mut buffer = VectorPacketBuffer::new();
|
||||
buffer.buffer.extend_from_slice(&bytes.as_slice());
|
||||
buffer.buffer.extend_from_slice(bytes.as_slice());
|
||||
if let Ok(packet) = DnsPacket::from_buffer(&mut buffer) {
|
||||
return Ok(packet);
|
||||
}
|
||||
|
||||
+6
-5
@@ -20,13 +20,13 @@ impl HostsFilter {
|
||||
file.read_to_string(&mut text).unwrap();
|
||||
let mut map = HashMap::new();
|
||||
|
||||
let list: Vec<_> = text.split("\n").collect();
|
||||
let list: Vec<_> = text.split('\n').collect();
|
||||
for s in list {
|
||||
if s.is_empty() || s.starts_with("#") {
|
||||
if s.is_empty() || s.starts_with('#') {
|
||||
continue;
|
||||
}
|
||||
let string = s.replace('\t', " ");
|
||||
let parts: Vec<_> = string.splitn(2, " ").collect();
|
||||
let parts: Vec<_> = string.splitn(2, ' ').collect();
|
||||
if parts.len() != 2 {
|
||||
continue;
|
||||
}
|
||||
@@ -34,6 +34,7 @@ impl HostsFilter {
|
||||
let domain = parts[1].trim().to_owned();
|
||||
if let Ok(addr) = ip.parse::<IpAddr>() {
|
||||
if !domain.is_empty() {
|
||||
#[allow(clippy::or_fun_call)]
|
||||
map.entry(domain).or_insert(vec![addr]);
|
||||
}
|
||||
}
|
||||
@@ -58,10 +59,10 @@ impl DnsFilter for HostsFilter {
|
||||
for addr in list {
|
||||
match addr {
|
||||
IpAddr::V4(addr) if qtype == QueryType::A => {
|
||||
packet.answers.push(DnsRecord::A { domain: qname.to_owned(), addr: addr.clone(), ttl: TransientTtl(2) });
|
||||
packet.answers.push(DnsRecord::A { domain: qname.to_owned(), addr: *addr, ttl: TransientTtl(2) });
|
||||
}
|
||||
IpAddr::V6(addr) if qtype == QueryType::AAAA => {
|
||||
packet.answers.push(DnsRecord::AAAA { domain: qname.to_owned(), addr: addr.clone(), ttl: TransientTtl(2) });
|
||||
packet.answers.push(DnsRecord::AAAA { domain: qname.to_owned(), addr: *addr, ttl: TransientTtl(2) });
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ use std::net::TcpStream;
|
||||
|
||||
pub fn read_packet_length(stream: &mut TcpStream) -> Result<u16> {
|
||||
let mut len_buffer = [0; 2];
|
||||
stream.read(&mut len_buffer)?;
|
||||
stream.read_exact(&mut len_buffer)?;
|
||||
|
||||
Ok(((len_buffer[0] as u16) << 8) | (len_buffer[1] as u16))
|
||||
}
|
||||
@@ -13,7 +13,7 @@ pub fn write_packet_length(stream: &mut TcpStream, len: usize) -> Result<()> {
|
||||
len_buffer[0] = (len >> 8) as u8;
|
||||
len_buffer[1] = (len & 0xFF) as u8;
|
||||
|
||||
stream.write(&len_buffer)?;
|
||||
stream.write_all(&len_buffer)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
+30
-38
@@ -1,7 +1,5 @@
|
||||
//! implements the DNS protocol in a transport agnostic fashion
|
||||
|
||||
//use std::io::{Error, ErrorKind};
|
||||
use std::cmp::Ordering;
|
||||
use std::fmt;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::net::{Ipv4Addr, Ipv6Addr};
|
||||
@@ -78,18 +76,12 @@ impl QueryType {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Eq, Ord, Serialize, Deserialize)]
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialOrd, Ord, Serialize, Deserialize)]
|
||||
pub struct TransientTtl(pub u32);
|
||||
|
||||
impl PartialEq<TransientTtl> for TransientTtl {
|
||||
fn eq(&self, _: &TransientTtl) -> bool {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd<TransientTtl> for TransientTtl {
|
||||
fn partial_cmp(&self, _: &TransientTtl) -> Option<Ordering> {
|
||||
Some(Ordering::Equal)
|
||||
fn eq(&self, other: &TransientTtl) -> bool {
|
||||
self.0 == other.0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +192,7 @@ impl DnsRecord {
|
||||
((raw_addr >> 24) & 0xFF) as u8,
|
||||
((raw_addr >> 16) & 0xFF) as u8,
|
||||
((raw_addr >> 8) & 0xFF) as u8,
|
||||
((raw_addr >> 0) & 0xFF) as u8
|
||||
(raw_addr & 0xFF) as u8
|
||||
);
|
||||
|
||||
Ok(DnsRecord::A { domain, addr, ttl: TransientTtl(ttl) })
|
||||
@@ -212,13 +204,13 @@ impl DnsRecord {
|
||||
let raw_addr4 = buffer.read_u32()?;
|
||||
let addr = Ipv6Addr::new(
|
||||
((raw_addr1 >> 16) & 0xFFFF) as u16,
|
||||
((raw_addr1 >> 0) & 0xFFFF) as u16,
|
||||
(raw_addr1 & 0xFFFF) as u16,
|
||||
((raw_addr2 >> 16) & 0xFFFF) as u16,
|
||||
((raw_addr2 >> 0) & 0xFFFF) as u16,
|
||||
(raw_addr2 & 0xFFFF) as u16,
|
||||
((raw_addr3 >> 16) & 0xFFFF) as u16,
|
||||
((raw_addr3 >> 0) & 0xFFFF) as u16,
|
||||
(raw_addr3 & 0xFFFF) as u16,
|
||||
((raw_addr4 >> 16) & 0xFFFF) as u16,
|
||||
((raw_addr4 >> 0) & 0xFFFF) as u16
|
||||
(raw_addr4 & 0xFFFF) as u16
|
||||
);
|
||||
|
||||
Ok(DnsRecord::AAAA { domain, addr, ttl: TransientTtl(ttl) })
|
||||
@@ -578,7 +570,7 @@ impl ResultCode {
|
||||
3 => ResultCode::NXDOMAIN,
|
||||
4 => ResultCode::NOTIMP,
|
||||
5 => ResultCode::REFUSED,
|
||||
0 | _ => ResultCode::NOERROR
|
||||
_ => ResultCode::NOERROR
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -642,7 +634,7 @@ impl DnsHeader {
|
||||
)?;
|
||||
|
||||
buffer.write_u8(
|
||||
(self.rescode.clone() as u8)
|
||||
(self.rescode as u8)
|
||||
| ((self.checking_disabled as u8) << 4)
|
||||
| ((self.authed_data as u8) << 5)
|
||||
| ((self.z as u8) << 6)
|
||||
@@ -691,25 +683,25 @@ impl DnsHeader {
|
||||
|
||||
impl fmt::Display for DnsHeader {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "DnsHeader:\n")?;
|
||||
write!(f, "\tid: {0}\n", self.id)?;
|
||||
writeln!(f, "DnsHeader:")?;
|
||||
writeln!(f, "\tid: {0}", self.id)?;
|
||||
|
||||
write!(f, "\trecursion_desired: {0}\n", self.recursion_desired)?;
|
||||
write!(f, "\ttruncated_message: {0}\n", self.truncated_message)?;
|
||||
write!(f, "\tauthoritative_answer: {0}\n", self.authoritative_answer)?;
|
||||
write!(f, "\topcode: {0}\n", self.opcode)?;
|
||||
write!(f, "\tresponse: {0}\n", self.response)?;
|
||||
writeln!(f, "\trecursion_desired: {0}", self.recursion_desired)?;
|
||||
writeln!(f, "\ttruncated_message: {0}", self.truncated_message)?;
|
||||
writeln!(f, "\tauthoritative_answer: {0}", self.authoritative_answer)?;
|
||||
writeln!(f, "\topcode: {0}", self.opcode)?;
|
||||
writeln!(f, "\tresponse: {0}", self.response)?;
|
||||
|
||||
write!(f, "\trescode: {:?}\n", self.rescode)?;
|
||||
write!(f, "\tchecking_disabled: {0}\n", self.checking_disabled)?;
|
||||
write!(f, "\tauthed_data: {0}\n", self.authed_data)?;
|
||||
write!(f, "\tz: {0}\n", self.z)?;
|
||||
write!(f, "\trecursion_available: {0}\n", self.recursion_available)?;
|
||||
writeln!(f, "\trescode: {:?}", self.rescode)?;
|
||||
writeln!(f, "\tchecking_disabled: {0}", self.checking_disabled)?;
|
||||
writeln!(f, "\tauthed_data: {0}", self.authed_data)?;
|
||||
writeln!(f, "\tz: {0}", self.z)?;
|
||||
writeln!(f, "\trecursion_available: {0}", self.recursion_available)?;
|
||||
|
||||
write!(f, "\tquestions: {0}\n", self.questions)?;
|
||||
write!(f, "\tanswers: {0}\n", self.answers)?;
|
||||
write!(f, "\tauthoritative_entries: {0}\n", self.authoritative_entries)?;
|
||||
write!(f, "\tresource_entries: {0}\n", self.resource_entries)?;
|
||||
writeln!(f, "\tquestions: {0}", self.questions)?;
|
||||
writeln!(f, "\tanswers: {0}", self.answers)?;
|
||||
writeln!(f, "\tauthoritative_entries: {0}", self.authoritative_entries)?;
|
||||
writeln!(f, "\tresource_entries: {0}", self.resource_entries)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -752,9 +744,9 @@ impl DnsQuestion {
|
||||
|
||||
impl fmt::Display for DnsQuestion {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "DnsQuestion:\n")?;
|
||||
write!(f, "\tname: {0}\n", self.name)?;
|
||||
write!(f, "\trecord type: {:?}\n", self.qtype)?;
|
||||
writeln!(f, "DnsQuestion:")?;
|
||||
writeln!(f, "\tname: {0}", self.name)?;
|
||||
writeln!(f, "\trecord type: {:?}", self.qtype)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -946,7 +938,7 @@ impl DnsPacket {
|
||||
let mut test_buffer = VectorPacketBuffer::new();
|
||||
|
||||
let mut size = self.header.binary_len();
|
||||
for ref question in &self.questions {
|
||||
for question in &self.questions {
|
||||
size += question.binary_len();
|
||||
question.write(&mut test_buffer)?;
|
||||
}
|
||||
|
||||
+6
-6
@@ -153,7 +153,7 @@ impl DnsResolver for RecursiveDnsResolver {
|
||||
}
|
||||
}
|
||||
|
||||
let mut ns = tentative_ns.ok_or_else(|| ResolveError::NoServerFound)?;
|
||||
let mut ns = tentative_ns.ok_or(ResolveError::NoServerFound)?;
|
||||
|
||||
// Start querying name servers
|
||||
loop {
|
||||
@@ -162,21 +162,21 @@ impl DnsResolver for RecursiveDnsResolver {
|
||||
let ns_copy = ns.clone();
|
||||
|
||||
let server = format!("{}:{}", ns_copy.as_str(), 53);
|
||||
let response = self.context.old_client.send_query(qname, qtype.clone(), &server, false)?;
|
||||
let response = self.context.old_client.send_query(qname, qtype, &server, false)?;
|
||||
|
||||
// If we've got an actual answer, we're done!
|
||||
if !response.answers.is_empty() && response.header.rescode == ResultCode::NOERROR {
|
||||
let _ = self.context.cache.store(&response.answers);
|
||||
let _ = self.context.cache.store(&response.authorities);
|
||||
let _ = self.context.cache.store(&response.resources);
|
||||
return Ok(response.clone());
|
||||
return Ok(response);
|
||||
}
|
||||
|
||||
if response.header.rescode == ResultCode::NXDOMAIN {
|
||||
if let Some(ttl) = response.get_ttl_from_soa() {
|
||||
let _ = self.context.cache.store_nxdomain(qname, qtype, ttl);
|
||||
}
|
||||
return Ok(response.clone());
|
||||
return Ok(response);
|
||||
}
|
||||
|
||||
// Otherwise, try to find a new nameserver based on NS and a
|
||||
@@ -194,7 +194,7 @@ impl DnsResolver for RecursiveDnsResolver {
|
||||
// If not, we'll have to resolve the ip of a NS record
|
||||
let new_ns_name = match response.get_unresolved_ns(qname) {
|
||||
Some(x) => x,
|
||||
None => return Ok(response.clone())
|
||||
None => return Ok(response)
|
||||
};
|
||||
|
||||
// Recursively resolve the NS
|
||||
@@ -204,7 +204,7 @@ impl DnsResolver for RecursiveDnsResolver {
|
||||
if let Some(new_ns) = recursive_response.get_random_a() {
|
||||
ns = new_ns.clone();
|
||||
} else {
|
||||
return Ok(response.clone());
|
||||
return Ok(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -67,8 +67,8 @@ fn resolve_cnames(lookup_list: &[DnsRecord], results: &mut Vec<DnsPacket>, resol
|
||||
return;
|
||||
}
|
||||
|
||||
for ref rec in lookup_list {
|
||||
match **rec {
|
||||
for rec in lookup_list {
|
||||
match *rec {
|
||||
DnsRecord::CNAME { ref host, .. } | DnsRecord::SRV { ref host, .. } => {
|
||||
if let Ok(result2) = resolver.resolve(host, qtype, true) {
|
||||
let new_unmatched = result2.get_unresolved_cnames(qtype);
|
||||
@@ -268,7 +268,7 @@ impl DnsServer for DnsUdpServer {
|
||||
}
|
||||
};
|
||||
// If we got a request resent in 100ms interval, then we just skip it
|
||||
let key = (src.clone(), request.header.id);
|
||||
let key = (src, request.header.id);
|
||||
let cur_time = Utc::now().timestamp_millis();
|
||||
if let Some(time) = working_ids.get(&key) {
|
||||
if time + 100 > cur_time {
|
||||
|
||||
Reference in New Issue
Block a user