diff --git a/nameserver/server.go b/nameserver/server.go index ff05be72..f7ba7817 100644 --- a/nameserver/server.go +++ b/nameserver/server.go @@ -223,14 +223,6 @@ func (s *DNSServer) queryHandler(proto dnsProtocol) dns.HandlerFunc { lookups := []Lookup{s.Zone, s.mdnsCli} Debug.Printf("Query: %+v", q) - if q.Qtype != dns.TypeA { - Debug.Printf("[dns msgid %d] Unsuported query type %s", r.MsgHdr.Id, dns.TypeToString[q.Qtype]) - m := makeDNSNotImplResponse(r) - s.cache.Put(r, m, negLocalTTL, 0, now) - w.WriteMsg(m) - return - } - reply, err := s.cache.Get(r, maxLen, time.Now()) if err != nil { if err == errNoLocalReplies { @@ -248,6 +240,16 @@ func (s *DNSServer) queryHandler(proto dnsProtocol) dns.HandlerFunc { w.WriteMsg(reply) return } + + // catch unsupported queries + if q.Qtype != dns.TypeA { + Debug.Printf("[dns msgid %d] Unsuported query type %s", r.MsgHdr.Id, dns.TypeToString[q.Qtype]) + m := makeDNSNotImplResponse(r) + s.cache.Put(r, m, negLocalTTL, 0, now) + w.WriteMsg(m) + return + } + for _, lookup := range lookups { if ip, err := lookup.LookupName(q.Name); err == nil { m := makeAddressReply(r, &q, []net.IP{ip}) @@ -275,17 +277,8 @@ func (s *DNSServer) rdnsHandler(proto dnsProtocol) dns.HandlerFunc { q := r.Question[0] lookups := []Lookup{s.Zone, s.mdnsCli} maxLen := getMaxReplyLen(r, proto) - Debug.Printf("Reverse query: %+v", q) - - if q.Qtype != dns.TypePTR { - Warning.Printf("[dns msgid %d] Unexpected reverse query type %s: %+v", - r.MsgHdr.Id, dns.TypeToString[q.Qtype], q) - m := makeDNSNotImplResponse(r) - s.cache.Put(r, m, negLocalTTL, 0, now) - w.WriteMsg(m) - return - } + Debug.Printf("Reverse query: %+v", q) reply, err := s.cache.Get(r, maxLen, time.Now()) if err != nil { if err == errNoLocalReplies { @@ -303,6 +296,17 @@ func (s *DNSServer) rdnsHandler(proto dnsProtocol) dns.HandlerFunc { w.WriteMsg(reply) return } + + // catch unsupported queries + if q.Qtype != dns.TypePTR { + Warning.Printf("[dns msgid %d] Unexpected reverse query type %s: %+v", + r.MsgHdr.Id, dns.TypeToString[q.Qtype], q) + m := makeDNSNotImplResponse(r) + s.cache.Put(r, m, negLocalTTL, 0, now) + w.WriteMsg(m) + return + } + for _, lookup := range lookups { if name, err := lookup.LookupInaddr(q.Name); err == nil { m := makePTRReply(r, &q, []string{name})