Skip to content

Commit 7c526af

Browse files
committed
Make use of BaseResolverConfigProvider in all built-ins
This also removes the limitation to 3 nameservers of the resolv.conf reader. We're not bound to the libc limitation, there's no need to restrict the number of server.
1 parent eed1266 commit 7c526af

4 files changed

Lines changed: 9 additions & 54 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private void initializeNameservers() {
4949
for (int i = 1; i <= 4; i++) {
5050
String server = SystemProperties.get("net.dns" + i);
5151
if (server != null && !server.isEmpty()) {
52-
nameservers.add(new InetSocketAddress(server, SimpleResolver.DEFAULT_PORT));
52+
addNameserver(new InetSocketAddress(server, SimpleResolver.DEFAULT_PORT));
5353
}
5454
}
5555
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ protected void parseResolvConf(InputStream in) throws IOException {
4949

5050
switch (st.nextToken()) {
5151
case "nameserver":
52-
addServer(st.nextToken());
52+
addNameserver(new InetSocketAddress(st.nextToken(), SimpleResolver.DEFAULT_PORT));
5353
break;
5454

5555
case "domain":
@@ -110,12 +110,6 @@ protected void parseResolvConf(InputStream in) throws IOException {
110110
}
111111
}
112112

113-
private void addServer(String server) {
114-
if (nameservers.size() < 3) {
115-
addNameserver(new InetSocketAddress(server, SimpleResolver.DEFAULT_PORT));
116-
}
117-
}
118-
119113
@Override
120114
public int ndots() {
121115
return ndots;

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

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
// SPDX-License-Identifier: BSD-2-Clause
22
package org.xbill.DNS.config;
33

4-
import static java.util.stream.Collectors.toList;
54

65
import java.lang.reflect.Method;
76
import java.net.InetSocketAddress;
8-
import java.util.Collections;
97
import java.util.List;
10-
import org.xbill.DNS.Name;
11-
import org.xbill.DNS.TextParseException;
128

139
/**
1410
* Resolver config provider that queries the traditional class {@code
@@ -17,10 +13,7 @@
1713
* <p>As of Java 9, this generates an illegal reflective access exception and on Windows, this may
1814
* return invalid nameservers of disconnected NICs.
1915
*/
20-
public class SunJvmResolverConfigProvider implements ResolverConfigProvider {
21-
private List<InetSocketAddress> nameservers = null;
22-
private List<Name> searchlist = null;
23-
16+
public class SunJvmResolverConfigProvider extends BaseResolverConfigProvider {
2417
public void initialize() throws InitializationException {
2518
try {
2619
Class<?> resConfClass = Class.forName("sun.net.dns.ResolverConfiguration");
@@ -30,46 +23,21 @@ public void initialize() throws InitializationException {
3023
Method nameserversMethod = resConfClass.getMethod("nameservers");
3124
@SuppressWarnings("unchecked")
3225
List<String> jvmNameservers = (List<String>) nameserversMethod.invoke(resConf);
33-
nameservers =
34-
jvmNameservers.stream().map(ns -> new InetSocketAddress(ns, 53)).collect(toList());
26+
for (String ns : jvmNameservers) {
27+
addNameserver(new InetSocketAddress(ns, 53));
28+
}
3529

3630
Method searchlistMethod = resConfClass.getMethod("searchlist");
3731
@SuppressWarnings("unchecked")
3832
List<String> jvmSearchlist = (List<String>) searchlistMethod.invoke(resConf);
39-
searchlist =
40-
jvmSearchlist.stream()
41-
.map(
42-
n -> {
43-
try {
44-
return Name.fromString(n, Name.root);
45-
} catch (TextParseException e) {
46-
throw new IllegalArgumentException(e);
47-
}
48-
})
49-
.collect(toList());
33+
for (String n : jvmSearchlist) {
34+
addSearchPath(n);
35+
}
5036
} catch (Exception e) {
5137
throw new InitializationException(e);
5238
}
5339
}
5440

55-
@Override
56-
public List<InetSocketAddress> servers() {
57-
if (nameservers == null) {
58-
throw new IllegalStateException("not initialized");
59-
}
60-
61-
return Collections.unmodifiableList(nameservers);
62-
}
63-
64-
@Override
65-
public List<Name> searchPaths() {
66-
if (searchlist == null) {
67-
throw new IllegalStateException("not initialized");
68-
}
69-
70-
return Collections.unmodifiableList(searchlist);
71-
}
72-
7341
@Override
7442
public boolean isEnabled() {
7543
return Boolean.getBoolean("dnsjava.configprovider.sunjvm.enabled");

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
44
import static org.junit.jupiter.api.Assertions.assertFalse;
5-
import static org.junit.jupiter.api.Assertions.assertThrows;
65
import static org.junit.jupiter.api.Assertions.assertTrue;
76
import static org.xbill.DNS.config.PropertyResolverConfigProvider.DNS_NDOTS_PROP;
87
import static org.xbill.DNS.config.PropertyResolverConfigProvider.DNS_SEARCH_PROP;
@@ -160,12 +159,6 @@ void jndi() {
160159
rc.initialize();
161160
}
162161

163-
@Test
164-
void sunJvmThrowsIfNotInitialized() {
165-
SunJvmResolverConfigProvider rc = new SunJvmResolverConfigProvider();
166-
assertThrows(IllegalStateException.class, rc::servers);
167-
}
168-
169162
@Test
170163
void sunJvm() throws InitializationException {
171164
SunJvmResolverConfigProvider rc = new SunJvmResolverConfigProvider();

0 commit comments

Comments
 (0)