Skip to content

Commit c6e2d8a

Browse files
committed
Don't overwrite the DNS servers list permanently
1 parent 35cea49 commit c6e2d8a

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

src/socket/dns.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -257,17 +257,6 @@ impl<'a> Socket<'a> {
257257
) -> Result<QueryHandle, StartQueryError> {
258258
let handle = self.find_free_query().ok_or(StartQueryError::NoFreeSlot)?;
259259

260-
if mdns {
261-
// as per RFC 6762 any DNS query ending in .local. MUST be sent as mdns
262-
// so we internally overwrite the servers for any of those queries
263-
self.update_servers(&[
264-
#[cfg(feature = "proto-ipv6")]
265-
MDNS_IPV6_ADDR,
266-
#[cfg(feature = "proto-ipv4")]
267-
MDNS_IPV4_ADDR,
268-
]);
269-
}
270-
271260
self.queries[handle.0] = Some(DnsQuery {
272261
state: State::Pending(PendingQuery {
273262
name: Vec::from_slice(raw_name).map_err(|_| StartQueryError::NameTooLong)?,
@@ -514,6 +503,19 @@ impl<'a> Socket<'a> {
514503

515504
for q in self.queries.iter_mut().flatten() {
516505
if let State::Pending(pq) = &mut q.state {
506+
// As per RFC 6762 any DNS query ending in .local. MUST be sent as mdns
507+
// so we internally overwrite the servers for any of those queries
508+
// in this function.
509+
let servers = if pq.mdns {
510+
&[
511+
#[cfg(feature = "proto-ipv6")]
512+
MDNS_IPV6_ADDR,
513+
#[cfg(feature = "proto-ipv4")]
514+
MDNS_IPV4_ADDR,
515+
]
516+
} else {
517+
self.servers.as_slice()
518+
};
517519
let timeout = if let Some(timeout) = pq.timeout_at {
518520
timeout
519521
} else {
@@ -533,14 +535,14 @@ impl<'a> Socket<'a> {
533535
pq.server_idx += 1;
534536
}
535537
// Check if we've run out of servers to try.
536-
if pq.server_idx >= self.servers.len() {
538+
if pq.server_idx >= servers.len() {
537539
net_trace!("already tried all servers.");
538540
q.set_state(State::Failure);
539541
continue;
540542
}
541543

542544
// Check so the IP address is valid
543-
if self.servers[pq.server_idx].is_unspecified() {
545+
if servers[pq.server_idx].is_unspecified() {
544546
net_trace!("invalid unspecified DNS server addr.");
545547
q.set_state(State::Failure);
546548
continue;
@@ -572,7 +574,7 @@ impl<'a> Socket<'a> {
572574
dst_port,
573575
};
574576

575-
let dst_addr = self.servers[pq.server_idx];
577+
let dst_addr = servers[pq.server_idx];
576578
let src_addr = cx.get_source_address(dst_addr).unwrap(); // TODO remove unwrap
577579
let ip_repr = IpRepr::new(
578580
src_addr,

0 commit comments

Comments
 (0)