1
0
Fork 0

Merge pull request #2 from Luzifer/master

Simplify code and preserve TTL when replacing CNAME
pull/5/head
Ambrose Chua 2018-01-31 07:39:04 +08:00 committed by GitHub
commit ffbd1d3f08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 7 deletions

View File

@ -38,19 +38,21 @@ func NewResponseModifier(w dns.ResponseWriter) *ResponseModifier {
func (r *ResponseModifier) WriteMsg(res *dns.Msg) error {
// Guess zone based on authority section.
var zone string
for i := 0; i < len(res.Ns); i++ {
rr := res.Ns[i]
for _, rr := range res.Ns {
if rr.Header().Rrtype == dns.TypeNS {
zone = rr.Header().Name
}
}
// Find and delete CNAME record on that zone, storing the canonical name.
var cname string
for i := 0; i < len(res.Answer); i++ {
rr := res.Answer[i]
var (
cname string
ttl uint32
)
for i, rr := range res.Answer {
if rr.Header().Rrtype == dns.TypeCNAME && rr.Header().Name == zone {
cname = rr.(*dns.CNAME).Target
ttl = rr.(*dns.CNAME).Header().Ttl
// Remove the CNAME record
res.Answer = append(res.Answer[:i], res.Answer[i+1:]...)
break
@ -58,10 +60,10 @@ func (r *ResponseModifier) WriteMsg(res *dns.Msg) error {
}
// Rename all the records with the above canonical name to the zone name
for i := 0; i < len(res.Answer); i++ {
rr := res.Answer[i]
for _, rr := range res.Answer {
if rr.Header().Name == cname {
rr.Header().Name = zone
rr.Header().Ttl = ttl
}
}