func (s *DNSServer) handleMXRequest(r *dns.Msg, m *dns.Msg) { m.Answer = make([]dns.RR, 0, 2) query := r.Question[0].Name if query[len(query)-1] == '.' { query = query[:len(query)-1] } for service := range s.queryServices(query) { rr := new(dns.MX) var ttl int if service.Ttl != -1 { ttl = service.Ttl } else { ttl = s.config.ttl } rr.Hdr = dns.RR_Header{ Name: r.Question[0].Name, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: uint32(ttl), } rr.Mx = r.Question[0].Name m.Answer = append(m.Answer, rr) } }
func answerMX(q *dns.Question, v *DNSValue) dns.RR { answer := new(dns.MX) answer.Header().Name = q.Name answer.Header().Rrtype = dns.TypeMX answer.Header().Class = dns.ClassINET answer.Preference = 50 // default if not defined priority, err := strconv.Atoi(v.Attr["priority"]) if err == nil { answer.Preference = uint16(priority) } if target, ok := v.Attr["target"]; ok { answer.Mx = strings.TrimSuffix(target, ".") + "." } else if v.Value != "" { // allows for simplified setting answer.Mx = strings.TrimSuffix(v.Value, ".") + "." } return answer }
// handleDnsMX writes a MX record pointing to s.host into m for host name. func (s *server) handleDnsMX(name host, m *dns.Msg) { r := new(dns.MX) r.Hdr = dns.RR_Header{ Name: name.dns(), Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: 3600, } r.Preference = 10 r.Mx = s.self.dns() m.Answer = make([]dns.RR, 1) m.Answer[0] = r }
func (s *DNSServer) makeServiceMX(n string, service *Service) dns.RR { rr := new(dns.MX) var ttl int if service.Ttl != -1 { ttl = service.Ttl } else { ttl = s.config.ttl } rr.Hdr = dns.RR_Header{ Name: n, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: uint32(ttl), } rr.Mx = n return rr }
func TestRRsToMapStrsWithOPTRecord(t *testing.T) { o := new(mkdns.OPT) o.Hdr.Name = "." // MUST be the root zone, per definition. o.Hdr.Rrtype = mkdns.TypeOPT r := new(mkdns.MX) r.Hdr = mkdns.RR_Header{Name: "miek.nl.", Rrtype: mkdns.TypeMX, Class: mkdns.ClassINET, Ttl: 3600} r.Preference = 10 r.Mx = "mx.miek.nl." // The OPT record is a psuedo-record so it doesn't become a real record // in our conversion, and there will be 1 entry instead of 2. mapStrs := rrsToMapStrs([]mkdns.RR{o, r}) assert.Len(t, mapStrs, 1) mapStr := mapStrs[0] assert.Equal(t, "IN", mapStr["class"]) assert.Equal(t, "MX", mapStr["type"]) assert.Equal(t, "mx.miek.nl.", mapStr["data"]) assert.Equal(t, "miek.nl.", mapStr["name"]) assert.EqualValues(t, 10, mapStr["preference"]) }