make origin an fqdn

This commit is contained in:
Miek Gieben 2012-07-16 19:46:16 +02:00
parent af2f485c8e
commit 7adc5ab95b
2 changed files with 16 additions and 8 deletions

18
zone.go
View File

@ -8,10 +8,8 @@ import (
// Zone represents a DNS zone. // Zone represents a DNS zone.
type Zone struct { type Zone struct {
Name string // Name of the zone Origin string // Origin of the zone
*radix.Radix // Zone data *radix.Radix // Zone data
// soa parameters in here TODO(mg)
} }
// ZoneData holds all the RR belonging to Name. // ZoneData holds all the RR belonging to Name.
@ -27,8 +25,14 @@ type ZoneData struct {
// New ... // New ...
func NewZone(origin string) *Zone { func NewZone(origin string) *Zone {
if origin == "" {
origin = "."
}
if _, _, ok := IsDomainName(origin); !ok {
return nil
}
z := new(Zone) z := new(Zone)
z.Origin = origin z.Origin = Fqdn(origin)
z.Radix = radix.New() z.Radix = radix.New()
return z return z
} }
@ -37,6 +41,11 @@ func NewZone(origin string) *Zone {
// Out-of-zone data // Out-of-zone data
// Glue // Glue
func (z *Zone) Insert(r RR) { func (z *Zone) Insert(r RR) {
if !IsSubDomain(r.Header().Name, z.Origin) {
println("Out of zone data", z.Origin, r.String())
return
}
zd := z.Radix.Find(r.Header().Name) zd := z.Radix.Find(r.Header().Name)
if zd == nil { if zd == nil {
zd := new(ZoneData) zd := new(ZoneData)
@ -53,6 +62,7 @@ func (z *Zone) Insert(r RR) {
z.Radix.Insert(r.Header().Name, zd) z.Radix.Insert(r.Header().Name, zd)
return return
} }
// Name already added
switch t := r.Header().Rrtype; t { switch t := r.Header().Rrtype; t {
case TypeRRSIG: case TypeRRSIG:
zd.Value.(*ZoneData).Signatures = append(zd.Value.(*ZoneData).Signatures, r.(*RR_RRSIG)) zd.Value.(*ZoneData).Signatures = append(zd.Value.(*ZoneData).Signatures, r.(*RR_RRSIG))

View File

@ -162,14 +162,12 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) {
if origin == "" { if origin == "" {
origin = "." origin = "."
} }
if !IsFqdn(origin) {
t <- Token{Error: &ParseError{f, "bad initial origin name", lex{}}}
return
}
if _, _, ok := IsDomainName(origin); !ok { if _, _, ok := IsDomainName(origin); !ok {
t <- Token{Error: &ParseError{f, "bad initial origin name", lex{}}} t <- Token{Error: &ParseError{f, "bad initial origin name", lex{}}}
return return
} }
origin = Fqdn(origin)
st := _EXPECT_OWNER_DIR // initial state st := _EXPECT_OWNER_DIR // initial state
var h RR_Header var h RR_Header
var defttl uint32 = DefaultTtl var defttl uint32 = DefaultTtl