func ExamplePrivateHandle() { dns.PrivateHandle("APAIR", TypeAPAIR, NewAPAIR) defer dns.PrivateHandleRemove(TypeAPAIR) rr, err := dns.NewRR("miek.nl. APAIR (1.2.3.4 1.2.3.5)") if err != nil { log.Fatal("could not parse APAIR record: ", err) } fmt.Println(rr) // Output: miek.nl. 3600 IN APAIR 1.2.3.4 1.2.3.5 m := new(dns.Msg) m.Id = 12345 m.SetQuestion("miek.nl.", TypeAPAIR) m.Answer = append(m.Answer, rr) fmt.Println(m) // ;; opcode: QUERY, status: NOERROR, id: 12345 // ;; flags: rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 // // ;; QUESTION SECTION: // ;miek.nl. IN APAIR // // ;; ANSWER SECTION: // miek.nl. 3600 IN APAIR 1.2.3.4 1.2.3.5 }
func TestPrivateByteSlice(t *testing.T) { dns.PrivateHandle("ISBN", TypeISBN, NewISBN) defer dns.PrivateHandleRemove(TypeISBN) rr, err := dns.NewRR(testrecord) if err != nil { t.Fatal(err) } buf := make([]byte, 100) off, err := dns.PackRR(rr, buf, 0, nil, false) if err != nil { t.Errorf("got error packing ISBN: %v", err) } custrr := rr.(*dns.PrivateRR) if ln := custrr.Data.Len() + len(custrr.Header().Name) + 11; ln != off { t.Errorf("offset is not matching to length of Private RR: %d!=%d", off, ln) } rr1, off1, err := dns.UnpackRR(buf[:off], 0) if err != nil { t.Errorf("got error unpacking ISBN: %v", err) } if off1 != off { t.Errorf("Offset after unpacking differs: %d != %d", off1, off) } if rr1.String() != testrecord { t.Errorf("Record string representation did not match original %#v != %#v", rr1.String(), testrecord) } else { t.Log(rr1.String()) } }
func constrcutZones(rz rawZones, serverName string) (zones, auth, error) { a := make(auth) z := make(zones) for zoneName, hosts := range rz.Zones { zoneName = dns.Fqdn(zoneName) soa, err := dns.NewRR(fmt.Sprintf("%s SOA %s dns.%s %s 10000 2400 604800 3600", zoneName, serverName, serverName, time.Now().Format("0601021504"))) if err != nil { return nil, nil, err } z[zoneName] = map[uint16][]dns.RR{ dns.TypeSOA: []dns.RR{soa}, } authRR, err := dns.NewRR(fmt.Sprintf("%s NS %s", zoneName, serverName)) if err != nil { return nil, nil, fmt.Errorf("Failed to create authority NS record: %v", err) } for host, records := range hosts { host = dns.Fqdn(host) if _, present := z[host]; !present { z[host] = make(map[uint16][]dns.RR) } for typeStr, v := range records { rType, present := dns.StringToType[strings.ToUpper(typeStr)] if !present { return nil, nil, fmt.Errorf("Invalid record type") } for _, presentation := range v { rr, err := dns.NewRR(fmt.Sprintf("%s %s %s", host, strings.ToUpper(typeStr), presentation)) if err != nil { return nil, nil, fmt.Errorf("Couldn't parse record: %v", err) } z[host][rType] = append(z[host][rType], rr) a[host] = &authRR } } } } return z, a, nil }
func TestPrivateText(t *testing.T) { dns.PrivateHandle("ISBN", TypeISBN, NewISBN) defer dns.PrivateHandleRemove(TypeISBN) rr, err := dns.NewRR(testrecord) if err != nil { t.Fatal(err) } if rr.String() != testrecord { t.Errorf("record string representation did not match original %#v != %#v", rr.String(), testrecord) } else { t.Log(rr.String()) } }