Browse Source

[1260] add ixfr_disabled option

option is called ixfr_disabled, is on a per-zone basis (on the same level as master address), and is accessible as ZoneInfo.ixfr_disabled
Jelte Jansen 13 years ago
parent
commit
b2d2acebeb
3 changed files with 26 additions and 2 deletions
  1. 10 2
      src/bin/xfrin/tests/xfrin_test.py
  2. 11 0
      src/bin/xfrin/xfrin.py.in
  3. 5 0
      src/bin/xfrin/xfrin.spec

+ 10 - 2
src/bin/xfrin/tests/xfrin_test.py

@@ -955,13 +955,20 @@ class TestXfrin(unittest.TestCase):
                 self.assertEqual(zone_info.tsig_key.to_text(), TSIGKey(zone_config['tsig_key']).to_text())
             else:
                 self.assertIsNone(zone_info.tsig_key)
+            if 'ixfr_disabled' in zone_config and\
+               zone_config.get('ixfr_disabled'):
+                self.assertTrue(zone_info.ixfr_disabled)
+            else:
+                # if not set, should default to False
+                self.assertFalse(zone_info.ixfr_disabled)
 
     def test_command_handler_zones(self):
         config1 = { 'transfers_in': 3,
                    'zones': [
                    { 'name': 'test.example.',
                     'master_addr': '192.0.2.1',
-                    'master_port': 53
+                    'master_port': 53,
+                    'ixfr_disabled': False
                    }
                  ]}
         self.assertEqual(self.xfr.config_handler(config1)['result'][0], 0)
@@ -972,7 +979,8 @@ class TestXfrin(unittest.TestCase):
                    { 'name': 'test.example.',
                     'master_addr': '192.0.2.2',
                     'master_port': 53,
-                    'tsig_key': "example.com:SFuWd/q99SzF8Yzd1QbB9g=="
+                    'tsig_key': "example.com:SFuWd/q99SzF8Yzd1QbB9g==",
+                    'ixfr_disabled': True
                    }
                  ]}
         self.assertEqual(self.xfr.config_handler(config2)['result'][0], 0)

+ 11 - 0
src/bin/xfrin/xfrin.py.in

@@ -451,6 +451,7 @@ class ZoneInfo:
         self.set_master_port(config_data.get('master_port'))
         self.set_zone_class(config_data.get('class'))
         self.set_tsig_key(config_data.get('tsig_key'))
+        self.set_ixfr_disabled(config_data.get('ixfr_disabled'))
 
     def set_name(self, name_str):
         """Set the name for this zone given a name string.
@@ -525,6 +526,16 @@ class ZoneInfo:
                 errmsg = "bad TSIG key string: " + tsig_key_str
                 raise XfrinZoneInfoException(errmsg)
 
+    def set_ixfr_disabled(self, ixfr_disabled):
+        """Set ixfr_disabled. If set to False (the default), it will use
+           IXFR for incoming transfers. If set to True, it will use AXFR.
+           At this moment there is no automatic fallback"""
+        # don't care what type it is; if evaluates to true, set to True
+        if ixfr_disabled:
+            self.ixfr_disabled = True
+        else:
+            self.ixfr_disabled = False
+
     def get_master_addr_info(self):
         return (self.master_addr.family, socket.SOCK_STREAM,
                 (str(self.master_addr), self.master_port))

+ 5 - 0
src/bin/xfrin/xfrin.spec

@@ -43,6 +43,11 @@
           { "item_name": "tsig_key",
             "item_type": "string",
             "item_optional": true
+          },
+          { "item_name": "ixfr_disabled",
+            "item_type": "boolean",
+            "item_optional": false,
+            "item_default": false
           }
           ]
         }