implement cname chasing

This commit is contained in:
Miek Gieben 2011-07-27 13:12:14 +02:00
parent 5087f5a993
commit 51d347a0d5
1 changed files with 13 additions and 1 deletions

View File

@ -78,15 +78,27 @@ func handleQuery(w dns.ResponseWriter, req *dns.Msg) {
m.Ns = ns
names := false
cname := 0
m.Answer = make([]dns.RR, 0)
again:
for i := 0; i < zone.Len(); i++ {
if zone.At(i).Header().Name == qname {
names = true
// Name found
if zone.At(i).Header().Rrtype == qtype {
// Type also found, exact match
// Exact match
m.Answer = append(m.Answer, zone.At(i))
}
if zone.At(i).Header().Rrtype == dns.TypeCNAME {
// Cname match
m.Answer = append(m.Answer, zone.At(i))
qname = zone.At(i).(*dns.RR_CNAME).Cname
cname++
if cname > 7 {
break
}
goto again
}
}
}
if len(m.Answer) == 0 {