From: Xie Jiagui Date: Fri, 16 Dec 2011 03:37:48 +0000 (+0800) Subject: [1462] Add SOA check for the requested SOA serial is greater than X-Git-Tag: trac2351_base~319 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9a304b1feebd2f06ddddbf5aa5e119cff672ae55;p=thirdparty%2Fkea.git [1462] Add SOA check for the requested SOA serial is greater than that of the local one. --- diff --git a/src/bin/xfrout/tests/xfrout_test.py.in b/src/bin/xfrout/tests/xfrout_test.py.in index ea4de27a18..b509ab341e 100644 --- a/src/bin/xfrout/tests/xfrout_test.py.in +++ b/src/bin/xfrout/tests/xfrout_test.py.in @@ -710,12 +710,13 @@ class TestXfroutSession(TestXfroutSessionBase): self.getmsg(), TEST_ZONE_NAME, TEST_RRCLASS), Rcode.NOERROR()) self.assertNotEqual(None, self.xfrsess._jnl_reader) - # Successful case, but as a result of falling back to AXFR-style - # IXFR. A zone iterator should be set up instead of a journal reader. + # Successful case, but the requested SOA serial is greater than that of + # the local SOA. Both iterator and jnl_reader should be None, + # indicating that the response will contain just one SOA. self.mdata = self.create_request_data(ixfr=IXFR_NG_VERSION) self.assertEqual(self.xfrsess._xfrout_setup( self.getmsg(), TEST_ZONE_NAME, TEST_RRCLASS), Rcode.NOERROR()) - self.assertNotEqual(None, self.xfrsess._iterator) + self.assertEqual(None, self.xfrsess._iterator) self.assertEqual(None, self.xfrsess._jnl_reader) # Successful case, but the requested SOA serial is equal to that of @@ -1069,17 +1070,6 @@ class TestXfroutSessionWithSQLite3(TestXfroutSessionBase): self.assertEqual(Rcode.NOERROR(), response.get_rcode()) self.check_axfr_stream(response) - def test_ixfr_to_axfr(self): - self.xfrsess._request_data = \ - self.create_request_data(ixfr=IXFR_NG_VERSION) - XfroutSession._handle(self.xfrsess) - response = self.sock.read_msg(Message.PRESERVE_ORDER); - self.assertEqual(Rcode.NOERROR(), response.get_rcode()) - # This is an AXFR-style IXFR. So the question section should indicate - # that it's an IXFR resposne. - self.assertEqual(RRType.IXFR(), response.get_question()[0].get_type()) - self.check_axfr_stream(response) - def test_ixfr_normal_session(self): # See testdata/creatediff.py. There are 8 changes between two # versions. So the answer section should contain all of these and diff --git a/src/bin/xfrout/xfrout.py.in b/src/bin/xfrout/xfrout.py.in index 310a0aaca3..9aa1887c29 100755 --- a/src/bin/xfrout/xfrout.py.in +++ b/src/bin/xfrout/xfrout.py.in @@ -412,11 +412,9 @@ class XfroutSession(): # a single SOA record of the server's current version, just as # in AXFR". The claim about AXFR is incorrect, but other than that, # we do as the RFC says. - # Note: until we complete #1278 we can only check equality of the - # two serials. The "newer version" case would fall back to AXFR-style. begin_serial = get_soa_serial(remote_soa.get_rdata()[0]) end_serial = get_soa_serial(self._soa.get_rdata()[0]) - if begin_serial == end_serial: + if begin_serial >= end_serial: # clear both iterator and jnl_reader to signal we won't do # iteration in response generation self._iterator = None