Actually copy the RR for DNSSEC validation.
This is needed because we need to fiddle with the TTL and sometimes even need to lowercase the rdata. We dont want this to propagate to the original RRs
This commit is contained in:
parent
01442e58af
commit
e6fca0be3f
11
dns.go
11
dns.go
|
@ -105,8 +105,8 @@ type RR interface {
|
|||
String() string
|
||||
// Len returns the length (in octects) of the uncompressed RR in wire format.
|
||||
Len() int
|
||||
// Copy returns a copy of the RR
|
||||
// Copy() RR
|
||||
// Copy returns a copy of the RR
|
||||
Copy() RR
|
||||
}
|
||||
|
||||
// Exchange is used in (asynchronous) communication with the resolver. If the
|
||||
|
@ -135,7 +135,7 @@ func (h *RR_Header) Header() *RR_Header {
|
|||
return h
|
||||
}
|
||||
|
||||
func (h *RR_Header) Copy() *RR_Header {
|
||||
func (h *RR_Header) CopyHeader() *RR_Header {
|
||||
r := new(RR_Header)
|
||||
r.Name = h.Name
|
||||
r.Rrtype = h.Rrtype
|
||||
|
@ -145,6 +145,11 @@ func (h *RR_Header) Copy() *RR_Header {
|
|||
return r
|
||||
}
|
||||
|
||||
// Just to imlement the RR interface
|
||||
func (h *RR_Header) Copy() RR {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *RR_Header) String() string {
|
||||
var s string
|
||||
|
||||
|
|
44
dnssec.go
44
dnssec.go
|
@ -637,85 +637,53 @@ func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
|||
func rawSignatureData(rrset []RR, s *RR_RRSIG) (buf []byte) {
|
||||
wires := make(wireSlice, len(rrset))
|
||||
for i, r := range rrset {
|
||||
h := r.Header().Copy()
|
||||
h.Ttl = s.OrigTtl
|
||||
labels := SplitLabels(h.Name)
|
||||
r1 := r.Copy()
|
||||
r1.Header().Ttl = s.OrigTtl
|
||||
labels := SplitLabels(r1.Header().Name)
|
||||
// 6.2. Canonical RR Form. (4) - wildcards
|
||||
if len(labels) > int(s.Labels) {
|
||||
// Wildcard
|
||||
h.Name = "*." + strings.Join(labels[len(labels)-int(s.Labels):], ".") + "."
|
||||
r1.Header().Name = "*." + strings.Join(labels[len(labels)-int(s.Labels):], ".") + "."
|
||||
}
|
||||
// RFC 4034: 6.2. Canonical RR Form. (2) - domain name to lowercase
|
||||
h.Name = strings.ToLower(h.Name)
|
||||
r1.Header().Name = strings.ToLower(r1.Header().Name)
|
||||
// 6.2. Canonical RR Form. (3) - domain rdata to lowercase.
|
||||
// NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR,
|
||||
// HINFO, MINFO, MX, RP, AFSDB, RT, SIG, PX, NXT, NAPTR, KX,
|
||||
// SRV, DNAME, A6
|
||||
// TODO(mg): copy the rdata here?
|
||||
switch x := r.(type) {
|
||||
case *RR_NS:
|
||||
p := x.Ns
|
||||
defer func() { x.Ns = p }()
|
||||
x.Ns = strings.ToLower(x.Ns)
|
||||
case *RR_CNAME:
|
||||
p := x.Target
|
||||
defer func() { x.Target = p }()
|
||||
x.Target = strings.ToLower(x.Target)
|
||||
case *RR_SOA:
|
||||
x.Hdr = *h // NO NO NO need to copy each RR
|
||||
p := x.Ns
|
||||
q := x.Mbox
|
||||
defer func() { x.Ns = p }()
|
||||
defer func() { x.Mbox = q }()
|
||||
x.Ns = strings.ToLower(x.Ns)
|
||||
x.Mbox = strings.ToLower(x.Mbox)
|
||||
case *RR_MB:
|
||||
p := x.Mb
|
||||
defer func() { x.Mb = p }()
|
||||
x.Mb = strings.ToLower(x.Mb)
|
||||
case *RR_MG:
|
||||
p := x.Mg
|
||||
defer func() { x.Mg = p }()
|
||||
x.Mg = strings.ToLower(x.Mg)
|
||||
case *RR_MR:
|
||||
p := x.Mr
|
||||
defer func() { x.Mr = p }()
|
||||
x.Mr = strings.ToLower(x.Mr)
|
||||
case *RR_PTR:
|
||||
p := x.Ptr
|
||||
defer func() { x.Ptr = p }()
|
||||
x.Ptr = strings.ToLower(x.Ptr)
|
||||
case *RR_MINFO:
|
||||
p := x.Rmail
|
||||
q := x.Email
|
||||
defer func() { x.Rmail = p }()
|
||||
defer func() { x.Email = q }()
|
||||
x.Rmail = strings.ToLower(x.Rmail)
|
||||
x.Email = strings.ToLower(x.Email)
|
||||
case *RR_MX:
|
||||
p := x.Mx
|
||||
defer func() { x.Mx = p }()
|
||||
x.Mx = strings.ToLower(x.Mx)
|
||||
case *RR_NAPTR:
|
||||
p := x.Replacement
|
||||
defer func() { x.Replacement = p }()
|
||||
x.Replacement = strings.ToLower(x.Replacement)
|
||||
case *RR_KX:
|
||||
p := x.Exchanger
|
||||
defer func() { x.Exchanger = p }()
|
||||
x.Exchanger = strings.ToLower(x.Exchanger)
|
||||
case *RR_SRV:
|
||||
p := x.Target
|
||||
defer func() { x.Target = p }()
|
||||
x.Target = strings.ToLower(x.Target)
|
||||
case *RR_DNAME:
|
||||
p := x.Target
|
||||
defer func() { x.Target = p }()
|
||||
x.Target = strings.ToLower(x.Target)
|
||||
}
|
||||
// 6.2. Canonical RR Form. (5) - origTTL
|
||||
wire := make([]byte, r.Len()*2)
|
||||
off, ok1 := packRR(r, wire, 0, nil, false)
|
||||
off, ok1 := packRR(r1, wire, 0, nil, false)
|
||||
if !ok1 {
|
||||
return nil
|
||||
}
|
||||
|
|
4
edns.go
4
edns.go
|
@ -83,8 +83,8 @@ func (rr *RR_OPT) Len() int {
|
|||
return l
|
||||
}
|
||||
|
||||
func (rr *RR_OPT) Copy() *RR_OPT {
|
||||
return &RR_OPT{*rr.Hdr.Copy(), rr.Option}
|
||||
func (rr *RR_OPT) Copy() RR {
|
||||
return &RR_OPT{*rr.Hdr.CopyHeader(), rr.Option}
|
||||
}
|
||||
|
||||
// Version returns the EDNS version used. Only zero is defined.
|
||||
|
|
4
tsig.go
4
tsig.go
|
@ -110,8 +110,8 @@ func (rr *RR_TSIG) Len() int {
|
|||
4 + len(rr.MAC)/2 + 1 + 6 + len(rr.OtherData)/2 + 1
|
||||
}
|
||||
|
||||
func (rr *RR_TSIG) Copy() *RR_TSIG {
|
||||
return &RR_TSIG{*rr.Hdr.Copy(), rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData}
|
||||
func (rr *RR_TSIG) Copy() RR {
|
||||
return &RR_TSIG{*rr.Hdr.CopyHeader(), rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData}
|
||||
}
|
||||
|
||||
// The following values must be put in wireformat, so that the MAC can be calculated.
|
||||
|
|
172
types.go
172
types.go
|
@ -182,6 +182,10 @@ func (rr *RR_ANY) Len() int {
|
|||
return rr.Hdr.Len()
|
||||
}
|
||||
|
||||
func (rr *RR_ANY) Copy() RR {
|
||||
return &RR_ANY{*rr.Hdr.CopyHeader()}
|
||||
}
|
||||
|
||||
type RR_CNAME struct {
|
||||
Hdr RR_Header
|
||||
Target string `dns:"cdomain-name"`
|
||||
|
@ -200,8 +204,8 @@ func (rr *RR_CNAME) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_CNAME) Copy() *RR_CNAME {
|
||||
return &RR_CNAME{*rr.Hdr.Copy(), rr.Target}
|
||||
func (rr *RR_CNAME) Copy() RR {
|
||||
return &RR_CNAME{*rr.Hdr.CopyHeader(), rr.Target}
|
||||
}
|
||||
|
||||
type RR_HINFO struct {
|
||||
|
@ -222,8 +226,8 @@ func (rr *RR_HINFO) Len() int {
|
|||
return rr.Hdr.Len() + len(rr.Cpu) + len(rr.Os)
|
||||
}
|
||||
|
||||
func (rr *RR_HINFO) Copy() *RR_HINFO {
|
||||
return &RR_HINFO{*rr.Hdr.Copy(), rr.Cpu, rr.Os}
|
||||
func (rr *RR_HINFO) Copy() RR {
|
||||
return &RR_HINFO{*rr.Hdr.CopyHeader(), rr.Cpu, rr.Os}
|
||||
}
|
||||
|
||||
type RR_MB struct {
|
||||
|
@ -244,8 +248,8 @@ func (rr *RR_MB) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_MB) Copy() *RR_MB {
|
||||
return &RR_MB{*rr.Hdr.Copy(), rr.Mb}
|
||||
func (rr *RR_MB) Copy() RR {
|
||||
return &RR_MB{*rr.Hdr.CopyHeader(), rr.Mb}
|
||||
}
|
||||
|
||||
type RR_MG struct {
|
||||
|
@ -266,8 +270,8 @@ func (rr *RR_MG) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_MG) Copy() *RR_MG {
|
||||
return &RR_MG{*rr.Hdr.Copy(), rr.Mg}
|
||||
func (rr *RR_MG) Copy() RR {
|
||||
return &RR_MG{*rr.Hdr.CopyHeader(), rr.Mg}
|
||||
}
|
||||
|
||||
type RR_MINFO struct {
|
||||
|
@ -290,8 +294,8 @@ func (rr *RR_MINFO) Len() int {
|
|||
return rr.Hdr.Len() + l + n
|
||||
}
|
||||
|
||||
func (rr *RR_MINFO) Copy() *RR_MINFO {
|
||||
return &RR_MINFO{*rr.Hdr.Copy(), rr.Rmail, rr.Email}
|
||||
func (rr *RR_MINFO) Copy() RR {
|
||||
return &RR_MINFO{*rr.Hdr.CopyHeader(), rr.Rmail, rr.Email}
|
||||
}
|
||||
|
||||
type RR_MR struct {
|
||||
|
@ -312,8 +316,8 @@ func (rr *RR_MR) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_MR) Copy() *RR_MR {
|
||||
return &RR_MR{*rr.Hdr.Copy(), rr.Mr}
|
||||
func (rr *RR_MR) Copy() RR {
|
||||
return &RR_MR{*rr.Hdr.CopyHeader(), rr.Mr}
|
||||
}
|
||||
|
||||
type RR_MF struct {
|
||||
|
@ -333,8 +337,8 @@ func (rr *RR_MF) Len() int {
|
|||
return rr.Hdr.Len() + len(rr.Mf) + 1
|
||||
}
|
||||
|
||||
func (rr *RR_MF) Copy() *RR_MF {
|
||||
return &RR_MF{*rr.Hdr.Copy(), rr.Mf}
|
||||
func (rr *RR_MF) Copy() RR {
|
||||
return &RR_MF{*rr.Hdr.CopyHeader(), rr.Mf}
|
||||
}
|
||||
|
||||
type RR_MD struct {
|
||||
|
@ -354,8 +358,8 @@ func (rr *RR_MD) Len() int {
|
|||
return rr.Hdr.Len() + len(rr.Md) + 1
|
||||
}
|
||||
|
||||
func (rr *RR_MD) Copy() *RR_MD {
|
||||
return &RR_MD{*rr.Hdr.Copy(), rr.Md}
|
||||
func (rr *RR_MD) Copy() RR {
|
||||
return &RR_MD{*rr.Hdr.CopyHeader(), rr.Md}
|
||||
}
|
||||
|
||||
type RR_MX struct {
|
||||
|
@ -377,8 +381,8 @@ func (rr *RR_MX) Len() int {
|
|||
return rr.Hdr.Len() + l + 2
|
||||
}
|
||||
|
||||
func (rr *RR_MX) Copy() *RR_MX {
|
||||
return &RR_MX{*rr.Hdr.Copy(), rr.Pref, rr.Mx}
|
||||
func (rr *RR_MX) Copy() RR {
|
||||
return &RR_MX{*rr.Hdr.CopyHeader(), rr.Pref, rr.Mx}
|
||||
}
|
||||
|
||||
type RR_AFSDB struct {
|
||||
|
@ -400,8 +404,8 @@ func (rr *RR_AFSDB) Len() int {
|
|||
return rr.Hdr.Len() + l + 2
|
||||
}
|
||||
|
||||
func (rr *RR_AFSDB) Copy() *RR_AFSDB {
|
||||
return &RR_AFSDB{*rr.Hdr.Copy(), rr.Subtype, rr.Hostname}
|
||||
func (rr *RR_AFSDB) Copy() RR {
|
||||
return &RR_AFSDB{*rr.Hdr.CopyHeader(), rr.Subtype, rr.Hostname}
|
||||
}
|
||||
|
||||
type RR_NS struct {
|
||||
|
@ -422,8 +426,8 @@ func (rr *RR_NS) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_NS) Copy() *RR_NS {
|
||||
return &RR_NS{*rr.Hdr.Copy(), rr.Ns}
|
||||
func (rr *RR_NS) Copy() RR {
|
||||
return &RR_NS{*rr.Hdr.CopyHeader(), rr.Ns}
|
||||
}
|
||||
|
||||
type RR_PTR struct {
|
||||
|
@ -444,8 +448,8 @@ func (rr *RR_PTR) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_PTR) Copy() *RR_PTR {
|
||||
return &RR_PTR{*rr.Hdr.Copy(), rr.Ptr}
|
||||
func (rr *RR_PTR) Copy() RR {
|
||||
return &RR_PTR{*rr.Hdr.CopyHeader(), rr.Ptr}
|
||||
}
|
||||
|
||||
type RR_RP struct {
|
||||
|
@ -466,8 +470,8 @@ func (rr *RR_RP) Len() int {
|
|||
return rr.Hdr.Len() + len(rr.Mbox) + 1 + len(rr.Txt) + 1
|
||||
}
|
||||
|
||||
func (rr *RR_RP) Copy() *RR_RP {
|
||||
return &RR_RP{*rr.Hdr.Copy(), rr.Mbox, rr.Txt}
|
||||
func (rr *RR_RP) Copy() RR {
|
||||
return &RR_RP{*rr.Hdr.CopyHeader(), rr.Mbox, rr.Txt}
|
||||
}
|
||||
|
||||
type RR_SOA struct {
|
||||
|
@ -500,8 +504,8 @@ func (rr *RR_SOA) Len() int {
|
|||
return rr.Hdr.Len() + l + n + 20
|
||||
}
|
||||
|
||||
func (rr *RR_SOA) Copy() *RR_SOA {
|
||||
return &RR_SOA{*rr.Hdr.Copy(), rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl}
|
||||
func (rr *RR_SOA) Copy() RR {
|
||||
return &RR_SOA{*rr.Hdr.CopyHeader(), rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl}
|
||||
}
|
||||
|
||||
type RR_TXT struct {
|
||||
|
@ -533,8 +537,8 @@ func (rr *RR_TXT) Len() int {
|
|||
return l
|
||||
}
|
||||
|
||||
func (rr *RR_TXT) Copy() *RR_TXT {
|
||||
return &RR_TXT{*rr.Hdr.Copy(), rr.Txt}
|
||||
func (rr *RR_TXT) Copy() RR {
|
||||
return &RR_TXT{*rr.Hdr.CopyHeader(), rr.Txt}
|
||||
}
|
||||
|
||||
type RR_SPF struct {
|
||||
|
@ -566,8 +570,8 @@ func (rr *RR_SPF) Len() int {
|
|||
return l
|
||||
}
|
||||
|
||||
func (rr *RR_SPF) Copy() *RR_SPF {
|
||||
return &RR_SPF{*rr.Hdr.Copy(), rr.Txt}
|
||||
func (rr *RR_SPF) Copy() RR {
|
||||
return &RR_SPF{*rr.Hdr.CopyHeader(), rr.Txt}
|
||||
}
|
||||
|
||||
type RR_SRV struct {
|
||||
|
@ -594,8 +598,8 @@ func (rr *RR_SRV) Len() int {
|
|||
return rr.Hdr.Len() + l + 6
|
||||
}
|
||||
|
||||
func (rr *RR_SRV) Copy() *RR_SRV {
|
||||
return &RR_SRV{*rr.Hdr.Copy(), rr.Priority, rr.Weight, rr.Port, rr.Target}
|
||||
func (rr *RR_SRV) Copy() RR {
|
||||
return &RR_SRV{*rr.Hdr.CopyHeader(), rr.Priority, rr.Weight, rr.Port, rr.Target}
|
||||
}
|
||||
|
||||
type RR_NAPTR struct {
|
||||
|
@ -627,8 +631,8 @@ func (rr *RR_NAPTR) Len() int {
|
|||
len(rr.Regexp) + len(rr.Replacement) + 1
|
||||
}
|
||||
|
||||
func (rr *RR_NAPTR) Copy() *RR_NAPTR {
|
||||
return &RR_NAPTR{*rr.Hdr.Copy(), rr.Order, rr.Pref, rr.Flags, rr.Service, rr.Regexp, rr.Replacement}
|
||||
func (rr *RR_NAPTR) Copy() RR {
|
||||
return &RR_NAPTR{*rr.Hdr.CopyHeader(), rr.Order, rr.Pref, rr.Flags, rr.Service, rr.Regexp, rr.Replacement}
|
||||
}
|
||||
|
||||
// See RFC 4398.
|
||||
|
@ -656,8 +660,8 @@ func (rr *RR_CERT) Len() int {
|
|||
base64.StdEncoding.DecodedLen(len(rr.Certificate))
|
||||
}
|
||||
|
||||
func (rr *RR_CERT) Copy() *RR_CERT {
|
||||
return &RR_CERT{*rr.Hdr.Copy(), rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
|
||||
func (rr *RR_CERT) Copy() RR {
|
||||
return &RR_CERT{*rr.Hdr.CopyHeader(), rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
|
||||
}
|
||||
|
||||
// See RFC 2672.
|
||||
|
@ -679,8 +683,8 @@ func (rr *RR_DNAME) Len() int {
|
|||
return rr.Hdr.Len() + l
|
||||
}
|
||||
|
||||
func (rr *RR_DNAME) Copy() *RR_DNAME {
|
||||
return &RR_DNAME{*rr.Hdr.Copy(), rr.Target}
|
||||
func (rr *RR_DNAME) Copy() RR {
|
||||
return &RR_DNAME{*rr.Hdr.CopyHeader(), rr.Target}
|
||||
}
|
||||
|
||||
type RR_A struct {
|
||||
|
@ -700,8 +704,8 @@ func (rr *RR_A) Len() int {
|
|||
return rr.Hdr.Len() + net.IPv4len
|
||||
}
|
||||
|
||||
func (rr *RR_A) Copy() *RR_A {
|
||||
return &RR_A{*rr.Hdr.Copy(), rr.A}
|
||||
func (rr *RR_A) Copy() RR {
|
||||
return &RR_A{*rr.Hdr.CopyHeader(), rr.A}
|
||||
}
|
||||
|
||||
type RR_AAAA struct {
|
||||
|
@ -721,8 +725,8 @@ func (rr *RR_AAAA) Len() int {
|
|||
return rr.Hdr.Len() + net.IPv6len
|
||||
}
|
||||
|
||||
func (rr *RR_AAAA) Copy() *RR_AAAA {
|
||||
return &RR_AAAA{*rr.Hdr.Copy(), rr.AAAA}
|
||||
func (rr *RR_AAAA) Copy() RR {
|
||||
return &RR_AAAA{*rr.Hdr.CopyHeader(), rr.AAAA}
|
||||
}
|
||||
|
||||
type RR_LOC struct {
|
||||
|
@ -789,8 +793,8 @@ func (rr *RR_LOC) Len() int {
|
|||
return rr.Hdr.Len() + 4 + 12
|
||||
}
|
||||
|
||||
func (rr *RR_LOC) Copy() *RR_LOC {
|
||||
return &RR_LOC{*rr.Hdr.Copy(), rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude}
|
||||
func (rr *RR_LOC) Copy() RR {
|
||||
return &RR_LOC{*rr.Hdr.CopyHeader(), rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude}
|
||||
}
|
||||
|
||||
type RR_RRSIG struct {
|
||||
|
@ -827,8 +831,8 @@ func (rr *RR_RRSIG) Len() int {
|
|||
base64.StdEncoding.DecodedLen(len(rr.Signature)) + 18
|
||||
}
|
||||
|
||||
func (rr *RR_RRSIG) Copy() *RR_RRSIG {
|
||||
return &RR_RRSIG{*rr.Hdr.Copy(), rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature}
|
||||
func (rr *RR_RRSIG) Copy() RR {
|
||||
return &RR_RRSIG{*rr.Hdr.CopyHeader(), rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature}
|
||||
}
|
||||
|
||||
type RR_NSEC struct {
|
||||
|
@ -859,8 +863,8 @@ func (rr *RR_NSEC) Len() int {
|
|||
// TODO: +32 is max type bitmap
|
||||
}
|
||||
|
||||
func (rr *RR_NSEC) Copy() *RR_NSEC {
|
||||
return &RR_NSEC{*rr.Hdr.Copy(), rr.NextDomain, rr.TypeBitMap}
|
||||
func (rr *RR_NSEC) Copy() RR {
|
||||
return &RR_NSEC{*rr.Hdr.CopyHeader(), rr.NextDomain, rr.TypeBitMap}
|
||||
}
|
||||
|
||||
type RR_DS struct {
|
||||
|
@ -886,8 +890,8 @@ func (rr *RR_DS) Len() int {
|
|||
return rr.Hdr.Len() + 4 + len(rr.Digest)/2
|
||||
}
|
||||
|
||||
func (rr *RR_DS) Copy() *RR_DS {
|
||||
return &RR_DS{*rr.Hdr.Copy(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
|
||||
func (rr *RR_DS) Copy() RR {
|
||||
return &RR_DS{*rr.Hdr.CopyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
|
||||
}
|
||||
|
||||
type RR_DLV struct {
|
||||
|
@ -913,8 +917,8 @@ func (rr *RR_DLV) Len() int {
|
|||
return rr.Hdr.Len() + 4 + len(rr.Digest)/2
|
||||
}
|
||||
|
||||
func (rr *RR_DLV) Copy() *RR_DLV {
|
||||
return &RR_DLV{*rr.Hdr.Copy(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
|
||||
func (rr *RR_DLV) Copy() RR {
|
||||
return &RR_DLV{*rr.Hdr.CopyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
|
||||
}
|
||||
|
||||
type RR_KX struct {
|
||||
|
@ -936,8 +940,8 @@ func (rr *RR_KX) Len() int {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (rr *RR_KX) Copy() *RR_KX {
|
||||
return &RR_KX{*rr.Hdr.Copy(), rr.Pref, rr.Exchanger}
|
||||
func (rr *RR_KX) Copy() RR {
|
||||
return &RR_KX{*rr.Hdr.CopyHeader(), rr.Pref, rr.Exchanger}
|
||||
}
|
||||
|
||||
type RR_TA struct {
|
||||
|
@ -963,8 +967,8 @@ func (rr *RR_TA) Len() int {
|
|||
return rr.Hdr.Len() + 4 + len(rr.Digest)/2
|
||||
}
|
||||
|
||||
func (rr *RR_TA) Copy() *RR_TA {
|
||||
return &RR_TA{*rr.Hdr.Copy(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
|
||||
func (rr *RR_TA) Copy() RR {
|
||||
return &RR_TA{*rr.Hdr.CopyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
|
||||
}
|
||||
|
||||
type RR_TALINK struct {
|
||||
|
@ -986,8 +990,8 @@ func (rr *RR_TALINK) Len() int {
|
|||
return rr.Hdr.Len() + len(rr.PreviousName) + len(rr.NextName) + 2
|
||||
}
|
||||
|
||||
func (rr *RR_TALINK) Copy() *RR_TALINK {
|
||||
return &RR_TALINK{*rr.Hdr.Copy(), rr.PreviousName, rr.NextName}
|
||||
func (rr *RR_TALINK) Copy() RR {
|
||||
return &RR_TALINK{*rr.Hdr.CopyHeader(), rr.PreviousName, rr.NextName}
|
||||
}
|
||||
|
||||
type RR_SSHFP struct {
|
||||
|
@ -1011,8 +1015,8 @@ func (rr *RR_SSHFP) Len() int {
|
|||
return rr.Hdr.Len() + 2 + len(rr.FingerPrint)/2
|
||||
}
|
||||
|
||||
func (rr *RR_SSHFP) Copy() *RR_SSHFP {
|
||||
return &RR_SSHFP{*rr.Hdr.Copy(), rr.Algorithm, rr.Type, rr.FingerPrint}
|
||||
func (rr *RR_SSHFP) Copy() RR {
|
||||
return &RR_SSHFP{*rr.Hdr.CopyHeader(), rr.Algorithm, rr.Type, rr.FingerPrint}
|
||||
}
|
||||
|
||||
type RR_IPSECKEY struct {
|
||||
|
@ -1041,8 +1045,8 @@ func (rr *RR_IPSECKEY) Len() int {
|
|||
base64.StdEncoding.DecodedLen(len(rr.PublicKey))
|
||||
}
|
||||
|
||||
func (rr *RR_IPSECKEY) Copy() *RR_IPSECKEY {
|
||||
return &RR_IPSECKEY{*rr.Hdr.Copy(), rr.Precedence, rr.GatewayType, rr.Algorithm, rr.Gateway, rr.PublicKey}
|
||||
func (rr *RR_IPSECKEY) Copy() RR {
|
||||
return &RR_IPSECKEY{*rr.Hdr.CopyHeader(), rr.Precedence, rr.GatewayType, rr.Algorithm, rr.Gateway, rr.PublicKey}
|
||||
}
|
||||
|
||||
type RR_DNSKEY struct {
|
||||
|
@ -1069,8 +1073,8 @@ func (rr *RR_DNSKEY) Len() int {
|
|||
base64.StdEncoding.DecodedLen(len(rr.PublicKey))
|
||||
}
|
||||
|
||||
func (rr *RR_DNSKEY) Copy() *RR_DNSKEY {
|
||||
return &RR_DNSKEY{*rr.Hdr.Copy(), rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey}
|
||||
func (rr *RR_DNSKEY) Copy() RR {
|
||||
return &RR_DNSKEY{*rr.Hdr.CopyHeader(), rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey}
|
||||
}
|
||||
|
||||
type RR_NSEC3 struct {
|
||||
|
@ -1111,8 +1115,8 @@ func (rr *RR_NSEC3) Len() int {
|
|||
// TODO: +32 is MAX type bit map
|
||||
}
|
||||
|
||||
func (rr *RR_NSEC3) Copy() *RR_NSEC3 {
|
||||
return &RR_NSEC3{*rr.Hdr.Copy(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, rr.TypeBitMap}
|
||||
func (rr *RR_NSEC3) Copy() RR {
|
||||
return &RR_NSEC3{*rr.Hdr.CopyHeader(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, rr.TypeBitMap}
|
||||
}
|
||||
|
||||
type RR_NSEC3PARAM struct {
|
||||
|
@ -1141,8 +1145,8 @@ func (rr *RR_NSEC3PARAM) Len() int {
|
|||
return rr.Hdr.Len() + 2 + 4 + 1 + len(rr.Salt)/2
|
||||
}
|
||||
|
||||
func (rr *RR_NSEC3PARAM) Copy() *RR_NSEC3PARAM {
|
||||
return &RR_NSEC3PARAM{*rr.Hdr.Copy(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt}
|
||||
func (rr *RR_NSEC3PARAM) Copy() RR {
|
||||
return &RR_NSEC3PARAM{*rr.Hdr.CopyHeader(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt}
|
||||
}
|
||||
|
||||
type RR_TKEY struct {
|
||||
|
@ -1172,8 +1176,8 @@ func (rr *RR_TKEY) Len() int {
|
|||
len(rr.Key) + 2 + len(rr.OtherData)
|
||||
}
|
||||
|
||||
func (rr *RR_TKEY) Copy() *RR_TKEY {
|
||||
return &RR_TKEY{*rr.Hdr.Copy(), rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData}
|
||||
func (rr *RR_TKEY) Copy() RR {
|
||||
return &RR_TKEY{*rr.Hdr.CopyHeader(), rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData}
|
||||
}
|
||||
|
||||
// Unknown RR representation
|
||||
|
@ -1196,8 +1200,8 @@ func (rr *RR_RFC3597) Len() int {
|
|||
return rr.Hdr.Len() + len(rr.Rdata)/2
|
||||
}
|
||||
|
||||
func (rr *RR_RFC3597) Copy() *RR_RFC3597 {
|
||||
return &RR_RFC3597{*rr.Hdr.Copy(), rr.Rdata}
|
||||
func (rr *RR_RFC3597) Copy() RR {
|
||||
return &RR_RFC3597{*rr.Hdr.CopyHeader(), rr.Rdata}
|
||||
}
|
||||
|
||||
type RR_URI struct {
|
||||
|
@ -1221,8 +1225,8 @@ func (rr *RR_URI) Len() int {
|
|||
return rr.Hdr.Len() + 4 + len(rr.Target) + 1
|
||||
}
|
||||
|
||||
func (rr *RR_URI) Copy() *RR_URI {
|
||||
return &RR_URI{*rr.Hdr.Copy(), rr.Weight, rr.Priority, rr.Target}
|
||||
func (rr *RR_URI) Copy() RR {
|
||||
return &RR_URI{*rr.Hdr.CopyHeader(), rr.Weight, rr.Priority, rr.Target}
|
||||
}
|
||||
|
||||
type RR_DHCID struct {
|
||||
|
@ -1243,8 +1247,8 @@ func (rr *RR_DHCID) Len() int {
|
|||
base64.StdEncoding.DecodedLen(len(rr.Digest))
|
||||
}
|
||||
|
||||
func (rr *RR_DHCID) Copy() *RR_DHCID {
|
||||
return &RR_DHCID{*rr.Hdr.Copy(), rr.Digest}
|
||||
func (rr *RR_DHCID) Copy() RR {
|
||||
return &RR_DHCID{*rr.Hdr.CopyHeader(), rr.Digest}
|
||||
}
|
||||
|
||||
type RR_TLSA struct {
|
||||
|
@ -1271,8 +1275,8 @@ func (rr *RR_TLSA) Len() int {
|
|||
return rr.Hdr.Len() + 3 + len(rr.Certificate)/2
|
||||
}
|
||||
|
||||
func (rr *RR_TLSA) Copy() *RR_TLSA {
|
||||
return &RR_TLSA{*rr.Hdr.Copy(), rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
|
||||
func (rr *RR_TLSA) Copy() RR {
|
||||
return &RR_TLSA{*rr.Hdr.CopyHeader(), rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
|
||||
}
|
||||
|
||||
type RR_HIP struct {
|
||||
|
@ -1310,8 +1314,8 @@ func (rr *RR_HIP) Len() int {
|
|||
return l
|
||||
}
|
||||
|
||||
func (rr *RR_HIP) Copy() *RR_HIP {
|
||||
return &RR_HIP{*rr.Hdr.Copy(), rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, rr.RendezvousServers}
|
||||
func (rr *RR_HIP) Copy() RR {
|
||||
return &RR_HIP{*rr.Hdr.CopyHeader(), rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, rr.RendezvousServers}
|
||||
}
|
||||
|
||||
type RR_WKS struct {
|
||||
|
@ -1338,8 +1342,8 @@ func (rr *RR_WKS) Len() int {
|
|||
return rr.Hdr.Len() + net.IPv4len + 1
|
||||
}
|
||||
|
||||
func (rr *RR_WKS) Copy() *RR_WKS {
|
||||
return &RR_WKS{*rr.Hdr.Copy(), rr.Address, rr.Protocol, rr.BitMap}
|
||||
func (rr *RR_WKS) Copy() RR {
|
||||
return &RR_WKS{*rr.Hdr.CopyHeader(), rr.Address, rr.Protocol, rr.BitMap}
|
||||
}
|
||||
|
||||
// TimeToDate translates the RRSIG's incep. and expir. times to the
|
||||
|
|
Loading…
Reference in New Issue