- BUG FIX: preserving DNS RCode in Zabov responses (SetReply(query) resets it to RcodeSuccess)

Some DNS client (such as MS Windows) misbehave in case of always positive responses
golang-1.15-vendoring
bloved 2021-01-29 19:47:01 +01:00
parent c56789e193
commit d74f2a973e
1 changed files with 4 additions and 0 deletions

View File

@ -30,7 +30,9 @@ func ForwardQuery(query *dns.Msg, config string, nocache bool) *dns.Msg {
if !nocache { if !nocache {
if cached := GetDomainFromCache(lfqdn); cached != nil { if cached := GetDomainFromCache(lfqdn); cached != nil {
go incrementStats("CacheHit", 1) go incrementStats("CacheHit", 1)
Rcode := cached.MsgHdr.Rcode
cached.SetReply(query) cached.SetReply(query)
cached.MsgHdr.Rcode = Rcode
cached.Authoritative = true cached.Authoritative = true
if ZabovDebug { if ZabovDebug {
log.Println("ForwardQuery: CacheHit") log.Println("ForwardQuery: CacheHit")
@ -65,7 +67,9 @@ func ForwardQuery(query *dns.Msg, config string, nocache bool) *dns.Msg {
continue continue
} else { } else {
go incrementStats(d, 1) go incrementStats(d, 1)
Rcode := in.MsgHdr.Rcode
in.SetReply(query) in.SetReply(query)
in.MsgHdr.Rcode = Rcode
in.Authoritative = true in.Authoritative = true
in.Compress = true in.Compress = true
go DomainCache(lfqdn, in) go DomainCache(lfqdn, in)