james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Søren Hilmer ...@tefs.dk>
Subject Re: Regarding BUG 24885: RemoteDelivery only tries one of multiple A record
Date Mon, 08 Dec 2003 08:19:39 GMT
On Saturday 06 December 2003 00:22, Richard O. Hammer wrote:
> Noel J. Bergman wrote:
> > Søren Hilmer wrote:
> ...
> >>>So it is handling a multihomed destination that needs to be addressed.
> I want to make sure I understand this issue.  I've put some debugging
> statements into org.apache.james.dnsserver.DNSServer, which print out
> Record.toString() in places of interest.  Today, when I call
> findMXRecords("yahoo.com"), the subsequent lookup("yahoo.com",
> Type.MX); returns the following three records, shown here before they
> are sorted for priority order.
>     yahoo.com.  2320	IN	MX	1 mx2.mail.yahoo.com.
>     yahoo.com.  2320	IN	MX	5 mx4.mail.yahoo.com.
>     yahoo.com.  2320	IN	MX	1 mx1.mail.yahoo.com.
> The problem being discussed here is that host mx2.mail.yahoo.com. may
> exist at several IP addresses (i.e., that a subsequent lookup of
> mx2.mail.yahoo.com. may produce several A records.)(?)  

Yes, mx2.mail.yahoo.com can have sevearl A records.

>So that if, after sorting for priorities, we decide to connect to
> mx2.mail.yahoo.com. , then we need to try each of the IP addresses for
> mx2.mail.yahoo.com. before we go on to try the next host-name in our
> priority ordering (which would be mx1.mail.yahoo.com.)  Is that the
> problem?

Yes, taht is the problem, now only one of the returned A-rcords for 
mx2.mail.yahoo.com is tried.

> Do we know for sure that the JavaMail code underlying the call:
>    transport = session.getTransport(urlname);
> (in method RemoteDelivery.deliver(Mail, Session)) does not do this for us?

My tests shows that JavaMail does not handle it, but I hope to be proven 

> Do you have an example, Søren, of a MX host which you know has
> multiple A records, so that I can test with it?

Yes, hotmail.com returns this for is MX records:
hotmail.com.            274     IN      MX      5 mx2.hotmail.com.
hotmail.com.            274     IN      MX      5 mx3.hotmail.com.
hotmail.com.            274     IN      MX      5 mx4.hotmail.com.
hotmail.com.            274     IN      MX      5 mx1.hotmail.com.

A lookup of mx2.hotmail.com's A records get you:
mx2.hotmail.com.        3017    IN      A
mx2.hotmail.com.        3017    IN      A
mx2.hotmail.com.        3017    IN      A

> > The return is a Collection of String objects.  Each one is currently of
> > the form "host", but if we were to handle multi-homed hosts by using
> > "host/IP", it seems to me that we could either parse it directly  ...
> I guess this may require an additional call to the underlying
> DNSServer.rawDNSLookup(), because I don't think
> DNSServer.findMXRecords() ever has the redundant A records.  This is
> interesting -- but with my ignorance of DNS I am just guessing.

Yes, rawDNSLookup needs to be called twice. I am adding a 
DNSServer.findARecords method to do it (basically a copy/paste of 


Søren Hilmer, M.Sc.
R&D manager		Phone:	+45 70 27 64 00
TietoEnator IT+		Fax:	+45 70 27 64 40
Ved Lunden 12		Direct:	+45 87 46 64 57
DK-8230 Åbyhøj		Email:	soren.hilmer <at> tietoenator.com

To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org

View raw message