UnixResolverDnsServerAddressStreamProvider should allow for empty /etc/resolver dir
Motivation: UnixResolverDnsServerAddressStreamProvider currently throws an exception if /etc/resolver exists but it empty. This shouldn't be an exception and can be tolerated as if there is no contribution from /etc/resolver. Modifications: - Treat /etc/resolver as present and empty the same as not being present Result: UnixResolverDnsServerAddressStreamProvider initialization can tolerate empty /etc/resolver directory.
This commit is contained in:
parent
d040c939e5
commit
d3581b575e
@ -87,11 +87,9 @@ public final class UnixResolverDnsServerAddressStreamProvider implements DnsServ
|
|||||||
* @throws IOException If an error occurs while parsing the input files.
|
* @throws IOException If an error occurs while parsing the input files.
|
||||||
*/
|
*/
|
||||||
public UnixResolverDnsServerAddressStreamProvider(File etcResolvConf, File... etcResolverFiles) throws IOException {
|
public UnixResolverDnsServerAddressStreamProvider(File etcResolvConf, File... etcResolverFiles) throws IOException {
|
||||||
if (etcResolverFiles != null && etcResolverFiles.length == 0) {
|
|
||||||
throw new IllegalArgumentException("etcResolverFiles must either be null or non-empty");
|
|
||||||
}
|
|
||||||
Map<String, DnsServerAddresses> etcResolvConfMap = parse(checkNotNull(etcResolvConf, "etcResolvConf"));
|
Map<String, DnsServerAddresses> etcResolvConfMap = parse(checkNotNull(etcResolvConf, "etcResolvConf"));
|
||||||
domainToNameServerStreamMap = etcResolverFiles != null ? parse(etcResolverFiles) : etcResolvConfMap;
|
final boolean useEtcResolverFiles = etcResolverFiles != null && etcResolverFiles.length != 0;
|
||||||
|
domainToNameServerStreamMap = useEtcResolverFiles ? parse(etcResolverFiles) : etcResolvConfMap;
|
||||||
|
|
||||||
DnsServerAddresses defaultNameServerAddresses = etcResolvConfMap.get(etcResolvConf.getName());
|
DnsServerAddresses defaultNameServerAddresses = etcResolvConfMap.get(etcResolvConf.getName());
|
||||||
if (defaultNameServerAddresses == null) {
|
if (defaultNameServerAddresses == null) {
|
||||||
@ -104,7 +102,7 @@ public final class UnixResolverDnsServerAddressStreamProvider implements DnsServ
|
|||||||
this.defaultNameServerAddresses = defaultNameServerAddresses;
|
this.defaultNameServerAddresses = defaultNameServerAddresses;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (etcResolverFiles != null) {
|
if (useEtcResolverFiles) {
|
||||||
domainToNameServerStreamMap.putAll(etcResolvConfMap);
|
domainToNameServerStreamMap.putAll(etcResolvConfMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,18 @@ public class UnixResolverDnsServerAddressStreamProviderTest {
|
|||||||
assertEquals(DEFAULT_NDOTS, parseEtcResolverFirstNdots(f));
|
assertEquals(DEFAULT_NDOTS, parseEtcResolverFirstNdots(f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void emptyEtcResolverDirectoryDoesNotThrow() throws IOException {
|
||||||
|
File f = buildFile("domain linecorp.local\n" +
|
||||||
|
"nameserver 127.0.0.2\n" +
|
||||||
|
"nameserver 127.0.0.3\n");
|
||||||
|
UnixResolverDnsServerAddressStreamProvider p =
|
||||||
|
new UnixResolverDnsServerAddressStreamProvider(f, folder.newFolder().listFiles());
|
||||||
|
|
||||||
|
DnsServerAddressStream stream = p.nameServerAddressStream("somehost");
|
||||||
|
assertHostNameEquals("127.0.0.2", stream.next());
|
||||||
|
}
|
||||||
|
|
||||||
private File buildFile(String contents) throws IOException {
|
private File buildFile(String contents) throws IOException {
|
||||||
File f = folder.newFile();
|
File f = folder.newFile();
|
||||||
OutputStream out = new FileOutputStream(f);
|
OutputStream out = new FileOutputStream(f);
|
||||||
|
Loading…
Reference in New Issue
Block a user