Skip to content

Commit 2abe743

Browse files
authored
Reset existing config before loading it again (#230)
Closes #226
1 parent 351c935 commit 2abe743

8 files changed

+25
-6
lines changed

src/main/java/org/xbill/DNS/config/AndroidResolverConfigProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public static void setContext(Context ctx) {
3131

3232
@Override
3333
public void initialize() throws InitializationException {
34+
reset();
3435
if (context == null) {
3536
throw new InitializationException("Context must be initialized by calling setContext");
3637
}

src/main/java/org/xbill/DNS/config/BaseResolverConfigProvider.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,15 @@ public abstract class BaseResolverConfigProvider implements ResolverConfigProvid
2424
private static final boolean ipv6first = Boolean.getBoolean("java.net.preferIPv6Addresses");
2525

2626
private final List<InetSocketAddress> nameservers = new ArrayList<>(3);
27-
final Logger log = LoggerFactory.getLogger(getClass());
28-
List<Name> searchlist = new ArrayList<>(1);
27+
28+
protected final Logger log = LoggerFactory.getLogger(getClass());
29+
protected final List<Name> searchlist = new ArrayList<>(1);
30+
31+
protected final void reset() {
32+
// TODO v4: make a final void initialize() that clears and then calls abstract doInit()
33+
nameservers.clear();
34+
searchlist.clear();
35+
}
2936

3037
protected void parseSearchPathList(String search, String delimiter) {
3138
if (search != null) {

src/main/java/org/xbill/DNS/config/JndiContextResolverConfigProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ private static final class InnerJndiContextResolverConfigProvider
4343

4444
@Override
4545
public void initialize() {
46+
reset();
4647
Hashtable<String, String> env = new Hashtable<>();
4748
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
4849
// http://mail.openjdk.java.net/pipermail/net-dev/2017-March/010695.html

src/main/java/org/xbill/DNS/config/PropertyResolverConfigProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public void initialize() {
3434
* @since 3.2
3535
*/
3636
protected void initialize(String serverName, String searchName, String ndotsName) {
37+
reset();
3738
String servers = System.getProperty(serverName);
3839
if (servers != null) {
3940
StringTokenizer st = new StringTokenizer(servers, ",");

src/main/java/org/xbill/DNS/config/ResolvConfResolverConfigProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class ResolvConfResolverConfigProvider extends BaseResolverConfigProvider
1717

1818
@Override
1919
public void initialize() {
20+
reset();
2021
// first try the default unix config path
2122
if (!tryParseResolveConf("/etc/resolv.conf")) {
2223
// then fallback to netware

src/main/java/org/xbill/DNS/config/SunJvmResolverConfigProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
public class SunJvmResolverConfigProvider extends BaseResolverConfigProvider {
2121
@Override
2222
public void initialize() throws InitializationException {
23+
reset();
2324
try {
2425
Class<?> resConfClass = Class.forName("sun.net.dns.ResolverConfiguration");
2526
Method open = resConfClass.getDeclaredMethod("open");

src/main/java/org/xbill/DNS/config/WindowsResolverConfigProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ private static final class InnerWindowsResolverConfigProvider extends BaseResolv
5757

5858
@Override
5959
public void initialize() throws InitializationException {
60+
reset();
6061
// The recommended method of calling the GetAdaptersAddresses function is to pre-allocate a
6162
// 15KB working buffer
62-
Memory buffer = new Memory(15 * 1024);
63+
Memory buffer = new Memory(15 * 1024L);
6364
IntByReference size = new IntByReference(0);
6465
int flags =
6566
GAA_FLAG_SKIP_UNICAST

src/test/java/org/xbill/DNS/ResolverConfigTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,13 @@ void testSkipInit() throws Exception {
4141

4242
@Test
4343
void properties() {
44-
String[] dnsServers = {"192.168.1.1", "192.168.1.2", "192.168.1.1"};
44+
String[] dnsServers1 = {"192.168.1.1", "192.168.1.2", "192.168.1.1"};
45+
String[] dnsServers2 = {"192.168.1.3"};
4546
// intentionally adding duplicate search entries for testing
4647
String[] dnsSearch = {"dnsjava.org", "example.com", "dnsjava.org"};
4748
Name[] searchPath =
4849
Arrays.stream(dnsSearch).map(s -> Name.fromConstantString(s + ".")).toArray(Name[]::new);
49-
System.setProperty(DNS_SERVER_PROP, String.join(",", dnsServers));
50+
System.setProperty(DNS_SERVER_PROP, String.join(",", dnsServers1));
5051
System.setProperty(DNS_SEARCH_PROP, String.join(",", dnsSearch));
5152
System.setProperty(DNS_NDOTS_PROP, String.valueOf(5));
5253
try {
@@ -55,7 +56,12 @@ void properties() {
5556
rc.initialize();
5657

5758
assertEquals(2, rc.servers().size());
58-
assertEquals(dnsServers[0], rc.servers().get(0).getAddress().getHostAddress());
59+
assertEquals(dnsServers1[0], rc.servers().get(0).getAddress().getHostAddress());
60+
61+
// must remove no longer present servers
62+
System.setProperty(DNS_SERVER_PROP, String.join(",", dnsServers2));
63+
rc.initialize();
64+
assertEquals(1, rc.servers().size());
5965

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

0 commit comments

Comments
 (0)