move functions closer together
This commit is contained in:
parent
2fd0e458df
commit
e6e7649112
56
zone.go
56
zone.go
|
@ -15,7 +15,8 @@ import (
|
||||||
// multilpe goroutines.
|
// multilpe goroutines.
|
||||||
type Zone struct {
|
type Zone struct {
|
||||||
Origin string // Origin of the zone
|
Origin string // Origin of the zone
|
||||||
olabels []string // origin cut up in labels, just to speed up the isSubDomain method
|
olen int // Origin length
|
||||||
|
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
|
Wildcard int // Whenever we see a wildcard name, this is incremented
|
||||||
expired bool // Slave zone is expired
|
expired bool // Slave zone is expired
|
||||||
ModTime time.Time // When is the zone last modified
|
ModTime time.Time // When is the zone last modified
|
||||||
|
@ -82,7 +83,7 @@ func newSignatureConfig() *SignatureConfig {
|
||||||
// Minttl value is zero.
|
// Minttl value is zero.
|
||||||
var DefaultSignatureConfig = newSignatureConfig()
|
var DefaultSignatureConfig = newSignatureConfig()
|
||||||
|
|
||||||
// NewZone creates an initialized zone with Origin set to origin.
|
// NewZone creates an initialized zone with Origin set to the lower cased origin.
|
||||||
func NewZone(origin string) *Zone {
|
func NewZone(origin string) *Zone {
|
||||||
if origin == "" {
|
if origin == "" {
|
||||||
origin = "."
|
origin = "."
|
||||||
|
@ -92,6 +93,7 @@ func NewZone(origin string) *Zone {
|
||||||
}
|
}
|
||||||
z := new(Zone)
|
z := new(Zone)
|
||||||
z.Origin = Fqdn(strings.ToLower(origin))
|
z.Origin = Fqdn(strings.ToLower(origin))
|
||||||
|
z.olen = len(z.Origin)
|
||||||
z.olabels = SplitLabels(z.Origin)
|
z.olabels = SplitLabels(z.Origin)
|
||||||
z.Names = make(map[string]*ZoneData)
|
z.Names = make(map[string]*ZoneData)
|
||||||
z.RWMutex = new(sync.RWMutex)
|
z.RWMutex = new(sync.RWMutex)
|
||||||
|
@ -106,9 +108,9 @@ func NewZone(origin string) *Zone {
|
||||||
|
|
||||||
// ZoneData holds all the RRs for a specific owner name.
|
// ZoneData holds all the RRs for a specific owner name.
|
||||||
type ZoneData struct {
|
type ZoneData struct {
|
||||||
RR map[uint16][]RR // Map of the RR type to the RR
|
RR map[uint16][]RR // Map of the RR type to the RR
|
||||||
Signature map[uint16][]*RRSIG // DNSSEC signatures for the RRs, stored under type covered
|
Signature map[uint16][]*RRSIG // DNSSEC signatures for the RRs, stored under type covered
|
||||||
NonAuth bool // Always false, except for NSsets that differ from z.Origin
|
NonAuth bool // Always false, except for NSsets that differ from z.Origin
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewZoneData creates a new zone data element.
|
// NewZoneData creates a new zone data element.
|
||||||
|
@ -174,6 +176,8 @@ func (z *Zone) Insert(r RR) error {
|
||||||
return &Error{Err: "out of zone data", Name: r.Header().Name}
|
return &Error{Err: "out of zone data", Name: r.Header().Name}
|
||||||
}
|
}
|
||||||
z.ModTime = time.Now().UTC()
|
z.ModTime = time.Now().UTC()
|
||||||
|
// Remove the origin from the ownername of the RR
|
||||||
|
r.Header().Name = r.Header().Name[:len(r.Header().Name)-z.olen-1]
|
||||||
zd, ok := z.Names[r.Header().Name]
|
zd, ok := z.Names[r.Header().Name]
|
||||||
if !ok {
|
if !ok {
|
||||||
// Check if it's a wildcard name
|
// Check if it's a wildcard name
|
||||||
|
@ -360,6 +364,28 @@ func (z *Zone) isSubDomain(child string) bool {
|
||||||
return compareLabelsSlice(z.olabels, strings.ToLower(child)) == len(z.olabels)
|
return compareLabelsSlice(z.olabels, strings.ToLower(child)) == len(z.olabels)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compareLabels behaves exactly as CompareLabels expect that l1 is already
|
||||||
|
// a tokenize (in labels) version of the domain name. This saves memory and is faster.
|
||||||
|
func compareLabelsSlice(l1 []string, s2 string) (n int) {
|
||||||
|
l2 := SplitLabels(s2)
|
||||||
|
|
||||||
|
x1 := len(l1) - 1
|
||||||
|
x2 := len(l2) - 1
|
||||||
|
for {
|
||||||
|
if x1 < 0 || x2 < 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if l1[x1] == l2[x2] {
|
||||||
|
n++
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
x1--
|
||||||
|
x2--
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Sign (re)signs the zone z with the given keys.
|
// Sign (re)signs the zone z with the given keys.
|
||||||
// NSECs and RRSIGs are added as needed.
|
// NSECs and RRSIGs are added as needed.
|
||||||
// The public keys themselves are not added to the zone.
|
// The public keys themselves are not added to the zone.
|
||||||
|
@ -611,25 +637,3 @@ func jitterDuration(d time.Duration) time.Duration {
|
||||||
}
|
}
|
||||||
return -time.Duration(jitter)
|
return -time.Duration(jitter)
|
||||||
}
|
}
|
||||||
|
|
||||||
// compareLabels behaves exactly as CompareLabels expect that l1 is already
|
|
||||||
// a tokenize (in labels) version of the domain name. This saves memory and is faster.
|
|
||||||
func compareLabelsSlice(l1 []string, s2 string) (n int) {
|
|
||||||
l2 := SplitLabels(s2)
|
|
||||||
|
|
||||||
x1 := len(l1) - 1
|
|
||||||
x2 := len(l2) - 1
|
|
||||||
for {
|
|
||||||
if x1 < 0 || x2 < 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if l1[x1] == l2[x2] {
|
|
||||||
n++
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
x1--
|
|
||||||
x2--
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue