From fa732408121c4ecd3b87002e2f06382af28e9abd Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Tue, 14 Jul 2015 16:44:21 +0000 Subject: [PATCH 1/2] Copy dns requests and give them a fresh id when doing recursive queries. --- nameserver/dns.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nameserver/dns.go b/nameserver/dns.go index c2868aa2..9108b9a6 100644 --- a/nameserver/dns.go +++ b/nameserver/dns.go @@ -227,7 +227,9 @@ func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize i } for _, server := range d.upstream.Servers { - response, _, err := client.Exchange(req, fmt.Sprintf("%s:%s", server, d.upstream.Port)) + reqCopy := *req + reqCopy.Id = dns.Id() + response, _, err := client.Exchange(&reqCopy, fmt.Sprintf("%s:%s", server, d.upstream.Port)) if err != nil || response == nil { d.ns.debugf("error trying %s: %v", server, err) continue @@ -237,6 +239,7 @@ func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize i continue } d.ns.debugf("response: %+v", response) + response.SetReply(req) if err := w.WriteMsg(response); err != nil { d.ns.infof("error responding: %v", err) } From 91395d6728a9490ad372f9d4237ba399c8dfd7a7 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Wed, 15 Jul 2015 11:05:36 +0000 Subject: [PATCH 2/2] Use Msg.Copy! --- nameserver/dns.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nameserver/dns.go b/nameserver/dns.go index 9108b9a6..118faea4 100644 --- a/nameserver/dns.go +++ b/nameserver/dns.go @@ -227,9 +227,9 @@ func (d *DNSServer) handleRecursive(client *dns.Client, defaultMaxResponseSize i } for _, server := range d.upstream.Servers { - reqCopy := *req + reqCopy := req.Copy() reqCopy.Id = dns.Id() - response, _, err := client.Exchange(&reqCopy, fmt.Sprintf("%s:%s", server, d.upstream.Port)) + response, _, err := client.Exchange(reqCopy, fmt.Sprintf("%s:%s", server, d.upstream.Port)) if err != nil || response == nil { d.ns.debugf("error trying %s: %v", server, err) continue