Browse Source

rewrite xfrout._zone_exist() logic

chenzhengzhang 14 years ago
parent
commit
4b8be48804

+ 2 - 2
src/bin/xfrout/tests/xfrout_test.py

@@ -228,9 +228,9 @@ class TestXfroutSession(unittest.TestCase):
 
 
     def test_zone_exist(self):
     def test_zone_exist(self):
         global sqlite3_ds
         global sqlite3_ds
-        def zone_soa(zone, file):
+        def zone_exist(zone, file):
             return zone
             return zone
-        sqlite3_ds.get_zone_soa = zone_soa
+        sqlite3_ds.zone_exist = zone_exist 
         self.assertEqual(self.xfrsess._zone_exist(True), True)
         self.assertEqual(self.xfrsess._zone_exist(True), True)
         self.assertEqual(self.xfrsess._zone_exist(False), False)
         self.assertEqual(self.xfrsess._zone_exist(False), False)
 
 

+ 10 - 7
src/bin/xfrout/xfrout.py.in

@@ -194,28 +194,31 @@ class XfroutSession(BaseRequestHandler):
 
 
 
 
     def _zone_is_empty(self, zone):
     def _zone_is_empty(self, zone):
+        '''Judge if the zone has data.'''
         if sqlite3_ds.get_zone_soa(zone, self.server.get_db_file()):
         if sqlite3_ds.get_zone_soa(zone, self.server.get_db_file()):
             return False
             return False
 
 
         return True
         return True
 
 
     def _zone_exist(self, zonename):
     def _zone_exist(self, zonename):
-        # Find zone in datasource, should this works? maybe should ask
-        # config manager.
-        soa = sqlite3_ds.get_zone_soa(zonename, self.server.get_db_file())
-        if soa:
-            return True
-        return False
-
+        '''Judge if the zone is configured by config manager.'''
+        # Currently, we judge the state by search datasource, if we find the
+        # zone in datasource successfully, we consider the zone is configured.
+        # TODO: should get zone's configuration from cfgmgr or other place
+        # in future.
+        return sqlite3_ds.zone_exist(zonename, self.server.get_db_file())
 
 
     def _check_xfrout_available(self, zone_name):
     def _check_xfrout_available(self, zone_name):
         '''Check if xfr request can be responsed.
         '''Check if xfr request can be responsed.
            TODO, Get zone's configuration from cfgmgr or some other place
            TODO, Get zone's configuration from cfgmgr or some other place
            eg. check allow_transfer setting,
            eg. check allow_transfer setting,
         '''
         '''
+        # The zone isn't configured by config manager, so we are not the
+        # authoritative name server for it.
         if not self._zone_exist(zone_name):
         if not self._zone_exist(zone_name):
             return Rcode.NOTAUTH()
             return Rcode.NOTAUTH()
 
 
+        # The zone is configured but zone data is empty.
         if self._zone_is_empty(zone_name):
         if self._zone_is_empty(zone_name):
             return Rcode.SERVFAIL()
             return Rcode.SERVFAIL()
 
 

+ 1 - 1
src/bin/xfrout/xfrout.spec.pre.in

@@ -48,4 +48,4 @@
       ]
       ]
   }
   }
 }
 }
-     
+

+ 14 - 1
src/lib/python/isc/datasrc/sqlite3_ds.py

@@ -172,7 +172,20 @@ def get_zoneid(zone, cur):
         return row[0]
         return row[0]
     else:
     else:
         return ''
         return ''
-    
+
+#########################################################################
+# zone_exist:
+#   returns True if the zone is found, otherwise False
+#########################################################################
+def zone_exist(zonename, dbfile):
+    conn, cur = open(db_file)
+    zoneid = get_zoneid(zonename, cur)
+    cur.close()
+    conn.close()
+    if (zoneid):
+        return True
+    return False
+
 #########################################################################
 #########################################################################
 # reverse_name:
 # reverse_name:
 #   reverse the labels of a DNS name.  (for example,
 #   reverse the labels of a DNS name.  (for example,