<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 04.05.2016 10:43, Petr Spacek wrote:<br>
    </div>
    <blockquote
      cite="mid:44b60702-e8cb-364f-39bc-114404349972@redhat.com"
      type="cite">
      <pre wrap="">Hello,

DNS: Warn if forwarding policy conflicts with automatic empty zones

Forwarding policy "first" or "none" may conflicts with some automatic empty
zones. Queries for zones specified by RFC 6303 will ignore
forwarding and recursion and always result in NXDOMAIN answers.

This is not detected and warned about. Global forwarding is equivalent
to forward zone ".".

Example:
Forward zone 1.10.in-addr.arpa with policy "first"
will not forward anything because BIND will automatically prefer
automatic empty zone "10.in-addr.arpa." which is authoritative.

<a class="moz-txt-link-freetext" href="https://fedorahosted.org/freeipa/ticket/5710">https://fedorahosted.org/freeipa/ticket/5710</a>


This is last patch in the series so the ticket can be closed when all relevant
patches are pushed.

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
    </blockquote>
    <br>
    <br>
    You forgot to update tests<br>
    <br>
_____________________________________________________________________
    test_dns.test_command[0087: dnsconfig_mod: Update global DNS
    settings]
    ______________________________________________________________________<br>
    <br>
    self = <ipatests.test_xmlrpc.test_dns_plugin.test_dns object at
    0x7fcef3ef2510>, index = 87<br>
    declarative_test_definition = {'command': ('dnsconfig_mod', [],
    {'idnsforwarders': ['172.16.31.80'], 'version': '2.166'}), 'desc':
    'Update global DN...arders': ['172.16.31.80']}, 'summary': None,
    'value': None}, 'nice': '0087: dnsconfig_mod: Update global DNS
    settings'}<br>
    <br>
        def test_command(self, index, declarative_test_definition):<br>
            """Run an individual test<br>
        <br>
                The arguments are provided by the pytest plugin.<br>
                """<br>
            if callable(declarative_test_definition):<br>
                declarative_test_definition(self)<br>
            else:<br>
    >           self.check(**declarative_test_definition)<br>
    <br>
    test_xmlrpc/xmlrpc_test.py:313: <br>
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    _ _ _ _<br>
    test_xmlrpc/xmlrpc_test.py:325: in check<br>
        self.check_output(nice, cmd, args, options, expected,
    extra_check)<br>
    test_xmlrpc/xmlrpc_test.py:368: in check_output<br>
        assert_deepequal(expected, got, nice)<br>
    util.py:361: in assert_deepequal<br>
        assert_deepequal(e_sub, g_sub, doc, stack + (key,))<br>
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    _ _ _ _<br>
    <br>
    expected = [{'code': 13006, 'message': <function <lambda>
    at 0x7fcef426c758>, 'name': 'DNSServerValidationWarning', 'type':
    'warning'}]<br>
    got = [{'code': 13021, 'message': "Forwarding policy conflicts with
    some automatic empty zones. Queries for zones specified ...': The
    DNS operation timed out after 10.0008428097 seconds.", 'name':
    'DNSServerValidationWarning', 'type': 'warning'}]<br>
    doc = '0087: dnsconfig_mod: Update global DNS settings', stack =
    ('messages',)<br>
    <br>
        def assert_deepequal(expected, got, doc='', stack=tuple()):<br>
            """<br>
            Recursively check for type and equality.<br>
        <br>
            If a value in expected is callable then it will used as a
    callback to<br>
            test for equality on the got value. The callback is passed
    the got<br>
            value and returns True if equal, False otherwise.<br>
        <br>
            If the tests fails, it will raise an ``AssertionError`` with
    detailed<br>
            information, including the path to the offending value.  For
    example:<br>
        <br>
            >>> expected = [u'Hello', dict(world=u'how are
    you?')]<br>
            >>> got = [u'Hello', dict(world='how are you?')]<br>
            >>> expected == got<br>
            True<br>
            >>> assert_deepequal(expected, got, doc='Testing my
    nested data')<br>
            Traceback (most recent call last):<br>
              ...<br>
            AssertionError: assert_deepequal: type(expected) is not
    type(got).<br>
              Testing my nested data<br>
              type(expected) = <type 'unicode'><br>
              type(got) = <type 'str'><br>
              expected = u'how are you?'<br>
              got = 'how are you?'<br>
              path = (0, 'world')<br>
        <br>
            Note that lists and tuples are considered equivalent, and
    the order of<br>
            their elements does not matter.<br>
            """<br>
            if isinstance(expected, tuple):<br>
                expected = list(expected)<br>
            if isinstance(got, tuple):<br>
                got = list(got)<br>
            if isinstance(expected, DN):<br>
                if isinstance(got, six.string_types):<br>
                    got = DN(got)<br>
            if not (isinstance(expected, Fuzzy) or callable(expected) or
    type(expected) is type(got)):<br>
                raise AssertionError(<br>
                    TYPE % (doc, type(expected), type(got), expected,
    got, stack)<br>
                )<br>
            if isinstance(expected, (list, tuple)):<br>
                if len(expected) != len(got):<br>
                    raise AssertionError(<br>
    >                   LEN % (doc, len(expected), len(got),
    expected, got, stack)<br>
                    )<br>
    E               AssertionError: assert_deepequal: list length
    mismatch.<br>
    E                 0087: dnsconfig_mod: Update global DNS settings<br>
    E                 len(expected) = 1<br>
    E                 len(got) = 2<br>
    E                 expected = [{u'message': <function
    <lambda> at 0x7fcef426c758>, u'code': 13006, u'type':
    u'warning', u'name': u'DNSServerValidationWarning'}]<br>
    E                 got = [{u'message': u"Forwarding policy conflicts
    with some automatic empty zones. Queries for zones specified by RFC
    6303 will ignore forwarding and recursion and always result in
    NXDOMAIN answers. To override this behavior use forward policy
    'only'.", u'code': 13021, u'type': u'warning', u'name':
    u'DNSForwardPolicyConflictWithEmptyZone'}, {u'message': u"DNS server
    172.16.31.80: query '. SOA': The DNS operation timed out after
    10.0008428097 seconds.", u'code': 13006, u'type': u'warning',
    u'name': u'DNSServerValidationWarning'}]<br>
    E                 path = (u'messages',)<br>
    <br>
    util.py:332: AssertionError<br>
    <br>
  </body>
</html>