From 7adc5ab95b1f7fd1a18c974abb995f6ea017f428 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Mon, 16 Jul 2012 19:46:16 +0200 Subject: [PATCH] make origin an fqdn --- zone.go | 18 ++++++++++++++---- zscan.go | 6 ++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/zone.go b/zone.go index 95923702..06c7efb7 100644 --- a/zone.go +++ b/zone.go @@ -8,10 +8,8 @@ import ( // Zone represents a DNS zone. type Zone struct { - Name string // Name of the zone + Origin string // Origin of the zone *radix.Radix // Zone data - - // soa parameters in here TODO(mg) } // ZoneData holds all the RR belonging to Name. @@ -27,8 +25,14 @@ type ZoneData struct { // New ... func NewZone(origin string) *Zone { + if origin == "" { + origin = "." + } + if _, _, ok := IsDomainName(origin); !ok { + return nil + } z := new(Zone) - z.Origin = origin + z.Origin = Fqdn(origin) z.Radix = radix.New() return z } @@ -37,6 +41,11 @@ func NewZone(origin string) *Zone { // Out-of-zone data // Glue 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) if zd == nil { zd := new(ZoneData) @@ -53,6 +62,7 @@ func (z *Zone) Insert(r RR) { z.Radix.Insert(r.Header().Name, zd) return } + // Name already added switch t := r.Header().Rrtype; t { case TypeRRSIG: zd.Value.(*ZoneData).Signatures = append(zd.Value.(*ZoneData).Signatures, r.(*RR_RRSIG)) diff --git a/zscan.go b/zscan.go index 2819ac00..466f3ecc 100644 --- a/zscan.go +++ b/zscan.go @@ -162,14 +162,12 @@ func parseZone(r io.Reader, origin, f string, t chan Token, include int) { if origin == "" { origin = "." } - if !IsFqdn(origin) { - t <- Token{Error: &ParseError{f, "bad initial origin name", lex{}}} - return - } if _, _, ok := IsDomainName(origin); !ok { t <- Token{Error: &ParseError{f, "bad initial origin name", lex{}}} return } + origin = Fqdn(origin) + st := _EXPECT_OWNER_DIR // initial state var h RR_Header var defttl uint32 = DefaultTtl