From e3e5db7ca655387654348a0152120e1c184a08ee Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Fri, 8 Nov 2013 11:01:22 +0000 Subject: [PATCH] create RR directly rather than parsing a string --- dns.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/dns.go b/dns.go index d25384f0..2bd5ba15 100644 --- a/dns.go +++ b/dns.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "math/rand" + "net" "strconv" "strings" "time" @@ -90,9 +91,17 @@ func ednsFromRequest(req, m *dns.Msg) { return } -// Create a RR string for an IP. -func recordForIp(query string, ttl int, recType string, ip string) string { - return fmt.Sprintf("%s %d IN %s %s", query, ttl, recType, ip) +// Create an A RR for a specific IP. +func recordForIp(name string, ttl int, ip string) *dns.A { + rec := new(dns.A) + rec.Hdr = dns.RR_Header{ + Name: name, + Rrtype: dns.TypeA, + Class: dns.ClassINET, + Ttl: uint32(ttl), + } + rec.A = net.ParseIP(ip) + return rec } func (d *DnsRedirector) getQuestionName(req *dns.Msg) string { @@ -150,9 +159,8 @@ func (d *DnsRedirector) serveDNS(w dns.ResponseWriter, req *dns.Msg) { m.SetReply(req) m.MsgHdr.Authoritative = true for _, ip := range ips { - rec := recordForIp(query, d.ttl, "A", ip) - answer, _ := dns.NewRR(rec) - m.Answer = append(m.Answer, answer) + rec := recordForIp(query, d.ttl, ip) + m.Answer = append(m.Answer, rec) } log.Printf("Query(%s): %v", query, ips) } -- GitLab