aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/miekg/dns/tsig.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/miekg/dns/tsig.go')
-rw-r--r--vendor/github.com/miekg/dns/tsig.go21
1 files changed, 15 insertions, 6 deletions
diff --git a/vendor/github.com/miekg/dns/tsig.go b/vendor/github.com/miekg/dns/tsig.go
index b49562d..55ca752 100644
--- a/vendor/github.com/miekg/dns/tsig.go
+++ b/vendor/github.com/miekg/dns/tsig.go
@@ -162,20 +162,29 @@ func tsigGenerateProvider(m *Msg, provider TsigProvider, requestMAC string, time
if err != nil {
return nil, "", err
}
+
buf, err := tsigBuffer(mbuf, rr, requestMAC, timersOnly)
if err != nil {
return nil, "", err
}
t := new(TSIG)
- // Copy all TSIG fields except MAC and its size, which are filled using the computed digest.
+ // Copy all TSIG fields except MAC, its size, and time signed which are filled when signing.
*t = *rr
- mac, err := provider.Generate(buf, rr)
- if err != nil {
- return nil, "", err
+ t.TimeSigned = 0
+ t.MAC = ""
+ t.MACSize = 0
+
+ // Sign unless there is a key or MAC validation error (RFC 8945 5.3.2)
+ if rr.Error != RcodeBadKey && rr.Error != RcodeBadSig {
+ mac, err := provider.Generate(buf, rr)
+ if err != nil {
+ return nil, "", err
+ }
+ t.TimeSigned = rr.TimeSigned
+ t.MAC = hex.EncodeToString(mac)
+ t.MACSize = uint16(len(t.MAC) / 2) // Size is half!
}
- t.MAC = hex.EncodeToString(mac)
- t.MACSize = uint16(len(t.MAC) / 2) // Size is half!
tbuf := make([]byte, Len(t))
off, err := PackRR(t, tbuf, 0, nil, false)