Merge branch 'zonesigning' of github.com:miekg/dns into zonesigning

This commit is contained in:
Miek Gieben 2012-12-07 10:01:59 +01:00
commit 9d337f7bb7
2 changed files with 12 additions and 8 deletions

View File

@ -1,13 +1,11 @@
# TODO
* Support for on-the-fly-signing
* (Re)sign zonefiles
* TLSA support
* create record from PEM(?) files
* sign
* verify
* Use BIND10 memory efficient zone structure?
* copy srv/mx sorting from base library
* allow multiple edns0 options to exist in the record when converting
from/to wireformat
* NSEC3 support propper in the zone structure(s)

18
zone.go
View File

@ -16,13 +16,13 @@ import (
// Zone represents a DNS zone. It's safe for concurrent use by
// multilpe goroutines.
type Zone struct {
Origin string // Origin of the zone
olabels []string // origin cut up in labels, just to speed up the isSubDomain method
Wildcard int // Whenever we see a wildcard name, this is incremented
*radix.Radix // Zone data
Origin string // Origin of the zone
olabels []string // origin cut up in labels, just to speed up the isSubDomain method
Wildcard int // Whenever we see a wildcard name, this is incremented
expired bool // Slave zone is expired
mtime time.Time // When is the zone last modified
*radix.Radix // Zone data
*sync.RWMutex
expired bool // Slave zone is expired
// Do we need a timemodified?
}
type uint16Slice []uint16
@ -84,6 +84,7 @@ func NewZone(origin string) *Zone {
z.olabels = SplitLabels(z.Origin)
z.Radix = radix.New()
z.RWMutex = new(sync.RWMutex)
z.mtime = time.Now().UTC()
return z
}
@ -202,6 +203,7 @@ func (z *Zone) Insert(r RR) error {
key := toRadixName(r.Header().Name)
z.Lock()
z.mtime = time.Now.UTC()
zd, exact := z.Radix.Find(key)
if !exact {
// Not an exact match, so insert new value
@ -251,6 +253,7 @@ func (z *Zone) Insert(r RR) error {
func (z *Zone) Remove(r RR) error {
key := toRadixName(r.Header().Name)
z.Lock()
m.mtime = time.Now.UTC()
zd, exact := z.Radix.Find(key)
if !exact {
defer z.Unlock()
@ -312,6 +315,7 @@ func (z *Zone) Remove(r RR) error {
func (z *Zone) RemoveName(s string) error {
key := toRadixName(s)
z.Lock()
z.mtime = time.Now().UTC()
defer z.Unlock()
z.Radix.Remove(key)
if len(s) > 1 && s[0] == '*' && s[1] == '.' {
@ -327,6 +331,7 @@ func (z *Zone) RemoveName(s string) error {
// Typical use of this method is when processing a RemoveRRset dynamic update packet.
func (z *Zone) RemoveRRset(s string, t uint16) error {
z.Lock()
z.mtime = time.Now().UTC()
zd, exact := z.Radix.Find(toRadixName(s))
if !exact {
defer z.Unlock()
@ -418,6 +423,7 @@ func (z *Zone) isSubDomain(child string) bool {
// // Admire your signed zone...
func (z *Zone) Sign(keys map[*RR_DNSKEY]PrivateKey, config *SignatureConfig) error {
z.Lock()
z.mtime = time.Now().UTC()
defer z.Unlock()
if config == nil {
config = DefaultSignatureConfig