From 939fd83e83d4a2074dd903eb3343172d4e385282 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 9 Aug 2012 21:05:20 +0200 Subject: [PATCH] Fix the IsSubDomain issue --- ex/fksd/serve.go | 8 +++++++- ex/fksd/zone.go | 4 +++- zone.go | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ex/fksd/serve.go b/ex/fksd/serve.go index 0dab1c79..fdac4318 100644 --- a/ex/fksd/serve.go +++ b/ex/fksd/serve.go @@ -20,13 +20,16 @@ func serve(w dns.ResponseWriter, req *dns.Msg, z *dns.Zone) { if z == nil { panic("fksd: no zone") } - //logPrintf("[zone %s] incoming %s %s %d from %s\n", z.Origin, req.Question[0].Name, dns.Rr_str[req.Question[0].Qtype], req.MsgHdr.Id, w.RemoteAddr()) + logPrintf("[zone %s] incoming %s %s %d from %s\n", z.Origin, req.Question[0].Name, dns.Rr_str[req.Question[0].Qtype], req.MsgHdr.Id, w.RemoteAddr()) // Ds Handling // Referral // if we find something with NonAuth = true, it means // we need to return referral nss := z.Predecessor(req.Question[0].Name) m := new(dns.Msg) + if nss != nil { + println("found", nss.RR[dns.TypeNS][0].String()) + } if nss != nil && nss.NonAuth { m.SetReply(req) m.Ns = nss.RR[dns.TypeNS] @@ -98,6 +101,9 @@ func serve(w dns.ResponseWriter, req *dns.Msg, z *dns.Zone) { return } else { // NoData reply or CNAME m.SetReply(req) + if cname, ok := node.RR[dns.TypeCNAME]; ok { + m.Answer = cname // tODO + } m.Ns = apex.RR[dns.TypeSOA] ednsFromRequest(req, m) w.Write(m) diff --git a/ex/fksd/zone.go b/ex/fksd/zone.go index dc2fb89e..c9fa8a9f 100644 --- a/ex/fksd/zone.go +++ b/ex/fksd/zone.go @@ -14,7 +14,9 @@ func (c *Config) ReadZoneFile(origin, file string) error { z := dns.NewZone(origin) for rr := range dns.ParseZone(f, origin, file) { if rr.Error == nil { - z.Insert(rr.RR) + if e := z.Insert(rr.RR); e != nil { + logPrintf("failed to insert record: %s\n", e.Error()) + } } else { logPrintf("failed to parse: %s\n", rr.Error.Error()) } diff --git a/zone.go b/zone.go index 6d90830c..cecc84f5 100644 --- a/zone.go +++ b/zone.go @@ -52,7 +52,7 @@ func NewZone(origin string) *Zone { // Insert inserts an RR into the zone. Duplicate data overwrites the old data. func (z *Zone) Insert(r RR) error { - if !IsSubDomain(r.Header().Name, z.Origin) { + if !IsSubDomain(z.Origin, r.Header().Name) { return &Error{Err: "out of zone data", Name: r.Header().Name} }