Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public static void setContext(Context ctx) {

@Override
public void initialize() throws InitializationException {
reset();
if (context == null) {
throw new InitializationException("Context must be initialized by calling setContext");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,15 @@ public abstract class BaseResolverConfigProvider implements ResolverConfigProvid
private static final boolean ipv6first = Boolean.getBoolean("java.net.preferIPv6Addresses");

private final List<InetSocketAddress> nameservers = new ArrayList<>(3);
final Logger log = LoggerFactory.getLogger(getClass());
List<Name> searchlist = new ArrayList<>(1);

protected final Logger log = LoggerFactory.getLogger(getClass());
protected final List<Name> searchlist = new ArrayList<>(1);

protected final void reset() {
// TODO v4: make a final void initialize() that clears and then calls abstract doInit()
nameservers.clear();
searchlist.clear();
}

protected void parseSearchPathList(String search, String delimiter) {
if (search != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ private static final class InnerJndiContextResolverConfigProvider

@Override
public void initialize() {
reset();
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
// http://mail.openjdk.java.net/pipermail/net-dev/2017-March/010695.html
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public void initialize() {
* @since 3.2
*/
protected void initialize(String serverName, String searchName, String ndotsName) {
reset();
String servers = System.getProperty(serverName);
if (servers != null) {
StringTokenizer st = new StringTokenizer(servers, ",");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class ResolvConfResolverConfigProvider extends BaseResolverConfigProvider

@Override
public void initialize() {
reset();
// first try the default unix config path
if (!tryParseResolveConf("/etc/resolv.conf")) {
// then fallback to netware
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
public class SunJvmResolverConfigProvider extends BaseResolverConfigProvider {
@Override
public void initialize() throws InitializationException {
reset();
try {
Class<?> resConfClass = Class.forName("sun.net.dns.ResolverConfiguration");
Method open = resConfClass.getDeclaredMethod("open");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,10 @@ private static final class InnerWindowsResolverConfigProvider extends BaseResolv

@Override
public void initialize() throws InitializationException {
reset();
// The recommended method of calling the GetAdaptersAddresses function is to pre-allocate a
// 15KB working buffer
Memory buffer = new Memory(15 * 1024);
Memory buffer = new Memory(15 * 1024L);
IntByReference size = new IntByReference(0);
int flags =
GAA_FLAG_SKIP_UNICAST
Expand Down
12 changes: 9 additions & 3 deletions src/test/java/org/xbill/DNS/ResolverConfigTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,13 @@ void testSkipInit() throws Exception {

@Test
void properties() {
String[] dnsServers = {"192.168.1.1", "192.168.1.2", "192.168.1.1"};
String[] dnsServers1 = {"192.168.1.1", "192.168.1.2", "192.168.1.1"};
String[] dnsServers2 = {"192.168.1.3"};
// intentionally adding duplicate search entries for testing
String[] dnsSearch = {"dnsjava.org", "example.com", "dnsjava.org"};
Name[] searchPath =
Arrays.stream(dnsSearch).map(s -> Name.fromConstantString(s + ".")).toArray(Name[]::new);
System.setProperty(DNS_SERVER_PROP, String.join(",", dnsServers));
System.setProperty(DNS_SERVER_PROP, String.join(",", dnsServers1));
System.setProperty(DNS_SEARCH_PROP, String.join(",", dnsSearch));
System.setProperty(DNS_NDOTS_PROP, String.valueOf(5));
try {
Expand All @@ -55,7 +56,12 @@ void properties() {
rc.initialize();

assertEquals(2, rc.servers().size());
assertEquals(dnsServers[0], rc.servers().get(0).getAddress().getHostAddress());
assertEquals(dnsServers1[0], rc.servers().get(0).getAddress().getHostAddress());

// must remove no longer present servers
System.setProperty(DNS_SERVER_PROP, String.join(",", dnsServers2));
rc.initialize();
assertEquals(1, rc.servers().size());

// any duplicate suffixes should be excluded
assertEquals(2, rc.searchPaths().size());
Expand Down