formatting and documentation
This commit is contained in:
parent
77348913dd
commit
98e4b33cb5
46
dns.go
46
dns.go
|
@ -99,36 +99,36 @@ func (h *RR_Header) String() string {
|
|||
}
|
||||
s = s + strconv.Itoa(int(h.Ttl)) + "\t"
|
||||
|
||||
if _, ok := Class_str[h.Class]; ok {
|
||||
s += Class_str[h.Class] + "\t"
|
||||
} else {
|
||||
s += "CLASS" + strconv.Itoa(int(h.Class)) + "\t"
|
||||
}
|
||||
if _, ok := Class_str[h.Class]; ok {
|
||||
s += Class_str[h.Class] + "\t"
|
||||
} else {
|
||||
s += "CLASS" + strconv.Itoa(int(h.Class)) + "\t"
|
||||
}
|
||||
|
||||
if _, ok := Rr_str[h.Rrtype]; ok {
|
||||
s += Rr_str[h.Rrtype] + "\t"
|
||||
} else {
|
||||
s += "TYPE" + strconv.Itoa(int(h.Rrtype)) + "\t"
|
||||
}
|
||||
if _, ok := Rr_str[h.Rrtype]; ok {
|
||||
s += Rr_str[h.Rrtype] + "\t"
|
||||
} else {
|
||||
s += "TYPE" + strconv.Itoa(int(h.Rrtype)) + "\t"
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// Return the number of labels in a domain name.
|
||||
func LabelCount(a string) (c uint8) {
|
||||
// walk the string and count the dots
|
||||
// except when it is escaped
|
||||
esc := false
|
||||
// walk the string and count the dots
|
||||
// except when it is escaped
|
||||
esc := false
|
||||
for _, v := range a {
|
||||
switch v {
|
||||
case '.':
|
||||
if esc {
|
||||
esc = !esc
|
||||
continue
|
||||
}
|
||||
c++
|
||||
case '\\':
|
||||
esc = true
|
||||
}
|
||||
switch v {
|
||||
case '.':
|
||||
if esc {
|
||||
esc = !esc
|
||||
continue
|
||||
}
|
||||
c++
|
||||
case '\\':
|
||||
esc = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
46
dnssec.go
46
dnssec.go
|
@ -1,7 +1,7 @@
|
|||
package dns
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"crypto"
|
||||
"crypto/md5"
|
||||
"crypto/sha1"
|
||||
"crypto/sha256"
|
||||
|
@ -57,7 +57,7 @@ type dnskeyWireFmt struct {
|
|||
Flags uint16
|
||||
Protocol uint8
|
||||
Algorithm uint8
|
||||
PublicKey string "base64"
|
||||
PublicKey string "base64"
|
||||
/* Nothing is left out */
|
||||
}
|
||||
|
||||
|
@ -157,8 +157,8 @@ func (s *RR_RRSIG) Sign(k PrivateKey, rrset RRset) bool {
|
|||
}
|
||||
// s.Inception and s.Expiration may be 0 (rollover etc.), the rest must be set
|
||||
if s.KeyTag == 0 || len(s.SignerName) == 0 || s.Algorithm == 0 {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
s.Hdr.Rrtype = TypeRRSIG
|
||||
s.Hdr.Name = rrset[0].Header().Name
|
||||
|
@ -167,11 +167,11 @@ func (s *RR_RRSIG) Sign(k PrivateKey, rrset RRset) bool {
|
|||
s.TypeCovered = rrset[0].Header().Rrtype
|
||||
s.TypeCovered = rrset[0].Header().Rrtype
|
||||
s.Labels = LabelCount(rrset[0].Header().Name)
|
||||
if strings.HasPrefix(rrset[0].Header().Name, "*") {
|
||||
s.Labels-- // wildcards, remove from label count
|
||||
}
|
||||
if strings.HasPrefix(rrset[0].Header().Name, "*") {
|
||||
s.Labels-- // wildcards, remove from label count
|
||||
}
|
||||
|
||||
sort.Sort(rrset)
|
||||
sort.Sort(rrset)
|
||||
|
||||
sigwire := new(rrsigWireFmt)
|
||||
sigwire.TypeCovered = s.TypeCovered
|
||||
|
@ -190,10 +190,10 @@ func (s *RR_RRSIG) Sign(k PrivateKey, rrset RRset) bool {
|
|||
return false
|
||||
}
|
||||
signdata = signdata[:n]
|
||||
wire := rawSignatureData(rrset, s)
|
||||
if wire == nil {
|
||||
return false
|
||||
}
|
||||
wire := rawSignatureData(rrset, s)
|
||||
if wire == nil {
|
||||
return false
|
||||
}
|
||||
signdata = append(signdata, wire...)
|
||||
|
||||
var signature []byte
|
||||
|
@ -269,8 +269,8 @@ func (s *RR_RRSIG) Verify(k *RR_DNSKEY, rrset RRset) bool {
|
|||
if r.Header().Rrtype != s.TypeCovered {
|
||||
return false
|
||||
}
|
||||
//wildcards!
|
||||
//if LabelCount(r.Header().Name) > s.Labels
|
||||
//wildcards!
|
||||
//if LabelCount(r.Header().Name) > s.Labels
|
||||
}
|
||||
sort.Sort(rrset)
|
||||
|
||||
|
@ -292,11 +292,11 @@ func (s *RR_RRSIG) Verify(k *RR_DNSKEY, rrset RRset) bool {
|
|||
return false
|
||||
}
|
||||
signeddata = signeddata[:n]
|
||||
wire := rawSignatureData(rrset, s)
|
||||
if wire == nil {
|
||||
return false
|
||||
}
|
||||
signeddata = append(signeddata, wire...)
|
||||
wire := rawSignatureData(rrset, s)
|
||||
if wire == nil {
|
||||
return false
|
||||
}
|
||||
signeddata = append(signeddata, wire...)
|
||||
|
||||
sigbuf := s.sigBuf() // Get the binary signature data
|
||||
|
||||
|
@ -424,7 +424,7 @@ func rawSignatureData(rrset RRset, s *RR_RRSIG) (buf []byte) {
|
|||
|
||||
}
|
||||
// 6.2. Canonical RR Form. (4) - wildcards
|
||||
// dont have to do anything
|
||||
// dont have to do anything
|
||||
|
||||
// 6.2. Canonical RR Form. (5) - origTTL
|
||||
ttl := h.Ttl
|
||||
|
@ -440,9 +440,9 @@ func rawSignatureData(rrset RRset, s *RR_RRSIG) (buf []byte) {
|
|||
if !ok1 {
|
||||
return nil
|
||||
}
|
||||
buf = append(buf, wire...)
|
||||
}
|
||||
return
|
||||
buf = append(buf, wire...)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Map for algorithm names.
|
||||
|
|
114
dnssec_test.go
114
dnssec_test.go
|
@ -2,27 +2,27 @@ package dns
|
|||
|
||||
import (
|
||||
"testing"
|
||||
"strings"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func TestSecure(t *testing.T) {
|
||||
soa := new(RR_SOA)
|
||||
soa := new(RR_SOA)
|
||||
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
|
||||
soa.Ns = "open.nlnetlabs.nl."
|
||||
soa.Mbox = "miekg.atoom.net."
|
||||
soa.Serial = 1293945905
|
||||
soa.Refresh = 14400
|
||||
soa.Retry = 3600
|
||||
soa.Expire = 604800
|
||||
soa.Minttl = 86400
|
||||
soa.Mbox = "miekg.atoom.net."
|
||||
soa.Serial = 1293945905
|
||||
soa.Refresh = 14400
|
||||
soa.Retry = 3600
|
||||
soa.Expire = 604800
|
||||
soa.Minttl = 86400
|
||||
|
||||
sig := new(RR_RRSIG)
|
||||
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
|
||||
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
|
||||
sig.TypeCovered = TypeSOA
|
||||
sig.Algorithm = AlgRSASHA256
|
||||
sig.Labels = 2
|
||||
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
|
||||
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
|
||||
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
|
||||
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
|
||||
sig.OrigTtl = 14400
|
||||
sig.KeyTag = 12051
|
||||
sig.SignerName = "miek.nl."
|
||||
|
@ -37,11 +37,11 @@ func TestSecure(t *testing.T) {
|
|||
key.Algorithm = AlgRSASHA256
|
||||
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
|
||||
|
||||
// It should validate. Period is checked seperately, so this will keep on working
|
||||
if ! sig.Verify(key, []RR{soa}) {
|
||||
t.Log("Failure to validate")
|
||||
t.Fail()
|
||||
}
|
||||
// It should validate. Period is checked seperately, so this will keep on working
|
||||
if !sig.Verify(key, []RR{soa}) {
|
||||
t.Log("Failure to validate")
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestSignature(t *testing.T) {
|
||||
|
@ -87,7 +87,7 @@ func TestSignVerify(t *testing.T) {
|
|||
|
||||
// With this key
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 14400
|
||||
|
@ -116,7 +116,7 @@ func TestSignVerify(t *testing.T) {
|
|||
if !sig.Verify(key, []RR{soa}) {
|
||||
t.Log("Failure to validate")
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestKeyGen(t *testing.T) {
|
||||
|
@ -128,7 +128,7 @@ func TestKeyGen(t *testing.T) {
|
|||
key.Flags = 256
|
||||
key.Protocol = 3
|
||||
key.Algorithm = AlgRSASHA256
|
||||
key.Generate(512)
|
||||
key.Generate(512)
|
||||
}
|
||||
|
||||
|
||||
|
@ -183,7 +183,7 @@ func TestDnskey(t *testing.T) {
|
|||
func TestTag(t *testing.T) {
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 3600
|
||||
key.Flags = 256
|
||||
|
@ -191,57 +191,57 @@ func TestTag(t *testing.T) {
|
|||
key.Algorithm = AlgRSASHA256
|
||||
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
|
||||
|
||||
tag := key.KeyTag()
|
||||
if tag != 12051 {
|
||||
t.Logf("%v\n", key)
|
||||
t.Logf("Wrong key tag: %d\n", tag)
|
||||
t.Fail()
|
||||
}
|
||||
tag := key.KeyTag()
|
||||
if tag != 12051 {
|
||||
t.Logf("%v\n", key)
|
||||
t.Logf("Wrong key tag: %d\n", tag)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestKeyGenRSA(t *testing.T) {
|
||||
|
||||
return // Tijdelijk uit TODO(mg)
|
||||
return // Tijdelijk uit TODO(mg)
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 3600
|
||||
key.Flags = 256
|
||||
key.Protocol = 3
|
||||
key.Algorithm = AlgRSASHA256
|
||||
length := 2048
|
||||
priv, _ := key.Generate(length)
|
||||
length := 2048
|
||||
priv, _ := key.Generate(length)
|
||||
|
||||
soa := new(RR_SOA)
|
||||
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
|
||||
soa.Ns = "open.nlnetlabs.nl."
|
||||
soa.Mbox = "miekg.atoom.net."
|
||||
soa.Serial = 1293945905
|
||||
soa.Refresh = 14400
|
||||
soa.Retry = 3600
|
||||
soa.Expire = 604800
|
||||
soa.Minttl = 86400
|
||||
soa := new(RR_SOA)
|
||||
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
|
||||
soa.Ns = "open.nlnetlabs.nl."
|
||||
soa.Mbox = "miekg.atoom.net."
|
||||
soa.Serial = 1293945905
|
||||
soa.Refresh = 14400
|
||||
soa.Retry = 3600
|
||||
soa.Expire = 604800
|
||||
soa.Minttl = 86400
|
||||
|
||||
sig := new(RR_RRSIG)
|
||||
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
|
||||
sig.TypeCovered = TypeSOA
|
||||
sig.Algorithm = AlgRSASHA256
|
||||
sig.Labels = 2
|
||||
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
|
||||
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
|
||||
sig.OrigTtl = 14400
|
||||
sig.KeyTag = key.KeyTag()
|
||||
sig.SignerName = "miek.nl."
|
||||
sig := new(RR_RRSIG)
|
||||
sig.Hdr = RR_Header{"miek.nl.", TypeRRSIG, ClassINET, 14400, 0}
|
||||
sig.TypeCovered = TypeSOA
|
||||
sig.Algorithm = AlgRSASHA256
|
||||
sig.Labels = 2
|
||||
sig.Expiration = 1296534305 // date -u '+%s' -d"2011-02-01 04:25:05"
|
||||
sig.Inception = 1293942305 // date -u '+%s' -d"2011-01-02 04:25:05"
|
||||
sig.OrigTtl = 14400
|
||||
sig.KeyTag = key.KeyTag()
|
||||
sig.SignerName = "miek.nl."
|
||||
|
||||
sig.Sign(priv, []RR{soa})
|
||||
//s := key.PrivateKeyString(priv)
|
||||
sig.Sign(priv, []RR{soa})
|
||||
//s := key.PrivateKeyString(priv)
|
||||
}
|
||||
|
||||
func TestKeyToDS(t *testing.T) {
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Name = "miek.nl"
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 3600
|
||||
key.Flags = 256
|
||||
|
@ -249,9 +249,9 @@ func TestKeyToDS(t *testing.T) {
|
|||
key.Algorithm = AlgRSASHA256
|
||||
key.PublicKey = "AwEAAcNEU67LJI5GEgF9QLNqLO1SMq1EdoQ6E9f85ha0k0ewQGCblyW2836GiVsm6k8Kr5ECIoMJ6fZWf3CQSQ9ycWfTyOHfmI3eQ/1Covhb2y4bAmL/07PhrL7ozWBW3wBfM335Ft9xjtXHPy7ztCbV9qZ4TVDTW/Iyg0PiwgoXVesz"
|
||||
|
||||
ds := key.ToDS(HashSHA1)
|
||||
if strings.ToUpper(ds.Digest) != "B5121BDB5B8D86D0CC5FFAFBAAABE26C3E20BAC1" {
|
||||
t.Logf("Wrong DS digest for Sha1\n%v\n", ds)
|
||||
t.Fail()
|
||||
}
|
||||
ds := key.ToDS(HashSHA1)
|
||||
if strings.ToUpper(ds.Digest) != "B5121BDB5B8D86D0CC5FFAFBAAABE26C3E20BAC1" {
|
||||
t.Logf("Wrong DS digest for Sha1\n%v\n", ds)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
|
42
edns.go
42
edns.go
|
@ -2,7 +2,7 @@ package dns
|
|||
|
||||
import (
|
||||
"strconv"
|
||||
"encoding/hex"
|
||||
"encoding/hex"
|
||||
)
|
||||
|
||||
// EDNS0 Options
|
||||
|
@ -61,14 +61,14 @@ func (rr *RR_OPT) String() string {
|
|||
switch o.Code {
|
||||
case OptionCodeNSID:
|
||||
s += "\n; NSID: " + o.Data
|
||||
h, e := hex.DecodeString(o.Data)
|
||||
var r string
|
||||
if e == nil {
|
||||
for _, c := range h {
|
||||
r += "(" + string(c) + ")"
|
||||
}
|
||||
s += " " + r
|
||||
}
|
||||
h, e := hex.DecodeString(o.Data)
|
||||
var r string
|
||||
if e == nil {
|
||||
for _, c := range h {
|
||||
r += "(" + string(c) + ")"
|
||||
}
|
||||
s += " " + r
|
||||
}
|
||||
}
|
||||
}
|
||||
return s
|
||||
|
@ -76,7 +76,7 @@ func (rr *RR_OPT) String() string {
|
|||
|
||||
// Get the EDNS version (always 0 currently).
|
||||
func (rr *RR_OPT) Version() uint8 {
|
||||
return 0
|
||||
return 0
|
||||
}
|
||||
|
||||
// Set the version of EDNS.
|
||||
|
@ -106,17 +106,17 @@ func (rr *RR_OPT) SetUDPSize(size uint16) {
|
|||
|
||||
// Get the DO bit.
|
||||
func (rr *RR_OPT) Do() bool {
|
||||
return byte(rr.Hdr.Ttl >> 8) &_DO == _DO
|
||||
return byte(rr.Hdr.Ttl>>8)&_DO == _DO
|
||||
}
|
||||
|
||||
// Set the DO bit
|
||||
// Set the DO bit.
|
||||
func (rr *RR_OPT) SetDo() {
|
||||
b1 := byte(rr.Hdr.Ttl >> 24)
|
||||
b2 := byte(rr.Hdr.Ttl >> 16)
|
||||
b3 := byte(rr.Hdr.Ttl >> 8)
|
||||
b4 := byte(rr.Hdr.Ttl)
|
||||
b3 |= _DO // Set it
|
||||
rr.Hdr.Ttl = uint32(b1)<<24 | uint32(b2)<<16 | uint32(b3)<<8 | uint32(b4)
|
||||
b1 := byte(rr.Hdr.Ttl >> 24)
|
||||
b2 := byte(rr.Hdr.Ttl >> 16)
|
||||
b3 := byte(rr.Hdr.Ttl >> 8)
|
||||
b4 := byte(rr.Hdr.Ttl)
|
||||
b3 |= _DO // Set it
|
||||
rr.Hdr.Ttl = uint32(b1)<<24 | uint32(b2)<<16 | uint32(b3)<<8 | uint32(b4)
|
||||
}
|
||||
|
||||
// Return the NSID as hex string.
|
||||
|
@ -126,7 +126,7 @@ func (rr *RR_OPT) Nsid() string {
|
|||
|
||||
// Set the NSID from a string which is represented as hex characters.
|
||||
func (rr *RR_OPT) SetNsid(hexnsid string) {
|
||||
rr.Option = make([]Option, 1) // TODO(mg) check length first?
|
||||
rr.Option[0].Code = OptionCodeNSID
|
||||
rr.Option[0].Data = hexnsid
|
||||
rr.Option = make([]Option, 1) // TODO(mg) check length first?
|
||||
rr.Option[0].Code = OptionCodeNSID
|
||||
rr.Option[0].Data = hexnsid
|
||||
}
|
||||
|
|
54
msg.go
54
msg.go
|
@ -90,7 +90,7 @@ var Rr_str = map[uint16]string{
|
|||
TypeAXFR: "AXFR", // Meta RR
|
||||
TypeIXFR: "IXFR", // Meta RR
|
||||
TypeALL: "ANY", // Meta RR
|
||||
TypeURI: "URI",
|
||||
TypeURI: "URI",
|
||||
TypeTA: "TA",
|
||||
TypeDLV: "DLV",
|
||||
}
|
||||
|
@ -158,28 +158,28 @@ func packDomainName(s string, msg []byte, off int) (off1 int, ok bool) {
|
|||
|
||||
// Emit sequence of counted strings, chopping at dots.
|
||||
begin := 0
|
||||
bs := []byte(s)
|
||||
ls := len(bs)
|
||||
bs := []byte(s)
|
||||
ls := len(bs)
|
||||
for i := 0; i < ls; i++ {
|
||||
if bs[i] == '\\' {
|
||||
for j := i; j < len(s)-1; j++ {
|
||||
bs[j] = bs[j+1]
|
||||
}
|
||||
ls--
|
||||
continue
|
||||
for j := i; j < len(s)-1; j++ {
|
||||
bs[j] = bs[j+1]
|
||||
}
|
||||
ls--
|
||||
continue
|
||||
}
|
||||
|
||||
if bs[i] == '.' {
|
||||
if i-begin >= 1<<6 { // top two bits of length must be clear
|
||||
return len(msg), false
|
||||
}
|
||||
msg[off] = byte(i - begin)
|
||||
off++
|
||||
for j := begin; j < i; j++ {
|
||||
msg[off] = bs[j]
|
||||
off++
|
||||
}
|
||||
begin = i + 1
|
||||
if i-begin >= 1<<6 { // top two bits of length must be clear
|
||||
return len(msg), false
|
||||
}
|
||||
msg[off] = byte(i - begin)
|
||||
off++
|
||||
for j := begin; j < i; j++ {
|
||||
msg[off] = bs[j]
|
||||
off++
|
||||
}
|
||||
begin = i + 1
|
||||
}
|
||||
}
|
||||
// Root label is special
|
||||
|
@ -224,15 +224,15 @@ Loop:
|
|||
if off+c > len(msg) {
|
||||
return "", len(msg), false
|
||||
}
|
||||
for j := off; j < off+c; j++ {
|
||||
if msg[j] == '.' {
|
||||
// literal dot, escape it
|
||||
s += "\\."
|
||||
} else {
|
||||
s += string(msg[j])
|
||||
}
|
||||
}
|
||||
s += "."
|
||||
for j := off; j < off+c; j++ {
|
||||
if msg[j] == '.' {
|
||||
// literal dot, escape it
|
||||
s += "\\."
|
||||
} else {
|
||||
s += string(msg[j])
|
||||
}
|
||||
}
|
||||
s += "."
|
||||
off += c
|
||||
case 0xC0:
|
||||
// pointer to somewhere else in msg.
|
||||
|
|
|
@ -95,7 +95,7 @@ func (res *Resolver) Query(q *Msg) (d *Msg, err os.Error) {
|
|||
}
|
||||
|
||||
// Start an AXFR, q should contain a message with the question
|
||||
// for an AXFR ("miek.nl" ANY AXFR. All incoming axfr snippets
|
||||
// for an AXFR: "miek.nl" ANY AXFR. All incoming axfr snippets
|
||||
// are returned on the channel m. The function closes the
|
||||
// channel to signal the end of the AXFR.
|
||||
func (res *Resolver) Axfr(q *Msg, m chan *Msg) {
|
||||
|
|
54
types.go
54
types.go
|
@ -65,8 +65,8 @@ const (
|
|||
TypeMAILB = 253
|
||||
TypeMAILA = 254
|
||||
TypeALL = 255
|
||||
// newly defined types
|
||||
TypeURI = 256
|
||||
// newly defined types
|
||||
TypeURI = 256
|
||||
|
||||
TypeTA = 32768
|
||||
TypeDLV = 32769
|
||||
|
@ -464,11 +464,11 @@ func (rr *RR_NSEC) Header() *RR_Header {
|
|||
func (rr *RR_NSEC) String() string {
|
||||
s := rr.Hdr.String() + rr.NextDomain
|
||||
for i := 0; i < len(rr.TypeBitMap); i++ {
|
||||
if _, ok := Rr_str[rr.TypeBitMap[i]]; ok {
|
||||
s += " " + Rr_str[rr.TypeBitMap[i]]
|
||||
} else {
|
||||
s += " " + "TYPE" + strconv.Itoa(int(rr.TypeBitMap[i]))
|
||||
}
|
||||
if _, ok := Rr_str[rr.TypeBitMap[i]]; ok {
|
||||
s += " " + Rr_str[rr.TypeBitMap[i]]
|
||||
} else {
|
||||
s += " " + "TYPE" + strconv.Itoa(int(rr.TypeBitMap[i]))
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
@ -605,11 +605,11 @@ func (rr *RR_NSEC3) String() string {
|
|||
" " + strings.ToUpper(rr.Salt) +
|
||||
" " + rr.NextDomain
|
||||
for i := 0; i < len(rr.TypeBitMap); i++ {
|
||||
if _, ok := Rr_str[rr.TypeBitMap[i]]; ok {
|
||||
s += " " + Rr_str[rr.TypeBitMap[i]]
|
||||
} else {
|
||||
s += " " + "TYPE" + strconv.Itoa(int(rr.TypeBitMap[i]))
|
||||
}
|
||||
if _, ok := Rr_str[rr.TypeBitMap[i]]; ok {
|
||||
s += " " + Rr_str[rr.TypeBitMap[i]]
|
||||
} else {
|
||||
s += " " + "TYPE" + strconv.Itoa(int(rr.TypeBitMap[i]))
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
@ -636,7 +636,7 @@ func (rr *RR_NSEC3PARAM) String() string {
|
|||
return s
|
||||
}
|
||||
|
||||
// See RFC 4408
|
||||
// See RFC 4408.
|
||||
type RR_SPF struct {
|
||||
Hdr RR_Header
|
||||
Txt string
|
||||
|
@ -674,25 +674,25 @@ func (rr *RR_TKEY) String() string {
|
|||
|
||||
// Unknown RR representation
|
||||
type RR_RFC3597 struct {
|
||||
Hdr RR_Header
|
||||
Rdata string "hex"
|
||||
Hdr RR_Header
|
||||
Rdata string "hex"
|
||||
}
|
||||
|
||||
func (rr *RR_RFC3597) Header() *RR_Header {
|
||||
return &rr.Hdr
|
||||
return &rr.Hdr
|
||||
}
|
||||
|
||||
func (rr *RR_RFC3597) String() string {
|
||||
s := rr.Hdr.String()
|
||||
s += "\\# " + strconv.Itoa(len(rr.Rdata)/2) + " " + rr.Rdata
|
||||
return s
|
||||
s := rr.Hdr.String()
|
||||
s += "\\# " + strconv.Itoa(len(rr.Rdata)/2) + " " + rr.Rdata
|
||||
return s
|
||||
}
|
||||
|
||||
type RR_URI struct {
|
||||
Hdr RR_Header
|
||||
Priority uint16
|
||||
Weight uint16
|
||||
Target string
|
||||
Hdr RR_Header
|
||||
Priority uint16
|
||||
Weight uint16
|
||||
Target string
|
||||
}
|
||||
|
||||
func (rr *RR_URI) Header() *RR_Header {
|
||||
|
@ -700,9 +700,9 @@ func (rr *RR_URI) Header() *RR_Header {
|
|||
}
|
||||
|
||||
func (rr *RR_URI) String() string {
|
||||
return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) +
|
||||
" " + strconv.Itoa(int(rr.Weight)) +
|
||||
" " + rr.Target
|
||||
return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) +
|
||||
" " + strconv.Itoa(int(rr.Weight)) +
|
||||
" " + rr.Target
|
||||
}
|
||||
|
||||
// Translate the RRSIG's incep. and expir. time to the correct date.
|
||||
|
@ -754,7 +754,7 @@ var rr_mk = map[int]func() RR{
|
|||
TypeNSEC3PARAM: func() RR { return new(RR_NSEC3PARAM) },
|
||||
TypeTKEY: func() RR { return new(RR_TKEY) },
|
||||
TypeTSIG: func() RR { return new(RR_TSIG) },
|
||||
TypeURI: func() RR { return new(RR_URI) },
|
||||
TypeURI: func() RR { return new(RR_URI) },
|
||||
TypeTA: func() RR { return new(RR_TA) },
|
||||
TypeDLV: func() RR { return new(RR_DLV) },
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue