diff options
author | Alex Clayton <alex.clayton@isode.com> | 2013-11-08 10:06:08 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2013-11-09 23:15:51 (GMT) |
commit | 82a909b9ff8af20bc5674b3e544dfd81330354d4 (patch) | |
tree | bf6f9656840521f2865f82b329be2ba69ee64ae3 /src/com/isode | |
parent | 14a773c38050d4af9c34c24e426b7a5460ad9735 (diff) | |
download | stroke-82a909b9ff8af20bc5674b3e544dfd81330354d4.zip stroke-82a909b9ff8af20bc5674b3e544dfd81330354d4.tar.bz2 |
Allow /etc/hosts to override DNS host lookups
A recent change made Stroke use the dnsjava library instead of JNDI for
domain service queries, because JNDI had problems with IPv6 addresses.
The change also replaced the use of Java's standard InetAddress class for name
resolution with the Address class inside dnsjava - this change was not neccessary, and
is problematic because although the documentation for "Address" says that it "Includes functions
similar to those in the java.net.InetAddress class", it does not provide equivalent functionality.
Specifically, whereas InetAddress.getAllByName() will use the local system's
"host" file when attempting to resolve hostnames, the corresponding Address.getAllByName() method
in dnsjava does not do this.
This means that if a user inserts values into /etc/hosts, they will be ignored by
the Address.getAllByName().
As a result, users who had expected stroke to honour values in /etc/hosts
(which is something you might want to do just for testing purposes) will be surprised
when it stops doing this.
So this patch reverts the code in question to use InetAddress instead of dnsjava's Address class.
Test Information
I added the following lines to my /etc/hosts file.
127.0.0.1 alexmac.com
127.0.0.1 alexmac.clayton.com
At time of the testing there already existed an external domain with name alexmac.com
but none corresponding to alexmac.clayton.com.
I then ran the 'Check DNS for a domain...' dialog in the MLC Help Menu.
Before the patch this would give me the the details for the external domain
for 'alexmac.com' and say no DNS could be found for 'alexmac.clayton.com'.
After the patch the correct details (i.e 127.0.0.1) were returned for both domains.
Also, before the patch I could not connect to the local xmpp server 'alexmac.com'.
After the patch I connected correctly.
Change-Id: If7f15b8aa98313278a1892eb27a5f73aaea8802b
Diffstat (limited to 'src/com/isode')
-rw-r--r-- | src/com/isode/stroke/network/PlatformDomainNameResolver.java | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/com/isode/stroke/network/PlatformDomainNameResolver.java b/src/com/isode/stroke/network/PlatformDomainNameResolver.java index 32f466d..0b87e65 100644 --- a/src/com/isode/stroke/network/PlatformDomainNameResolver.java +++ b/src/com/isode/stroke/network/PlatformDomainNameResolver.java @@ -8,15 +8,14 @@ */ package com.isode.stroke.network; -import com.isode.stroke.eventloop.Event.Callback; -import com.isode.stroke.eventloop.EventLoop; -import com.isode.stroke.eventloop.EventOwner; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collection; -import org.xbill.DNS.Address; +import com.isode.stroke.eventloop.Event.Callback; +import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.eventloop.EventOwner; public class PlatformDomainNameResolver extends DomainNameResolver { @@ -27,7 +26,7 @@ public class PlatformDomainNameResolver extends DomainNameResolver { public void run() { final Collection<HostAddress> results = new ArrayList<HostAddress>(); try { - for (InetAddress result : Address.getAllByName(hostname)) { + for (InetAddress result : InetAddress.getAllByName(hostname)) { results.add(new HostAddress(result)); } } catch (UnknownHostException ex) { |