Browse Source

fix some loadzone bugs:
- -o option wasn't being used correctly
- SOA records MNAME and RNAME values need to have the origin appended
when they don't end in dot


git-svn-id: svn://bind10.isc.org/svn/bind10/trunk@1247 e5f2f494-b856-4b98-b285-d166d9295462

Evan Hunt 15 years ago
parent
commit
574b65f824
2 changed files with 12 additions and 1 deletions
  1. 2 1
      src/bin/loadzone/b10-loadzone.py.in
  2. 10 0
      src/lib/python/isc/auth/master.py

+ 2 - 1
src/bin/loadzone/b10-loadzone.py.in

@@ -45,6 +45,8 @@ def main():
         if o in ("-d", "--dbfile"):
             dbfile = a
         elif o in ("-o", "--origin"):
+            if a[-1] != '.':
+                a += '.'
             initial_origin = a
         elif o in ("-h", "--help"):
             usage()
@@ -68,7 +70,6 @@ def main():
         exit(1)
 
     try:
-
         isc.auth.sqlite3_ds.load(dbfile, zone, isc.auth.master.zonedata, zf)
     except Exception as e:
         print("Error loading database: " + str(e))

+ 10 - 0
src/lib/python/isc/auth/master.py

@@ -347,6 +347,7 @@ def reset():
 # openzone: open a zone master file, set initial origin, return descriptor
 #########################################################################
 def openzone(filename, initial_origin = ''):
+    global origin
     try:
         zf = open(filename, 'r')
     except:
@@ -417,6 +418,15 @@ def zonedata(zone):
                 raise MasterFileError("Invalid " + rrtype + ": " + rdata)
             if rdata[-1] != '.':
                 rdata += '.' + origin
+        if rrtype.lower() == 'soa':
+            soa = rdata.split()
+            if len(soa) < 2 or not isname(soa[0]) or not isname(soa[1]):
+                raise MasterFileError("Invalid " + rrtype + ": " + rdata)
+            if soa[0][-1] != '.':
+                soa[0] += '.' + origin
+            if soa[1][-1] != '.':
+                soa[1] += '.' + origin
+            rdata = ' '.join(soa)
         if rrtype.lower() == 'mx':
             mx = rdata.split()
             if len(mx) != 2 or not isname(mx[1]):