24 */ |
24 */ |
25 |
25 |
26 package jdk.dns.client.internal; |
26 package jdk.dns.client.internal; |
27 |
27 |
28 import jdk.dns.client.internal.util.ReloadTracker; |
28 import jdk.dns.client.internal.util.ReloadTracker; |
|
29 import jdk.dns.conf.DnsResolverConfiguration; |
29 import sun.net.util.IPAddressUtil; |
30 import sun.net.util.IPAddressUtil; |
30 |
31 |
31 import java.net.InetAddress; |
32 import java.net.InetAddress; |
32 import java.net.ProtocolFamily; |
33 import java.net.ProtocolFamily; |
33 import java.net.UnknownHostException; |
34 import java.net.UnknownHostException; |
51 import java.util.stream.Stream; |
52 import java.util.stream.Stream; |
52 |
53 |
53 public class HostsFileResolver { |
54 public class HostsFileResolver { |
54 private static final String HOSTS_FILE_LOCATION_PROPERTY_VALUE = |
55 private static final String HOSTS_FILE_LOCATION_PROPERTY_VALUE = |
55 AccessController.doPrivileged((PrivilegedAction<String>) |
56 AccessController.doPrivileged((PrivilegedAction<String>) |
56 () -> System.getProperty("jdk.net.hosts.file", "/etc/hosts") |
57 () -> System.getProperty("jdk.dns.client.hosts.file", |
|
58 DnsResolverConfiguration.getDefaultHostsFileLocation()) |
57 ); |
59 ); |
58 private static final ReadWriteLock LOCK = new ReentrantReadWriteLock(); |
60 private static final ReadWriteLock LOCK = new ReentrantReadWriteLock(); |
59 |
61 |
60 // 300 seconds, similar to DnsResolverConfiguration in millis since Epoch |
62 // 300 seconds, similar to DnsResolverConfiguration in millis since Epoch |
61 private static final long REFRESH_TIMEOUT_MILLIS = 300_000; |
63 private static final long REFRESH_TIMEOUT_NANOS = 300_000_000_000L; |
62 private static final ReloadTracker HOSTS_FILE_TRACKER; |
64 private static final ReloadTracker HOSTS_FILE_TRACKER; |
63 private static volatile Map<String, HostFileEntry> HOST_ADDRESSES = Collections.emptyMap(); |
65 private static volatile Map<String, HostFileEntry> HOST_ADDRESSES = Collections.emptyMap(); |
64 |
66 |
65 void loadHostsAddresses() { |
67 void loadHostsAddresses() { |
66 LOCK.readLock().lock(); |
68 LOCK.readLock().lock(); |
260 |
262 |
261 static { |
263 static { |
262 // TODO: Revisit |
264 // TODO: Revisit |
263 try { |
265 try { |
264 var pea = (PrivilegedExceptionAction<ReloadTracker>) () -> |
266 var pea = (PrivilegedExceptionAction<ReloadTracker>) () -> |
265 ReloadTracker.newInstance(Paths.get(HOSTS_FILE_LOCATION_PROPERTY_VALUE), REFRESH_TIMEOUT_MILLIS); |
267 ReloadTracker.newInstance(Paths.get(HOSTS_FILE_LOCATION_PROPERTY_VALUE), REFRESH_TIMEOUT_NANOS); |
266 HOSTS_FILE_TRACKER = System.getSecurityManager() == null ? pea.run() : |
268 HOSTS_FILE_TRACKER = System.getSecurityManager() == null ? pea.run() : |
267 AccessController.doPrivileged(pea); |
269 AccessController.doPrivileged(pea); |
268 } catch (PrivilegedActionException pae) { |
270 } catch (PrivilegedActionException pae) { |
269 throw new RuntimeException("Error registering hosts file watch service", pae.getCause()); |
271 throw new RuntimeException("Error registering hosts file watch service", pae.getCause()); |
270 } catch (Exception e) { |
272 } catch (Exception e) { |