Browse Source

dns: return failure on NXDOMAIN.

Emil Fresk 3 years ago
parent
commit
d6a9519094
1 changed files with 8 additions and 1 deletions
  1. 8 1
      src/socket/dns.rs

+ 8 - 1
src/socket/dns.rs

@@ -4,7 +4,7 @@ use managed::ManagedSlice;
 
 use crate::socket::{Context, PollAt, Socket};
 use crate::time::{Duration, Instant};
-use crate::wire::dns::{Flags, Opcode, Packet, Question, Record, RecordData, Repr, Type};
+use crate::wire::dns::{Flags, Opcode, Packet, Question, Rcode, Record, RecordData, Repr, Type};
 use crate::wire::{IpAddress, IpEndpoint, IpProtocol, IpRepr, Ipv4Address, UdpRepr};
 use crate::{rand, Error, Result};
 
@@ -238,6 +238,13 @@ impl<'a> DnsSocket<'a> {
                     continue;
                 }
 
+                if p.rcode() == Rcode::NXDomain {
+                    net_trace!("rcode NXDomain");
+
+                    q.state = State::Failure;
+                    continue;
+                }
+
                 let payload = p.payload();
                 let (mut payload, question) = Question::parse(payload)?;