diff -r 027e4cb87353 -r 465a15dd6bed src/jdk.dns.client/share/classes/jdk/dns/client/internal/DnsClient.java --- a/src/jdk.dns.client/share/classes/jdk/dns/client/internal/DnsClient.java Thu Nov 07 18:44:09 2019 +0000 +++ b/src/jdk.dns.client/share/classes/jdk/dns/client/internal/DnsClient.java Thu Nov 07 18:46:06 2019 +0000 @@ -27,11 +27,13 @@ import jdk.dns.client.ex.DnsCommunicationException; import jdk.dns.client.ex.DnsNameNotFoundException; -import jdk.dns.client.ex.DnsOperationNotSupportedException; import jdk.dns.client.ex.DnsResolverException; -import jdk.dns.client.ex.DnsServiceUnavailableException; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -44,7 +46,6 @@ import java.security.PrivilegedAction; import java.security.SecureRandom; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -99,7 +100,6 @@ private int retries; // number of UDP retries - private static final SecureRandom random; static { @@ -125,14 +125,13 @@ * "timeout" is the initial timeout interval (in ms) for queries, * and "retries" gives the number of retries per server. */ - public DnsClient(List servers, int timeout, int retries) - throws UnknownHostException { + public DnsClient(List servers, int timeout, int retries) { this.timeout = timeout; this.retries = retries; var serversList = new ArrayList(); var serverPortsList = new ArrayList(); - for (String serverString:servers) { + for (String serverString : servers) { // Is optional port given? int colon = serverString.indexOf(':', @@ -155,8 +154,12 @@ byte[] addr = System.getSecurityManager() == null ? pa.run() : AccessController.doPrivileged(pa); if (addr != null) { - serversList.add(InetAddress.getByAddress(server, addr)); - serverPortsList.add(serverPort); + try { + serversList.add(InetAddress.getByAddress(server, addr)); + serverPortsList.add(serverPort); + } catch (UnknownHostException e) { + // Malformed IP address is specified - will ignore it + } } } this.servers = Collections.unmodifiableList(serversList); @@ -257,8 +260,7 @@ Header hdr = new Header(msg, msg.length); if (auth && !hdr.authoritative) { - caughtException = new DnsNameNotFoundException( - "DNS response not authoritative"); + caughtException = new DnsResolverException("DNS response not authoritative"); doNotRetry[i] = true; continue; } @@ -283,7 +285,7 @@ } Header hdr2 = new Header(msg2, msg2.length); if (hdr2.query) { - throw new DnsCommunicationException( + throw new DnsResolverException( "DNS error: expecting response"); } checkResponseCode(hdr2); @@ -362,7 +364,10 @@ DatagramPacket ipkt = new DatagramPacket(new byte[8000], 8000); // Packets may only be sent to or received from this server address // TODO: Revisit - var pa = (PrivilegedAction) () -> {dc.socket().connect(server, port); return null;}; + var pa = (PrivilegedAction) () -> { + dc.socket().connect(server, port); + return null; + }; if (System.getSecurityManager() == null) { pa.run(); } else { @@ -461,6 +466,7 @@ Packet pkt = new Packet(pktLen); short flags = recursion ? Header.RD_BIT : 0; + // flags = (short) (flags | Header.CD_BIT | Header.AD_BIT); pkt.putShort(xid, IDENT_OFFSET); pkt.putShort(flags, FLAGS_OFFSET); @@ -536,7 +542,7 @@ Header hdr = new Header(pkt, pkt.length); if (hdr.query) { - throw new DnsCommunicationException("DNS error: expecting response"); + throw new DnsResolverException("DNS error: expecting response"); } if (!reqs.containsKey(xid)) { // already received, ignore the response @@ -562,7 +568,7 @@ // Check that the type/class/name in the query section of the // response match those in the original query - if ((qtype == ResourceRecord.QTYPE_STAR || + if ((qtype == ResourceRecord.TYPE_ANY || qtype == rr.getType()) && (qclass == ResourceRecord.QCLASS_STAR || qclass == rr.getRrclass()) && @@ -632,19 +638,7 @@ : "DNS error"; msg += " [response code " + rcode + "]"; - - switch (rcode) { - case SERVER_FAILURE: - throw new DnsServiceUnavailableException(msg); - case NAME_ERROR: - throw new DnsNameNotFoundException(msg); - case NOT_IMPL: - case REFUSED: - throw new DnsOperationNotSupportedException(msg); - case FORMAT_ERROR: - default: - throw new DnsResolverException(msg); - } + throw new DnsResolverException(msg); } //------------------------------------------------------------------------- @@ -663,8 +657,8 @@ class Tcp { private final Socket sock; - private final java.io.InputStream in; - final java.io.OutputStream out; + private final InputStream in; + final OutputStream out; private int timeoutLeft; Tcp(InetAddress server, int port, int timeout) throws IOException { @@ -677,8 +671,8 @@ throw new SocketTimeoutException(); sock.setTcpNoDelay(true); - out = new java.io.BufferedOutputStream(sock.getOutputStream()); - in = new java.io.BufferedInputStream(sock.getInputStream()); + out = new BufferedOutputStream(sock.getOutputStream()); + in = new BufferedInputStream(sock.getInputStream()); } catch (Exception e) { try { sock.close();