[exim-dev] DNS Loop In Callout

Top Page
Delete this message
Reply to this message
Author: Tim Wilde
Date:  
To: exim-dev
Subject: [exim-dev] DNS Loop In Callout
I have run across a very strange DNS loop in a recipient callout
verification. I've looked through archives and done as much debugging as
I could without much luck. Basically, what is happening is, I have a
series of transports that are used to send messages to specific hosts on
specific ports. An example of one of these would be:

port_redir_smtp2525:
         driver = smtp
         hosts = $acl_m6
         port = 2525
         headers_remove = X-Scanner
         interface = 63.208.196.165
         connect_timeout = 2m
         command_timeout = 2m
         data_timeout = 2m
         final_timeout = 5m


Where $acl_m6 contains a hostname. In my test case, that hostname is
"test.krellis.org". I have callout verification turned on in my recipient
ACL thusly:

         require message = User unknown
                 verify = recipient/callout=5s,defer_ok/no_details


When test.krellis.org resolves to a single IP address, this works fine.
However, when test.krellis.org resolves to multiple IP addresses, I
encounter a never-ending DNS query loop. A -d+all session shows:

16:55:34 54758 ---0 Get 0x81ce888    32          dns.c  810
16:55:34 54758 ---0 Get 0x81ce8a8    32          dns.c  810
16:55:34 54758 ---0 Get 0x81ce8c8    40         host.c 2046
16:55:34 54758 fully qualified name = test.krellis.org
16:55:34 54758 test.krellis.org 1.2.3.9 mx=-1 sort=-62
16:55:34 54758 test.krellis.org 1.2.3.4 mx=-1 sort=-40
16:55:34 54758 DNS lookup of test.krellis.org (A) succeeded
16:55:34 54758 ---0 Get 0x81ce8f0    32          dns.c  810
16:55:34 54758 ---0 Get 0x81ce910    32          dns.c  810
16:55:34 54758 ---0 Get 0x81ce930    40         host.c 2046
16:55:34 54758 fully qualified name = test.krellis.org
16:55:34 54758 test.krellis.org 1.2.3.9 mx=-1 sort=-472
16:55:34 54758 test.krellis.org 1.2.3.4 mx=-1 sort=-302
16:55:34 54758 DNS lookup of test.krellis.org (A) succeeded
16:55:34 54758 ---0 Get 0x81ce958    32          dns.c  810
16:55:34 54758 ---0 Get 0x81ce978    32          dns.c  810
16:55:34 54758 ---0 Get 0x81ce998    40         host.c 2046
16:55:34 54758 fully qualified name = test.krellis.org
16:55:34 54758 test.krellis.org 1.2.3.4 mx=-1 sort=-67
16:55:34 54758 test.krellis.org 1.2.3.9 mx=-1 sort=-44
16:55:34 54758 DNS lookup of test.krellis.org (A) succeeded


Over and over again. I have a full session available with
test.krellis.org resolving to both a single A record and multiple A
records. I can send that as necessary for debugging.

Actual deliveries with the round-robin in place succeed past the DNS
lookup with no problem, so something seems to be going wonky in the
callout code when there are multiple IP addresses returned by DNS.

I can provide more information, full configurations, and session
transcripts to anyone who needs them to help debug this. I didn't have
much luck stepping through blindly with a debugger trying to find
something obvious wrong, but I'm not at all familiar with the Exim sources
at this point, so my chances weren't so hot.

Any help anyone can provide with this would be greatly appreciated. I
apologize if this would have been better suited to -users, I wasn't
entirely clear from the site & docs what would be best for trying to hunt
down a bug of this nature.

Tim Wilde

--
Tim Wilde
twilde@???
Systems Administrator
Dynamic Network Services, Inc.
http://www.dyndns.org/