From 104b206d2c602f2fec0ef430e852c547558ff9f5 Mon Sep 17 00:00:00 2001 From: Andrew Tunnell-Jones Date: Wed, 12 Nov 2014 00:29:00 +0000 Subject: [PATCH] Make RemoveRRset work as intended --- update.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/update.go b/update.go index 053e4224..77a9ce61 100644 --- a/update.go +++ b/update.go @@ -104,12 +104,20 @@ func (u *Msg) Insert(rr []RR) { // RemoveRRset creates a dynamic update packet that deletes an RRset, see RFC 2136 section 2.5.2. func (u *Msg) RemoveRRset(rr []RR) { - u.Ns = make([]RR, len(rr)) - for i, r := range rr { - u.Ns[i] = r - u.Ns[i].Header().Class = ClassANY - u.Ns[i].Header().Rdlength = 0 - u.Ns[i].Header().Ttl = 0 + m := make(map[RR_Header]struct{}) + for _, r := range rr { + h := r.Header() + m[RR_Header{ + Name: h.Name, + Rrtype: h.Rrtype, + Class: ClassANY, + Ttl: 0, + Rdlength: 0, + }] = struct{}{} + } + u.Ns = make([]RR, 0, len(m)) + for t := range m { + u.Ns = append(u.Ns, &ANY{t}) } }