From 3089111fa432f5ddea5480f05f54ba4608c224d5 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Tue, 16 Oct 2012 08:50:53 +0200 Subject: [PATCH] calculate tsig in the normal query path too --- client.go | 14 ++++++-------- zone.go | 12 ++---------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/client.go b/client.go index bdb33520..55195285 100644 --- a/client.go +++ b/client.go @@ -101,6 +101,7 @@ func (c *Client) Exchange(m *Msg, a string) (r *Msg, err error) { func (c *Client) ExchangeRtt(m *Msg, a string) (r *Msg, rtt time.Duration, err error) { var ( n int + mac string out []byte ) w := new(reply) @@ -108,7 +109,7 @@ func (c *Client) ExchangeRtt(m *Msg, a string) (r *Msg, rtt time.Duration, err e if _, ok := w.client.TsigSecret[t.Hdr.Name]; !ok { return nil, 0, ErrSecret } - out, _, err = TsigGenerate(m, c.TsigSecret[t.Hdr.Name], "", false) + out, mac, err = TsigGenerate(m, c.TsigSecret[t.Hdr.Name], "", false) } else { out, err = m.Pack() } @@ -138,16 +139,13 @@ func (c *Client) ExchangeRtt(m *Msg, a string) (r *Msg, rtt time.Duration, err e } if t := r.IsTsig(); t != nil { secret := t.Hdr.Name - if _, ok := client.TsigSecret[secret]; !ok { - w.tsigStatus = ErrSecret - return m, nil + if _, ok := c.TsigSecret[secret]; !ok { + return r, w.rtt, ErrSecret } // Need to work on the original message p, as that was used to calculate the tsig. - w.tsigStatus = TsigVerify(p, w.client.TsigSecret[secret], w.tsigRequestMAC, w.tsigTimersOnly) + err = TsigVerify(in, c.TsigSecret[secret], mac, false) } - - - return r, w.rtt, nil + return r, w.rtt, err } // dial connects to the address addr for the network set in c.Net diff --git a/zone.go b/zone.go index 28af7849..c694ba67 100644 --- a/zone.go +++ b/zone.go @@ -318,16 +318,8 @@ func (z *Zone) Remove(r RR) error { func (z *Zone) RemoveName(s string) error { key := toRadixName(s) z.Lock() - zd, exact := z.Radix.Find(key) - if !exact { - defer z.Unlock() - return nil - } - z.Unlock() - zd.Value.(*ZoneData).mutex.Lock() - defer zd.Value.(*ZoneData).mutex.Unlock() - zd.Value = nil // remove the lot - + defer z.Unlock() + z.Radix.Remove(key) if len(s) > 1 && s[0] == '*' && s[1] == '.' { z.Wildcard-- if z.Wildcard < 0 {