don't care about question type when overriding records

* Even if the client wants A records, respond with AAAA anyway and
  vice-versa. Otherwise, our resolving client will fall back to
  upstream.
This commit is contained in:
Peter Cai 2021-04-05 16:24:35 +08:00
parent af31c53072
commit d68ad0971e
1 changed files with 11 additions and 17 deletions

View File

@ -79,22 +79,16 @@ impl OverrideResolver {
IpAddr::V6(addr) => (Rtype::Aaaa, AllRecordData::Aaaa(Aaaa::new(addr.clone()))),
};
let qtype = question.qtype();
if qtype == Rtype::Any || qtype == rtype {
// Convert AllRecordData to UnknownRecordData to match the type
// since our resolver client doesn't really care about the actual type
let mut rdata_buf: Vec<u8> = Vec::new();
rdata.compose(&mut rdata_buf).ok()?;
let record = Record::new(
question.qname().clone(),
question.qclass(),
self.override_ttl,
UnknownRecordData::from_octets(rtype, rdata_buf),
);
return Some(record);
} else {
// If the response and query types don't match, just return none
return None;
}
// Convert AllRecordData to UnknownRecordData to match the type
// since our resolver client doesn't really care about the actual type
let mut rdata_buf: Vec<u8> = Vec::new();
rdata.compose(&mut rdata_buf).ok()?;
let record = Record::new(
question.qname().clone(),
question.qclass(),
self.override_ttl,
UnknownRecordData::from_octets(rtype, rdata_buf),
);
return Some(record);
}
}