Add a copy function for RRHeader - use this when validating
This commit is contained in:
parent
867d24e90f
commit
614aa87ab2
10
dns.go
10
dns.go
|
@ -143,6 +143,16 @@ func (h *RR_Header) Header() *RR_Header {
|
||||||
return h
|
return h
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *RR_Header) Copy() *RR_Header {
|
||||||
|
r := new(RR_Header)
|
||||||
|
r.Name = h.Name
|
||||||
|
r.Rrtype = h.Rrtype
|
||||||
|
r.Class = h.Class
|
||||||
|
r.Ttl = h.Ttl
|
||||||
|
r.Rdlength = h.Rdlength
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
func (h *RR_Header) String() string {
|
func (h *RR_Header) String() string {
|
||||||
var s string
|
var s string
|
||||||
|
|
||||||
|
|
18
dnssec.go
18
dnssec.go
|
@ -637,21 +637,21 @@ func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
||||||
func rawSignatureData(rrset []RR, s *RR_RRSIG) (buf []byte) {
|
func rawSignatureData(rrset []RR, s *RR_RRSIG) (buf []byte) {
|
||||||
wires := make(wireSlice, len(rrset))
|
wires := make(wireSlice, len(rrset))
|
||||||
for i, r := range rrset {
|
for i, r := range rrset {
|
||||||
r1 := r
|
h := r.Header().Copy()
|
||||||
h1 := r1.Header()
|
labels := SplitLabels(h.Name)
|
||||||
labels := SplitLabels(h1.Name)
|
|
||||||
// 6.2. Canonical RR Form. (4) - wildcards
|
// 6.2. Canonical RR Form. (4) - wildcards
|
||||||
if len(labels) > int(s.Labels) {
|
if len(labels) > int(s.Labels) {
|
||||||
// Wildcard
|
// Wildcard
|
||||||
h1.Name = "*." + strings.Join(labels[len(labels)-int(s.Labels):], ".") + "."
|
h.Name = "*." + strings.Join(labels[len(labels)-int(s.Labels):], ".") + "."
|
||||||
}
|
}
|
||||||
// RFC 4034: 6.2. Canonical RR Form. (2) - domain name to lowercase
|
// RFC 4034: 6.2. Canonical RR Form. (2) - domain name to lowercase
|
||||||
h1.Name = strings.ToLower(h1.Name)
|
h.Name = strings.ToLower(h.Name)
|
||||||
// 6.2. Canonical RR Form. (3) - domain rdata to lowercase.
|
// 6.2. Canonical RR Form. (3) - domain rdata to lowercase.
|
||||||
// NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR,
|
// NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR,
|
||||||
// HINFO, MINFO, MX, RP, AFSDB, RT, SIG, PX, NXT, NAPTR, KX,
|
// HINFO, MINFO, MX, RP, AFSDB, RT, SIG, PX, NXT, NAPTR, KX,
|
||||||
// SRV, DNAME, A6
|
// SRV, DNAME, A6
|
||||||
switch x := r1.(type) {
|
// TODO(mg): copy the rdata here?
|
||||||
|
switch x := r.(type) {
|
||||||
case *RR_NS:
|
case *RR_NS:
|
||||||
p := x.Ns
|
p := x.Ns
|
||||||
defer func() { x.Ns = p }()
|
defer func() { x.Ns = p }()
|
||||||
|
@ -712,9 +712,9 @@ func rawSignatureData(rrset []RR, s *RR_RRSIG) (buf []byte) {
|
||||||
x.Target = strings.ToLower(x.Target)
|
x.Target = strings.ToLower(x.Target)
|
||||||
}
|
}
|
||||||
// 6.2. Canonical RR Form. (5) - origTTL
|
// 6.2. Canonical RR Form. (5) - origTTL
|
||||||
wire := make([]byte, r1.Len()*2)
|
wire := make([]byte, r.Len()*2)
|
||||||
h1.Ttl = s.OrigTtl
|
h.Ttl = s.OrigTtl
|
||||||
off, ok1 := packRR(r1, wire, 0, nil, false)
|
off, ok1 := packRR(r, wire, 0, nil, false)
|
||||||
if !ok1 {
|
if !ok1 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue