changeset 14108:d11ad4b19348

8134577: Eliminate or standardize a replacement for sun.net.spi.nameservice.NameServiceDescriptor Reviewed-by: chegar, alanb
author msheppar
date Mon, 11 Apr 2016 03:00:50 +0100
parents 550572253bd8
children ce6364a73186
files src/java.base/share/classes/java/net/InetAddress.java src/java.base/share/classes/module-info.java src/java.base/share/classes/sun/net/spi/nameservice/NameService.java src/java.base/share/classes/sun/net/spi/nameservice/NameServiceDescriptor.java src/jdk.naming.dns/share/classes/module-info.java src/jdk.naming.dns/share/classes/sun/net/spi/nameservice/dns/DNSNameService.java src/jdk.naming.dns/share/classes/sun/net/spi/nameservice/dns/DNSNameServiceDescriptor.java test/ProblemList.txt test/java/net/Inet4Address/DummyNameService.java test/java/net/Inet4Address/DummyNameServiceDescriptor.java test/java/net/Inet4Address/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/java/net/Inet4Address/TestToNumericFormatHosts test/java/net/Inet4Address/textToNumericFormat.java test/java/net/InetAddress/InternalNameServiceTest.java test/java/net/InetAddress/InternalNameServiceWithHostsFileTest.java test/java/net/InetAddress/InternalNameServiceWithNoHostsFileTest.java test/java/net/InetAddress/TestHosts test/java/net/InetAddress/TestHosts-III test/java/net/URLPermission/nstest/LookupTest.java test/java/net/URLPermission/nstest/LookupTestHosts test/java/net/URLPermission/nstest/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/java/net/URLPermission/nstest/SimpleNameService.java test/java/net/URLPermission/nstest/SimpleNameServiceDescriptor.java test/java/net/URLPermission/nstest/lookup.sh test/javax/net/ssl/DTLS/TEST.properties test/javax/net/ssl/DTLSv10/TEST.properties test/javax/net/ssl/TLS/TEST.properties test/javax/net/ssl/TLSv1/TEST.properties test/javax/net/ssl/TLSv11/TEST.properties test/sun/net/InetAddress/nameservice/chaining/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/sun/net/InetAddress/nameservice/chaining/Providers.java test/sun/net/InetAddress/nameservice/chaining/Simple1NameServiceDescriptor.java test/sun/net/InetAddress/nameservice/chaining/Simple2NameServiceDescriptor.java test/sun/net/InetAddress/nameservice/chaining/SimpleNameService.java test/sun/net/InetAddress/nameservice/deadlock/Hang.java test/sun/net/InetAddress/nameservice/deadlock/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameService.java test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameServiceDescriptor.java test/sun/net/InetAddress/nameservice/dns/cname.sh test/sun/net/InetAddress/nameservice/simple/CacheTest.java test/sun/net/InetAddress/nameservice/simple/CacheTestHosts test/sun/net/InetAddress/nameservice/simple/DefaultCaching.java test/sun/net/InetAddress/nameservice/simple/DefaultCachingHosts test/sun/net/InetAddress/nameservice/simple/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/sun/net/InetAddress/nameservice/simple/SimpleNameService.java test/sun/net/InetAddress/nameservice/simple/SimpleNameServiceDescriptor.java test/sun/security/krb5/auto/BogusKDC.java test/sun/security/krb5/auto/HttpNegotiateServer.java test/sun/security/krb5/auto/KDC.java test/sun/security/krb5/auto/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/sun/security/krb5/auto/NoAddresses.java test/sun/security/krb5/auto/Renew.java test/sun/security/krb5/auto/Renewal.java test/sun/security/krb5/auto/SSLwithPerms.java test/sun/security/krb5/auto/TEST.properties test/sun/security/krb5/auto/TestHosts test/sun/security/krb5/auto/principalProperty/TestHosts test/sun/security/krb5/auto/principalProperty/principalSystemPropTest.policy test/sun/security/krb5/auto/unbound.ssl.policy test/sun/security/krb5/canonicalize/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/sun/security/krb5/canonicalize/Test.java test/sun/security/krb5/canonicalize/TestHosts test/sun/security/x509/URICertStore/ExtensionsWithLDAP.java test/sun/security/x509/URICertStore/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor
diffstat 64 files changed, 831 insertions(+), 1814 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.base/share/classes/java/net/InetAddress.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/src/java.base/share/classes/java/net/InetAddress.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,10 @@
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Objects;
-import java.util.ServiceLoader;
+import java.util.Scanner;
 import java.security.AccessController;
+import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.ObjectStreamException;
 import java.io.ObjectStreamField;
 import java.io.IOException;
@@ -49,7 +51,6 @@
 import sun.security.action.*;
 import sun.net.InetAddressCachePolicy;
 import sun.net.util.IPAddressUtil;
-import sun.net.spi.nameservice.*;
 
 /**
  * This class represents an Internet Protocol (IP) address.
@@ -207,6 +208,7 @@
     /* Specify address family preference */
     static transient boolean preferIPv6Address = false;
 
+
     static class InetAddressHolder {
         /**
          * Reserve the original application specified hostname.
@@ -279,7 +281,7 @@
     }
 
     /* Used to store the name service provider */
-    private static List<NameService> nameServices = null;
+    private static transient NameService nameService = null;
 
     /* Used to store the best available hostname */
     private transient String canonicalHostName = null;
@@ -623,7 +625,6 @@
      */
     private static String getHostFromNameService(InetAddress addr, boolean check) {
         String host = null;
-        for (NameService nameService : nameServices) {
             try {
                 // first lookup the hostname
                 host = nameService.getHostByAddr(addr.getAddress());
@@ -657,18 +658,12 @@
                     host = addr.getHostAddress();
                     return host;
                 }
-
-                break;
-
             } catch (SecurityException e) {
                 host = addr.getHostAddress();
-                break;
             } catch (UnknownHostException e) {
                 host = addr.getHostAddress();
                 // let next provider resolve the hostname
             }
-        }
-
         return host;
     }
 
@@ -860,88 +855,287 @@
         }
     }
 
-    static InetAddressImpl  impl;
+    /**
+     * NameService provides host and address lookup service
+     *
+     * @since 9
+     */
+    private interface NameService {
 
-    private static NameService createNSProvider(String provider) {
-        if (provider == null)
-            return null;
+        /**
+         * Lookup a host mapping by name. Retrieve the IP addresses
+         * associated with a host
+         *
+         * @param host the specified hostname
+         * @return array of IP addresses for the requested host
+         * @throws UnknownHostException
+         *             if no IP address for the {@code host} could be found
+         */
+        InetAddress[] lookupAllHostAddr(String host)
+                throws UnknownHostException;
 
-        NameService nameService = null;
-        if (provider.equals("default")) {
-            // initialize the default name service
-            nameService = new NameService() {
+        /**
+         * Lookup the host corresponding to the IP address provided
+         *
+         * @param addr byte array representing an IP address
+         * @return {@code String} representing the host name mapping
+         * @throws UnknownHostException
+         *             if no host found for the specified IP address
+         */
+        String getHostByAddr(byte[] addr) throws UnknownHostException;
+
+    }
+
+    /**
+     * The default NameService implementation, which delegates to the underlying
+     * OS network libraries to resolve host address mappings.
+     *
+     * @since 9
+     */
+    private static final class PlatformNameService implements NameService {
+
                 public InetAddress[] lookupAllHostAddr(String host)
                     throws UnknownHostException {
+
                     return impl.lookupAllHostAddr(host);
+
+                            }
+
+        public String getHostByAddr(byte[] addr) throws UnknownHostException {
+
+            return impl.getHostByAddr(addr);
+
+        }
+
+    }
+
+    /**
+     * The HostsFileNameService provides host address mapping
+     * by reading the entries in a hosts file, which is specified by
+     * {@code jdk.net.hosts.file} system property
+     *
+     * <p>The file format is that which corresponds with the /etc/hosts file
+     * IP Address host alias list.
+     *
+     * <p>When the file lookup is enabled it replaces the default NameService
+     * implementation
+     *
+     * @since 9
+     */
+    private static final class HostsFileNameService implements NameService {
+
+        private final String hostsFile;
+
+        public HostsFileNameService (String hostsFileName) {
+            this.hostsFile = hostsFileName;
+        }
+
+        private  String addrToString(byte addr[]) {
+          String stringifiedAddress = null;
+
+            if (addr.length == Inet4Address.INADDRSZ) {
+                stringifiedAddress = Inet4Address.numericToTextFormat(addr);
+            } else { // treat as an IPV6 jobby
+                byte[] newAddr
+                    = IPAddressUtil.convertFromIPv4MappedAddress(addr);
+                if (newAddr != null) {
+                   stringifiedAddress = Inet4Address.numericToTextFormat(addr);
+                } else {
+                    stringifiedAddress = Inet6Address.numericToTextFormat(addr);
                 }
-                public String getHostByAddr(byte[] addr)
-                    throws UnknownHostException {
-                    return impl.getHostByAddr(addr);
+            }
+            return stringifiedAddress;
+        }
+
+        /**
+         * Lookup the host name  corresponding to the IP address provided.
+         * Search the configured host file a host name corresponding to
+         * the specified IP address.
+         *
+         * @param addr byte array representing an IP address
+         * @return {@code String} representing the host name mapping
+         * @throws UnknownHostException
+         *             if no host found for the specified IP address
+         */
+        @Override
+        public String getHostByAddr(byte[] addr) throws UnknownHostException {
+            String hostEntry;
+            String host = null;
+
+            String addrString = addrToString(addr);
+            try (Scanner hostsFileScanner = new Scanner(new File(hostsFile), "UTF-8")) {
+                while (hostsFileScanner.hasNextLine()) {
+                    hostEntry = hostsFileScanner.nextLine();
+                    if (!hostEntry.startsWith("#")) {
+                        hostEntry = removeComments(hostEntry);
+                        if (hostEntry.contains(addrString)) {
+                            host = extractHost(hostEntry, addrString);
+                            if (host != null) {
+                                break;
+                            }
+                        }
+                    }
                 }
-            };
-        } else {
-            final String providerName = provider;
-            try {
-                nameService = java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedExceptionAction<>() {
-                        public NameService run() {
-                            Iterator<NameServiceDescriptor> itr =
-                                ServiceLoader.load(NameServiceDescriptor.class)
-                                    .iterator();
-                            while (itr.hasNext()) {
-                                NameServiceDescriptor nsd = itr.next();
-                                if (providerName.
-                                    equalsIgnoreCase(nsd.getType()+","
-                                        +nsd.getProviderName())) {
-                                    try {
-                                        return nsd.createNameService();
-                                    } catch (Exception e) {
-                                        e.printStackTrace();
-                                        System.err.println(
-                                            "Cannot create name service:"
-                                             +providerName+": " + e);
-                                    }
+            } catch (FileNotFoundException e) {
+                throw new UnknownHostException("Unable to resolve address "
+                        + addrString + " as hosts file " + hostsFile
+                        + " not found ");
+            }
+
+            if ((host == null) || (host.equals("")) || (host.equals(" "))) {
+                throw new UnknownHostException("Requested address "
+                        + addrString
+                        + " resolves to an invalid entry in hosts file "
+                        + hostsFile);
+            }
+            return host;
+        }
+
+
+        /**
+         * <p>Lookup a host mapping by name. Retrieve the IP addresses
+         * associated with a host.
+         *
+         * <p>Search the configured hosts file for the addresses assocaited with
+         * with the specified host name.
+         *
+         * @param host the specified hostname
+         * @return array of IP addresses for the requested host
+         * @throws UnknownHostException
+         *             if no IP address for the {@code host} could be found
+         */
+
+        public InetAddress[] lookupAllHostAddr(String host)
+                throws UnknownHostException {
+            String hostEntry;
+            String addrStr = null;
+            InetAddress[] res = null;
+            byte addr[] = new byte[4];
+            ArrayList<InetAddress> inetAddresses = null;
+
+            // lookup the file and create a list InetAddress for the specfied host
+            try (Scanner hostsFileScanner = new Scanner(new File(hostsFile), "UTF-8")) {
+                while (hostsFileScanner.hasNextLine()) {
+                    hostEntry = hostsFileScanner.nextLine();
+                    if (!hostEntry.startsWith("#")) {
+                        hostEntry = removeComments(hostEntry);
+                        if (hostEntry.contains(host)) {
+                            addrStr = extractHostAddr(hostEntry, host);
+                            if ((addrStr != null) && (!addrStr.equals(""))) {
+                                addr = createAddressByteArray(addrStr);
+                                if (inetAddresses == null) {
+                                    inetAddresses = new ArrayList<>(1);
+                                }
+                                if (addr != null) {
+                                    inetAddresses.add(InetAddress.getByAddress(host, addr));
                                 }
                             }
-
-                            return null;
                         }
                     }
-                );
-            } catch (java.security.PrivilegedActionException e) {
+                }
+            } catch (FileNotFoundException e) {
+                throw new UnknownHostException("Unable to resolve host " + host
+                        + " as hosts file " + hostsFile + " not found ");
             }
+
+            if (inetAddresses != null) {
+                res = inetAddresses.toArray(new InetAddress[inetAddresses.size()]);
+            } else {
+                throw new UnknownHostException("Unable to resolve host " + host
+                        + " in hosts file " + hostsFile);
+            }
+            return res;
         }
 
-        return nameService;
+        private String removeComments(String hostsEntry) {
+            String filteredEntry = hostsEntry;
+            int hashIndex;
+
+            if ((hashIndex = hostsEntry.indexOf("#")) != -1) {
+                filteredEntry = hostsEntry.substring(0, hashIndex);
+            }
+            return filteredEntry;
+        }
+
+        private byte [] createAddressByteArray(String addrStr) {
+            byte[] addrArray;
+            // check if IPV4 address - most likely
+            addrArray = IPAddressUtil.textToNumericFormatV4(addrStr);
+            if (addrArray == null) {
+                addrArray = IPAddressUtil.textToNumericFormatV6(addrStr);
+            }
+            return addrArray;
+        }
+
+        /** host to ip address mapping */
+        private String extractHostAddr(String hostEntry, String host) {
+            String[] mapping = hostEntry.split("\\s+");
+            String hostAddr = null;
+
+            if (mapping.length >= 2) {
+                // look at the host aliases
+                for (int i = 1; i < mapping.length; i++) {
+                    if (mapping[i].equalsIgnoreCase(host)) {
+                        hostAddr = mapping[0];
+                    }
+                }
+            }
+            return hostAddr;
+        }
+
+        /**
+         * IP Address to host mapping
+         * use first host alias in list
+         */
+        private String extractHost(String hostEntry, String addrString) {
+            String[] mapping = hostEntry.split("\\s+");
+            String host = null;
+
+            if (mapping.length >= 2) {
+                if (mapping[0].equalsIgnoreCase(addrString)) {
+                    host = mapping[1];
+                }
+            }
+            return host;
+        }
     }
 
+    static final InetAddressImpl  impl;
+
     static {
         // create the impl
         impl = InetAddressImplFactory.create();
 
-        // get name service if provided and requested
-        String provider = null;;
-        String propPrefix = "sun.net.spi.nameservice.provider.";
-        int n = 1;
-        nameServices = new ArrayList<>();
-        provider = AccessController.doPrivileged(
-                new GetPropertyAction(propPrefix + n));
-        while (provider != null) {
-            NameService ns = createNSProvider(provider);
-            if (ns != null)
-                nameServices.add(ns);
-
-            n++;
-            provider = AccessController.doPrivileged(
-                    new GetPropertyAction(propPrefix + n));
+        // create name service
+        nameService = createNameService();
         }
 
-        // if not designate any name services provider,
-        // create a default one
-        if (nameServices.size() == 0) {
-            NameService ns = createNSProvider("default");
-            nameServices.add(ns);
+    /**
+     * Create an instance of the NameService interface based on
+     * the setting of the {@codejdk.net.hosts.file} system property.
+     *
+     * <p>The default NameService is the PlatformNameService, which typically
+     * delegates name and address resolution calls to the underlying
+     * OS network libraries.
+     *
+     * <p> A HostsFileNameService is created if the {@code jdk.net.hosts.file}
+     * system property is set. If the specified file doesn't exist, the name or
+     * address lookup will result in an UnknownHostException. Thus, non existent
+     * hosts file is handled as if the file is empty.
+     *
+     * @return a NameService
+     */
+    private static NameService createNameService() {
+
+        String hostsFileName = AccessController
+                .doPrivileged(new GetPropertyAction("jdk.net.hosts.file"));
+        NameService theNameService;
+        if (hostsFileName != null) {
+            theNameService = new HostsFileNameService(hostsFileName);
+        } else {
+            theNameService = new PlatformNameService();
         }
+        return theNameService;
     }
 
     /**
@@ -1286,20 +1480,16 @@
         InetAddress[] addresses = null;
         UnknownHostException ex = null;
 
-        for (NameService nameService : nameServices) {
             try {
                 addresses = nameService.lookupAllHostAddr(host);
-                break;
             } catch (UnknownHostException uhe) {
                 if (host.equalsIgnoreCase("localhost")) {
                     addresses = new InetAddress[] { impl.loopbackAddress() };
-                    break;
                 }
                 else {
                     ex = uhe;
                 }
             }
-        }
 
         if (addresses == null) {
             throw ex == null ? new UnknownHostException(host) : ex;
--- a/src/java.base/share/classes/module-info.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/src/java.base/share/classes/module-info.java	Mon Apr 11 03:00:50 2016 +0100
@@ -192,8 +192,6 @@
     exports sun.net.dns to
         java.security.jgss,
         jdk.naming.dns;
-    exports sun.net.spi.nameservice to
-        jdk.naming.dns;
     exports sun.net.util to
         java.desktop,
         jdk.jconsole,
@@ -286,7 +284,6 @@
 
     // JDK-internal service types
     uses jdk.internal.logger.DefaultLoggerFinder;
-    uses sun.net.spi.nameservice.NameServiceDescriptor;
     uses sun.security.ssl.ClientKeyExchangeService;
     uses sun.util.spi.CalendarProvider;
     uses sun.util.locale.provider.LocaleDataMetaInfo;
--- a/src/java.base/share/classes/sun/net/spi/nameservice/NameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.net.spi.nameservice;
-
-import java.net.UnknownHostException;
-
-public interface NameService {
-    public java.net.InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException;
-    public String getHostByAddr(byte[] addr) throws UnknownHostException;
-}
--- a/src/java.base/share/classes/sun/net/spi/nameservice/NameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.net.spi.nameservice;
-
-public interface NameServiceDescriptor {
-    /**
-     * Create a new instance of the corresponding name service.
-     */
-    public NameService createNameService () throws Exception ;
-
-    /**
-     * Returns this service provider's name
-     *
-     */
-    public String getProviderName();
-
-    /**
-     * Returns this name service type
-     * "dns" "nis" etc
-     */
-    public String getType();
-}
--- a/src/jdk.naming.dns/share/classes/module-info.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/src/jdk.naming.dns/share/classes/module-info.java	Mon Apr 11 03:00:50 2016 +0100
@@ -31,7 +31,5 @@
 
     provides javax.naming.spi.InitialContextFactory
         with com.sun.jndi.dns.DnsContextFactory;
-    provides sun.net.spi.nameservice.NameServiceDescriptor
-        with sun.net.spi.nameservice.dns.DNSNameServiceDescriptor;
 }
 
--- a/src/jdk.naming.dns/share/classes/sun/net/spi/nameservice/dns/DNSNameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,501 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.net.spi.nameservice.dns;
-
-import java.lang.ref.SoftReference;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.NamingManager;
-import java.util.*;
-import sun.net.util.IPAddressUtil;
-import sun.net.dns.ResolverConfiguration;
-import sun.net.spi.nameservice.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/*
- * A name service provider based on JNDI-DNS.
- */
-
-public final class DNSNameService implements NameService {
-
-    // List of domains specified by property
-    private LinkedList<String> domainList = null;
-
-    // JNDI-DNS URL for name servers specified via property
-    private String nameProviderUrl = null;
-
-    // Per-thread soft cache of the last temporary context
-    private static ThreadLocal<SoftReference<ThreadContext>> contextRef =
-            new ThreadLocal<>();
-
-    // Simple class to encapsulate the temporary context
-    private static class ThreadContext {
-        private DirContext dirCtxt;
-        private List<String> nsList;
-
-        public ThreadContext(DirContext dirCtxt, List<String> nsList) {
-            this.dirCtxt = dirCtxt;
-            this.nsList = nsList;
-        }
-
-        public DirContext dirContext() {
-            return dirCtxt;
-        }
-
-        public List<String> nameservers() {
-            return nsList;
-        }
-    }
-
-    // Returns a per-thread DirContext
-    private DirContext getTemporaryContext() throws NamingException {
-        SoftReference<ThreadContext> ref = contextRef.get();
-        ThreadContext thrCtxt = null;
-        List<String> nsList = null;
-
-        // if no property specified we need to obtain the list of servers
-        //
-        if (nameProviderUrl == null)
-            nsList = ResolverConfiguration.open().nameservers();
-
-        // if soft reference hasn't been gc'ed no property has been
-        // specified then we need to check if the DNS configuration
-        // has changed.
-        //
-        if ((ref != null) && ((thrCtxt = ref.get()) != null)) {
-            if (nameProviderUrl == null) {
-                if (!thrCtxt.nameservers().equals(nsList)) {
-                    // DNS configuration has changed
-                    thrCtxt = null;
-                }
-            }
-        }
-
-        // new thread context needs to be created
-        if (thrCtxt == null) {
-            final Hashtable<String,Object> env = new Hashtable<>();
-            env.put("java.naming.factory.initial",
-                    "com.sun.jndi.dns.DnsContextFactory");
-
-            // If no nameservers property specified we create provider URL
-            // based on system configured name servers
-            //
-            String provUrl = nameProviderUrl;
-            if (provUrl == null) {
-                provUrl = createProviderURL(nsList);
-                if (provUrl.length() == 0) {
-                    throw new RuntimeException("bad nameserver configuration");
-                }
-            }
-            env.put("java.naming.provider.url", provUrl);
-
-            // Need to create directory context in privileged block
-            // as JNDI-DNS needs to resolve the name servers.
-            //
-            DirContext dirCtxt;
-            try {
-                dirCtxt = java.security.AccessController.doPrivileged(
-                        new java.security.PrivilegedExceptionAction<DirContext>() {
-                            public DirContext run() throws NamingException {
-                                // Create the DNS context using NamingManager rather than using
-                                // the initial context constructor. This avoids having the initial
-                                // context constructor call itself.
-                                Context ctx = NamingManager.getInitialContext(env);
-                                if (!(ctx instanceof DirContext)) {
-                                    return null; // cannot create a DNS context
-                                }
-                                return (DirContext)ctx;
-                            }
-                    });
-            } catch (java.security.PrivilegedActionException pae) {
-                throw (NamingException)pae.getException();
-            }
-
-            // create new soft reference to our thread context
-            //
-            thrCtxt = new ThreadContext(dirCtxt, nsList);
-            contextRef.set(new SoftReference<ThreadContext>(thrCtxt));
-        }
-
-        return thrCtxt.dirContext();
-    }
-
-    /**
-     * Resolves the specified entry in DNS.
-     *
-     * Canonical name records are recursively resolved (to a maximum
-     * of 5 to avoid performance hit and potential CNAME loops).
-     *
-     * @param   ctx     JNDI directory context
-     * @param   name    name to resolve
-     * @param   ids     record types to search
-     * @param   depth   call depth - pass as 0.
-     *
-     * @return  array list with results (will have at least on entry)
-     *
-     * @throws  UnknownHostException if lookup fails or other error.
-     */
-    private ArrayList<String> resolve(final DirContext ctx, final String name,
-                                      final String[] ids, int depth)
-            throws UnknownHostException
-    {
-        ArrayList<String> results = new ArrayList<>();
-        Attributes attrs;
-
-        // do the query
-        try {
-            attrs = java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedExceptionAction<Attributes>() {
-                        public Attributes run() throws NamingException {
-                            return ctx.getAttributes(name, ids);
-                        }
-                });
-        } catch (java.security.PrivilegedActionException pae) {
-            throw new UnknownHostException(pae.getException().getMessage());
-        }
-
-        // non-requested type returned so enumeration is empty
-        NamingEnumeration<? extends Attribute> ne = attrs.getAll();
-        if (!ne.hasMoreElements()) {
-            throw new UnknownHostException("DNS record not found");
-        }
-
-        // iterate through the returned attributes
-        UnknownHostException uhe = null;
-        try {
-            while (ne.hasMoreElements()) {
-                Attribute attr = ne.next();
-                String attrID = attr.getID();
-
-                for (NamingEnumeration<?> e = attr.getAll(); e.hasMoreElements();) {
-                    String addr = (String)e.next();
-
-                    // for canoncical name records do recursive lookup
-                    // - also check for CNAME loops to avoid stack overflow
-
-                    if (attrID.equals("CNAME")) {
-                        if (depth > 4) {
-                            throw new UnknownHostException(name + ": possible CNAME loop");
-                        }
-                        try {
-                            results.addAll(resolve(ctx, addr, ids, depth+1));
-                        } catch (UnknownHostException x) {
-                            // canonical name can't be resolved.
-                            if (uhe == null)
-                                uhe = x;
-                        }
-                    } else {
-                        results.add(addr);
-                    }
-                }
-            }
-        } catch (NamingException nx) {
-            throw new UnknownHostException(nx.getMessage());
-        }
-
-        // pending exception as canonical name could not be resolved.
-        if (results.isEmpty() && uhe != null) {
-            throw uhe;
-        }
-
-        return results;
-    }
-
-    public DNSNameService() throws Exception {
-
-        // default domain
-        String domain = AccessController.doPrivileged(
-            (PrivilegedAction<String>) () -> System.getProperty("sun.net.spi.nameservice.domain"));
-        if (domain != null && domain.length() > 0) {
-            domainList = new LinkedList<String>();
-            domainList.add(domain);
-        }
-
-        // name servers
-        String nameservers = AccessController.doPrivileged(
-            (PrivilegedAction<String>) () -> System.getProperty("sun.net.spi.nameservice.nameservers"));
-        if (nameservers != null && nameservers.length() > 0) {
-            nameProviderUrl = createProviderURL(nameservers);
-            if (nameProviderUrl.length() == 0) {
-                throw new RuntimeException("malformed nameservers property");
-            }
-
-        } else {
-
-            // no property specified so check host DNS resolver configured
-            // with at least one nameserver in dotted notation.
-            //
-            List<String> nsList = ResolverConfiguration.open().nameservers();
-            if (nsList.isEmpty()) {
-                throw new RuntimeException("no nameservers provided");
-            }
-            boolean found = false;
-            for (String addr: nsList) {
-                if (IPAddressUtil.isIPv4LiteralAddress(addr) ||
-                    IPAddressUtil.isIPv6LiteralAddress(addr)) {
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) {
-                throw new RuntimeException("bad nameserver configuration");
-            }
-        }
-    }
-
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-
-        // DNS records that we search for
-        String[] ids = {"A", "AAAA", "CNAME"};
-
-        // first get directory context
-        DirContext ctx;
-        try {
-            ctx = getTemporaryContext();
-        } catch (NamingException nx) {
-            throw new Error(nx);
-        }
-
-        ArrayList<String> results = null;
-        UnknownHostException uhe = null;
-
-        // If host already contains a domain name then just look it up
-        if (host.indexOf('.') >= 0) {
-            try {
-                results = resolve(ctx, host, ids, 0);
-            } catch (UnknownHostException x) {
-                uhe = x;
-            }
-        }
-
-        // Here we try to resolve the host using the domain suffix or
-        // the domain suffix search list. If the host cannot be resolved
-        // using the domain suffix then we attempt devolution of
-        // the suffix - eg: if we are searching for "foo" and our
-        // domain suffix is "eng.sun.com" we will try to resolve
-        // "foo.eng.sun.com" and "foo.sun.com".
-        // It's not normal to attempt devolation with domains on the
-        // domain suffix search list - however as ResolverConfiguration
-        // doesn't distinguish domain or search list in the list it
-        // returns we approximate by doing devolution on the domain
-        // suffix if the list has one entry.
-
-        if (results == null) {
-            List<String> searchList = null;
-            Iterator<String> i;
-            boolean usingSearchList = false;
-
-            if (domainList != null) {
-                i = domainList.iterator();
-            } else {
-                searchList = ResolverConfiguration.open().searchlist();
-                if (searchList.size() > 1) {
-                    usingSearchList = true;
-                }
-                i = searchList.iterator();
-            }
-
-            // iterator through each domain suffix
-            while (i.hasNext()) {
-                String parentDomain = i.next();
-                int start = 0;
-                while ((start = parentDomain.indexOf('.')) != -1
-                       && start < parentDomain.length() -1) {
-                    try {
-                        results = resolve(ctx, host+"."+parentDomain, ids, 0);
-                        break;
-                    } catch (UnknownHostException x) {
-                        uhe = x;
-                        if (usingSearchList) {
-                            break;
-                        }
-
-                        // devolve
-                        parentDomain = parentDomain.substring(start+1);
-                    }
-                }
-                if (results != null) {
-                    break;
-                }
-            }
-        }
-
-        // finally try the host if it doesn't have a domain name
-        if (results == null && (host.indexOf('.') < 0)) {
-            results = resolve(ctx, host, ids, 0);
-        }
-
-        // if not found then throw the (last) exception thrown.
-        if (results == null) {
-            assert uhe != null;
-            throw uhe;
-        }
-
-        /**
-         * Convert the array list into a byte aray list - this
-         * filters out any invalid IPv4/IPv6 addresses.
-         */
-        assert results.size() > 0;
-        InetAddress[] addrs = new InetAddress[results.size()];
-        int count = 0;
-        for (int i=0; i<results.size(); i++) {
-            String addrString = results.get(i);
-            byte addr[] = IPAddressUtil.textToNumericFormatV4(addrString);
-            if (addr == null) {
-                addr = IPAddressUtil.textToNumericFormatV6(addrString);
-            }
-            if (addr != null) {
-                addrs[count++] = InetAddress.getByAddress(host, addr);
-            }
-        }
-
-        /**
-         * If addresses are filtered then we need to resize the
-         * array. Additionally if all addresses are filtered then
-         * we throw an exception.
-         */
-        if (count == 0) {
-            throw new UnknownHostException(host + ": no valid DNS records");
-        }
-        if (count < results.size()) {
-            InetAddress[] tmp = new InetAddress[count];
-            for (int i=0; i<count; i++) {
-                tmp[i] = addrs[i];
-            }
-            addrs = tmp;
-        }
-
-        return addrs;
-    }
-
-    /**
-     * Reverse lookup code. I.E: find a host name from an IP address.
-     * IPv4 addresses are mapped in the IN-ADDR.ARPA. top domain, while
-     * IPv6 addresses can be in IP6.ARPA or IP6.INT.
-     * In both cases the address has to be converted into a dotted form.
-     */
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        String host = null;
-        try {
-            String literalip = "";
-            String[] ids = { "PTR" };
-            DirContext ctx;
-            ArrayList<String> results = null;
-            try {
-                ctx = getTemporaryContext();
-            } catch (NamingException nx) {
-                throw new Error(nx);
-            }
-            if (addr.length == 4) { // IPv4 Address
-                for (int i = addr.length-1; i >= 0; i--) {
-                    literalip += (addr[i] & 0xff) +".";
-                }
-                literalip += "IN-ADDR.ARPA.";
-
-                results = resolve(ctx, literalip, ids, 0);
-                host = results.get(0);
-            } else if (addr.length == 16) { // IPv6 Address
-                /**
-                 * Because RFC 3152 changed the root domain name for reverse
-                 * lookups from IP6.INT. to IP6.ARPA., we need to check
-                 * both. I.E. first the new one, IP6.ARPA, then if it fails
-                 * the older one, IP6.INT
-                 */
-
-                for (int i = addr.length-1; i >= 0; i--) {
-                    literalip += Integer.toHexString((addr[i] & 0x0f)) +"."
-                        +Integer.toHexString((addr[i] & 0xf0) >> 4) +".";
-                }
-                String ip6lit = literalip + "IP6.ARPA.";
-
-                try {
-                    results = resolve(ctx, ip6lit, ids, 0);
-                    host = results.get(0);
-                } catch (UnknownHostException e) {
-                    host = null;
-                }
-                if (host == null) {
-                    // IP6.ARPA lookup failed, let's try the older IP6.INT
-                    ip6lit = literalip + "IP6.INT.";
-                    results = resolve(ctx, ip6lit, ids, 0);
-                    host = results.get(0);
-                }
-            }
-        } catch (Exception e) {
-            throw new UnknownHostException(e.getMessage());
-        }
-        // Either we couldn't find it or the address was neither IPv4 or IPv6
-        if (host == null)
-            throw new UnknownHostException();
-        // remove trailing dot
-        if (host.endsWith(".")) {
-            host = host.substring(0, host.length() - 1);
-        }
-        return host;
-    }
-
-
-    // ---------
-
-    private static void appendIfLiteralAddress(String addr, StringBuilder sb) {
-        if (IPAddressUtil.isIPv4LiteralAddress(addr)) {
-            sb.append("dns://").append(addr).append(' ');
-        } else {
-            if (IPAddressUtil.isIPv6LiteralAddress(addr)) {
-                sb.append("dns://[").append(addr).append("] ");
-            }
-        }
-    }
-
-    /*
-     * @return String containing the JNDI-DNS provider URL
-     *         corresponding to the supplied List of nameservers.
-     */
-    private static String createProviderURL(List<String> nsList) {
-        StringBuilder sb = new StringBuilder();
-        for (String s: nsList) {
-            appendIfLiteralAddress(s, sb);
-        }
-        return sb.toString();
-    }
-
-    /*
-     * @return String containing the JNDI-DNS provider URL
-     *         corresponding to the list of nameservers
-     *         contained in the provided str.
-     */
-    private static String createProviderURL(String str) {
-        StringBuilder sb = new StringBuilder();
-        StringTokenizer st = new StringTokenizer(str, ",");
-        while (st.hasMoreTokens()) {
-            appendIfLiteralAddress(st.nextToken(), sb);
-        }
-        return sb.toString();
-    }
-}
--- a/src/jdk.naming.dns/share/classes/sun/net/spi/nameservice/dns/DNSNameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.net.spi.nameservice.dns;
-
-import sun.net.spi.nameservice.*;
-
-public final class DNSNameServiceDescriptor implements NameServiceDescriptor {
-    /**
-     * Create a new instance of the corresponding name service.
-     */
-    public NameService createNameService() throws Exception {
-        return new DNSNameService();
-    }
-
-    /**
-     * Returns this service provider's name
-     *
-     */
-    public String getProviderName() {
-        return "sun";
-    }
-
-    /**
-     * Returns this name service type
-     * "dns" "nis" etc
-     */
-    public String getType() {
-        return "dns";
-    }
-}
--- a/test/ProblemList.txt	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/ProblemList.txt	Mon Apr 11 03:00:50 2016 +0100
@@ -159,8 +159,6 @@
 
 # jdk_net
 
-sun/net/InetAddress/nameservice/simple/CacheTest.java           7148829 generic-all
-sun/net/InetAddress/nameservice/simple/DefaultCaching.java      7148829 generic-all
 
 java/net/MulticastSocket/NoLoopbackPackets.java                 7122846 macosx-all
 java/net/MulticastSocket/SetLoopbackMode.java                   7122846 macosx-all
@@ -284,6 +282,8 @@
 
 sun/security/provider/NSASuiteB/TestDSAGenParameterSpec.java    8137255 generic-all
 
+sun/security/x509/URICertStore/ExtensionsWithLDAP.java          8134577 generic-all
+
 ############################################################################
 
 # jdk_sound
@@ -310,6 +310,7 @@
 
 # jdk_time
 
+
 ############################################################################
 
 # jdk_tools
--- a/test/java/net/Inet4Address/DummyNameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * A simple name service which throws an exception when invoked
- */
-
-import java.net.UnknownHostException;
-import java.net.InetAddress;
-import sun.net.spi.nameservice.*;
-import java.util.*;
-
-public final class DummyNameService implements NameService {
-
-    public DummyNameService() throws Exception {
-    }
-
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-        throw new UnknownHostException("Dummy name service");
-    }
-
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        throw new UnknownHostException("Dummy name service");
-    }
-}
--- a/test/java/net/Inet4Address/DummyNameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Descriptor for the dummy name service
- */
-
-import sun.net.spi.nameservice.*;
-
-public final class DummyNameServiceDescriptor implements NameServiceDescriptor {
-
-    /**
-     * Create a new instance of the corresponding name service.
-     */
-    public NameService createNameService() throws Exception {
-        return new DummyNameService();
-    }
-
-    /**
-     * Returns this service provider's name
-     *
-     */
-    public String getProviderName() {
-        return "oracle";
-    }
-
-    /**
-     * Returns this name service type
-     * "dns" "nis" etc
-     */
-    public String getType() {
-        return "dummy";
-    }
-}
--- a/test/java/net/Inet4Address/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-DummyNameServiceDescriptor    # name service provider descriptor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/Inet4Address/TestToNumericFormatHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,1 @@
+
--- a/test/java/net/Inet4Address/textToNumericFormat.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/java/net/Inet4Address/textToNumericFormat.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,7 @@
  * @test
  * @bug 4749938 8087190
  * @summary Bug in the parsing IPv4 literal addresses
- * @modules java.base/sun.net.spi.nameservice
- * @compile -XDignore.symbol.file=true DummyNameService.java DummyNameServiceDescriptor.java
- * @run main/othervm -Dsun.net.spi.nameservice.provider.1=dummy,oracle textToNumericFormat
+ * @run main/othervm  textToNumericFormat
 */
 
 /**
@@ -68,6 +66,8 @@
                            "1..1.1",
                            "1.1.1.",
                            "..." };
+        String hostsFileName = System.getProperty("test.src", ".") + "/TestToNumericFormatHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
 
         for (int i=0; i<goodAddrs.length; i++) {
             try {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/InetAddress/InternalNameServiceTest.java	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8134577
+ * @summary Test the internal NameService implementation which is enabled via
+ *          the system property jdk.net.hosts.file. This property specifies
+ *          a file name that contains address host mappings, similar to those in
+ *          /etc/hosts file.
+ * @run main/othervm  InternalNameServiceTest
+ */
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+
+public class InternalNameServiceTest {
+
+    public static void main(String args[]) throws Exception {
+
+        String hostsFileName = System.getProperty("test.src", ".") + "/TestHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
+        System.setProperty("sun.net.inetaddr.ttl", "0");
+
+        testHostToIPAddressMappings(hostsFileName);
+        testIpAddressToHostNameMappings(hostsFileName);
+    }
+
+    private static void testHostToIPAddressMappings(String hostsFileName)
+            throws Exception, UnknownHostException {
+        System.out.println(" TEST HOST TO  IP ADDRESS MAPPINGS ");
+        InetAddress testAddress;
+        byte[] retrievedIpAddr;
+        byte[] expectedIpAddr1 = { 1, 2, 3, 4 };
+        byte[] expectedIpAddr2 = { 5, 6, 7, 8 };
+        byte[] expectedIpAddrIpv6_1 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
+
+        // hosts file with
+        // # test hosts file for internal NameService
+        // 1.2.3.4 host.sample-domain
+        // 5.6.7.8 host1.sample-domain
+        // 1.2.3.4 host2.sample-domain  # this is a comment
+        // host3.sample-domain # no ip address
+        //  host4.sample-domain # space as ip address
+        //   host5.sample-domain # double space as ip address
+
+        // add comment to hosts file
+        addMappingToHostsFile("test hosts file for internal NameService ", "#", hostsFileName,
+                false);
+        addMappingToHostsFile("host.sample-domain", "1.2.3.4", hostsFileName,
+                true);
+
+        testAddress = InetAddress.getByName("host.sample-domain");
+        retrievedIpAddr = testAddress.getAddress();
+        if (!Arrays.equals(retrievedIpAddr, expectedIpAddr1)) {
+            throw new RuntimeException(
+                    "retrievedIpAddr not equal to expectedipAddr");
+        }
+
+        addMappingToHostsFile("host1.sample-domain", "5.6.7.8", hostsFileName,
+                true);
+        addMappingToHostsFile("host2.sample-domain", "1.2.3.4", hostsFileName,
+                true);
+
+        testAddress = InetAddress.getByName("host1.sample-domain");
+        retrievedIpAddr = testAddress.getAddress();
+        if (!Arrays.equals(retrievedIpAddr, expectedIpAddr2)) {
+            throw new RuntimeException(
+                    "retrievedIpAddr not equal to expectedIpAddr");
+        }
+
+        testAddress = InetAddress.getByName("host2.sample-domain");
+        retrievedIpAddr = testAddress.getAddress();
+        if (!Arrays.equals(retrievedIpAddr, expectedIpAddr1)) {
+            throw new RuntimeException(
+                    "retrievedIpAddr not equal to expectedIpAddr");
+        }
+
+        try {
+            addMappingToHostsFile("host3.sample-domain", "", hostsFileName,
+                    true);
+            testAddress = InetAddress.getByName("host3.sample-domain");
+            throw new RuntimeException(
+                    "Expected UnknownHostException not thrown");
+        } catch (UnknownHostException uhEx) {
+            System.out.println("UnknownHostException as expected for host host3.sample-domain");
+        }
+
+        try {
+            addMappingToHostsFile("host4.sample-domain", " ", hostsFileName,
+                    true);
+            testAddress = InetAddress.getByName("host4.sample-domain");
+            throw new RuntimeException(
+                    "Expected UnknownHostException not thrown");
+        } catch (UnknownHostException uhEx) {
+            System.out.println("UnknownHostException as expected for host host4.sample-domain");
+        }
+
+        try {
+            addMappingToHostsFile("host5.sample-domain", "  ", hostsFileName,
+                    true);
+            testAddress = InetAddress.getByName("host4.sample-domain");
+            throw new RuntimeException(
+                    "Expected UnknownHostException not thrown");
+        } catch (UnknownHostException uhEx) {
+            System.out.println("UnknownHostException as expected for host host5.sample-domain");
+        }
+
+        // IPV6 tests
+
+        // IPV6 tests
+        addMappingToHostsFile("host-ipv6.sample-domain", "::1", hostsFileName,
+                true);
+        testAddress = InetAddress.getByName("host-ipv6.sample-domain");
+        retrievedIpAddr = testAddress.getAddress();
+        if (!Arrays.equals(retrievedIpAddr, expectedIpAddrIpv6_1)) {
+            System.out.println("retrieved ipv6 addr == " + Arrays.toString(retrievedIpAddr));
+            System.out.println("expected ipv6 addr == " + Arrays.toString(expectedIpAddrIpv6_1));
+            throw new RuntimeException(
+                    "retrieved IPV6 Addr not equal to expected IPV6 Addr");
+        }
+    }
+
+    private static void testIpAddressToHostNameMappings(String hostsFileName)
+            throws Exception {
+        System.out.println(" TEST IP ADDRESS TO HOST MAPPINGS ");
+        InetAddress testAddress;
+        String retrievedHost;
+        String expectedHost = "testHost.testDomain";
+
+        byte[] testHostIpAddr = { 10, 2, 3, 4 };
+        byte[] testHostIpAddr2 = { 10, 5, 6, 7 };
+        byte[] testHostIpAddr3 = { 10, 8, 9, 10 };
+        byte[] testHostIpAddr4 = { 10, 8, 9, 11 };
+
+        // add comment to hosts file
+        addMappingToHostsFile("test hosts file for internal NameService ", "#", hostsFileName,
+                false);
+        addMappingToHostsFile("testHost.testDomain", "10.2.3.4", hostsFileName,
+                true);
+
+        testAddress = InetAddress.getByAddress(testHostIpAddr);
+        System.out.println("*******   testAddress == " + testAddress);
+        retrievedHost = testAddress.getHostName();
+        if (!expectedHost.equals(retrievedHost)) {
+            throw new RuntimeException(
+                    "retrieved host name not equal to expected host name");
+        }
+
+        addMappingToHostsFile("testHost.testDomain", "10.5.6.7", hostsFileName,
+                true);
+
+        testAddress = InetAddress.getByAddress(testHostIpAddr2);
+        System.out.println("*******   testAddress == " + testAddress);
+        retrievedHost = testAddress.getHostName();
+        System.out.println("*******   retrievedHost == " + retrievedHost);
+        if (!expectedHost.equals(retrievedHost)) {
+            throw new RuntimeException("retrieved host name " + retrievedHost
+                    + " not equal to expected host name" + expectedHost);
+        }
+
+        testAddress = InetAddress.getByAddress(testHostIpAddr4);
+        System.out.println("*******   testAddress == " + testAddress);
+        if ("10.8.9.11".equalsIgnoreCase(testAddress.getCanonicalHostName())) {
+            System.out.println("addr = " + addrToString(testHostIpAddr4)
+                    + "  resolve to a host address as expected");
+        } else {
+            System.out.println("addr = " + addrToString(testHostIpAddr4)
+                    + " does not resolve as expected, testAddress == " + testAddress.getCanonicalHostName());
+            throw new RuntimeException("problem with resolving "
+                    + addrToString(testHostIpAddr4));
+        }
+
+        try {
+            addMappingToHostsFile("", "10.8.9.10", hostsFileName, true);
+            testAddress = InetAddress.getByAddress(testHostIpAddr3);
+            System.out.println("*******   testAddress == " + testAddress);
+            retrievedHost = testAddress.getCanonicalHostName();
+        } catch (Throwable t) {
+            throw new RuntimeException("problem with resolving "
+                    + addrToString(testHostIpAddr3));
+        }
+
+    }
+
+    private static String addrToString(byte addr[]) {
+        return Byte.toString(addr[0]) + "." + Byte.toString(addr[1]) + "."
+                + Byte.toString(addr[2]) + "." + Byte.toString(addr[3]);
+    }
+
+    private static void addMappingToHostsFile( String host,
+                                               String addr,
+                                               String hostsFileName,
+                                               boolean append)
+                                               throws Exception {
+        String mapping = addr + " " + host;
+        try (PrintWriter hfPWriter = new PrintWriter(new BufferedWriter(
+                new FileWriter(hostsFileName, append)))) {
+            hfPWriter.println(mapping);
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/InetAddress/InternalNameServiceWithHostsFileTest.java	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8134577
+ * @summary Test the internal NameService implementation which is enabled via
+ *          the system property jdk.net.hosts.file. This property specifies
+ *          a file name that contains address host mappings, similar to those in
+ *          /etc/hosts file. TestHosts-III file  exist, with a set of ipv4 and ipv6
+ *          mappings
+ * @run main/othervm -Dsun.net.inetaddr.ttl=0  InternalNameServiceWithHostsFileTest
+ */
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+
+public class InternalNameServiceWithHostsFileTest {
+    public static void main(String args[]) throws Exception {
+
+        // System.getProperty("test.src", ".");
+        String hostsFileName = System.getProperty("test.src", ".")
+                + "/TestHosts-III";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
+        System.setProperty("sun.net.inetaddr.ttl", "0");
+
+        // fe80::1
+        byte[] expectedIpv6Address = { (byte) 0xfe, (byte) 0x80, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 1 };
+        // fe00::0
+        byte[] expectedIpv6LocalAddress = { (byte) 0xfe, (byte) 0x00, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+        // 10.2.3.4
+        byte[] expectedIpv4Address = { 10, 2, 3, 4 };
+        //
+        byte[] expectedIpv6LocalhostAddress = { 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 1 };
+
+        try {
+            // 10.2.3.4  testHost.testDomain
+            testHostsMapping(expectedIpv4Address, "testHost.testDomain");
+            // ::1     ip6-localhost ip6-loopback
+            testHostsMapping(expectedIpv6LocalhostAddress, "ip6-localhost");
+            // fe00::0 ip6-localnet
+            testHostsMapping(expectedIpv6LocalAddress, "ip6-localnet");
+            // fe80::1 link-local-host
+            testHostsMapping(expectedIpv6Address, "link-local-host");
+
+        } catch (UnknownHostException uhEx) {
+            System.out.println("UHE unexpected caught == " + uhEx.getMessage());
+        }
+    }
+
+    private static void testHostsMapping(byte[] expectedIpAddress, String hostName)
+            throws UnknownHostException {
+        InetAddress testAddress;
+        byte[] rawIpAddress;
+        testAddress = InetAddress.getByName(hostName);
+        System.out
+                .println("############################  InetAddress == "
+                        + testAddress);
+
+        rawIpAddress = testAddress.getAddress();
+        if (!Arrays.equals(rawIpAddress, expectedIpAddress)) {
+            System.out.println("retrieved address == "
+                    + Arrays.toString(rawIpAddress)
+                    + " not equal to expected address == "
+                    + Arrays.toString(expectedIpAddress));
+            throw new RuntimeException(
+                    "retrieved address not equal to expected address");
+        }
+        System.out.println("retrieved address == "
+                + Arrays.toString(rawIpAddress)
+                + " equal to expected address == "
+                + Arrays.toString(expectedIpAddress));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/InetAddress/InternalNameServiceWithNoHostsFileTest.java	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8134577
+ * @summary Test the internal NameService implementation which is enabled via
+ *          the system property jdk.net.hosts.file. This property specifies
+ *          a file name that contains address host mappings, similar to those in
+ *          /etc/hosts file. TestHosts-II file doesn't exist, so a UHE should be
+ *          thrown
+ * @run main/othervm -Dsun.net.inetaddr.ttl=0  InternalNameServiceWithNoHostsFileTest
+ */
+
+
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+
+public class InternalNameServiceWithNoHostsFileTest {
+    public static void main(String args[]) throws Exception {
+
+        String hostsFileName = System.getProperty("test.src", ".") + "/TestHosts-II";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
+        System.setProperty("sun.net.inetaddr.ttl", "0");
+        InetAddress testAddress = null;
+
+        try {
+            testAddress = InetAddress.getByName("host.sample-domain");
+            throw new RuntimeException ("UnknownHostException expected");
+        } catch (UnknownHostException uhEx) {
+            System.out.println("UHE caught as expected == " + uhEx.getMessage());
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/InetAddress/TestHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,4 @@
+# test hosts file for internal NameService 
+10.2.3.4 testHost.testDomain
+10.5.6.7 testHost.testDomain
+10.8.9.10 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/InetAddress/TestHosts-III	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,11 @@
+# test hosts file for internal NameService
+10.2.3.4  testHost.testDomain
+10.5.6.7        testHost.testDomain
+10.8.9.10
+# The following lines are desirable for IPv6 capable hosts
+::1     ip6-localhost ip6-loopback
+fe80::1 link-local-host
+fe00::0 ip6-localnet
+ff00::0 ip6-mcastprefix
+ff02::1 ip6-allnodes
+ff02::2 ip6-allrouters
--- a/test/java/net/URLPermission/nstest/LookupTest.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/java/net/URLPermission/nstest/LookupTest.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -63,14 +63,18 @@
     static ServerSocket serverSocket;
 
     public static void main(String args[]) throws Exception {
+
+
         String cmd = args[0];
         if (cmd.equals("-getport")) {
             port = Utils.getFreePort();
             System.out.print(port);
         } else if (cmd.equals("-runtest")) {
             port = Integer.parseInt(args[1]);
-            SimpleNameService.put("allowedAndFound.com", "127.0.0.1");
-            SimpleNameService.put("notAllowedButFound.com", "99.99.99.99");
+            String hostsFileName = System.getProperty("test.src", ".") + "/LookupTestHosts";
+            System.setProperty("jdk.net.hosts.file", hostsFileName);
+            addMappingToHostsFile("allowedAndFound.com", "127.0.0.1", hostsFileName, false);
+            addMappingToHostsFile("notAllowedButFound.com", "99.99.99.99", hostsFileName, true);
             // name "notAllowedAndNotFound.com" is not in map
             // name "allowedButNotfound.com" is not in map
             try {
@@ -124,4 +128,17 @@
             throw new RuntimeException ("Test failed to initialize", e);
         }
     }
+
+    private static void addMappingToHostsFile (String host,
+                                               String addr,
+                                               String hostsFileName,
+                                               boolean append)
+                                             throws Exception {
+        String mapping = addr + " " + host;
+        try (PrintWriter hfPWriter = new PrintWriter(new BufferedWriter(
+                new FileWriter(hostsFileName, append)))) {
+            hfPWriter.println(mapping);
 }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/URLPermission/nstest/LookupTestHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,2 @@
+127.0.0.1 allowedAndFound.com
+99.99.99.99 notAllowedButFound.com
--- a/test/java/net/URLPermission/nstest/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-SimpleNameServiceDescriptor    # name service provider descriptor
--- a/test/java/net/URLPermission/nstest/SimpleNameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * A simple name service based on an in-memory HashMap.
- */
-import java.net.UnknownHostException;
-import java.net.InetAddress;
-import sun.net.spi.nameservice.*;
-import java.util.*;
-
-public final class SimpleNameService implements NameService {
-
-    private static LinkedHashMap hosts = new LinkedHashMap();
-
-    private static String addrToString(byte addr[]) {
-        return Byte.toString(addr[0]) + "." +
-               Byte.toString(addr[1]) + "." +
-               Byte.toString(addr[2]) + "." +
-               Byte.toString(addr[3]);
-    }
-
-    // ------------
-
-    public static void put(String host, String addr) {
-        hosts.put(host, addr);
-    }
-
-    public static void put(String host, byte addr[]) {
-        hosts.put(host, addrToString(addr));
-    }
-
-    public static void remove(String host) {
-        hosts.remove(host);
-    }
-
-    public static int entries () {
-        return hosts.size();
-    }
-
-    public static int lookupCalls() {
-        return lookupCalls;
-    }
-
-    static int lookupCalls = 0;
-
-    // ------------
-
-    public SimpleNameService() throws Exception {
-    }
-
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-
-        lookupCalls ++;
-
-        String value = (String)hosts.get(host);
-        if (value == null) {
-            throw new UnknownHostException(host);
-        }
-        StringTokenizer st = new StringTokenizer(value, ".");
-        byte addr[] = new byte[4];
-        for (int i=0; i<4; i++) {
-            addr[i] = (byte)Integer.parseInt(st.nextToken());
-        }
-        InetAddress[] res = new InetAddress[1];
-        res[0] = InetAddress.getByAddress(host, addr);
-        return res;
-    }
-
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        String addrString = addrToString(addr);
-        Iterator i = hosts.keySet().iterator();
-        while (i.hasNext()) {
-            String host = (String)i.next();
-            String value = (String)hosts.get(host);
-            if (value.equals(addrString)) {
-                return host;
-            }
-        }
-        throw new UnknownHostException();
-    }
-}
--- a/test/java/net/URLPermission/nstest/SimpleNameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Descriptor for the simple name service
- */
-import sun.net.spi.nameservice.*;
-
-public final class SimpleNameServiceDescriptor implements NameServiceDescriptor {
-    /**
-     * Create a new instance of the corresponding name service.
-     */
-    public NameService createNameService() throws Exception {
-        return new SimpleNameService();
-    }
-
-    /**
-     * Returns this service provider's name
-     *
-     */
-    public String getProviderName() {
-        return "sun";
-    }
-
-    /**
-     * Returns this name service type
-     * "dns" "nis" etc
-     */
-    public String getType() {
-        return "simple";
-    }
-}
--- a/test/java/net/URLPermission/nstest/lookup.sh	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/java/net/URLPermission/nstest/lookup.sh	Mon Apr 11 03:00:50 2016 +0100
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2016 Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -24,10 +24,8 @@
 
 # @test
 # @library /lib/testlibrary
-# @modules java.base/sun.net.spi.nameservice
 # @build jdk.testlibrary.*
-# @compile -XDignore.symbol.file=true SimpleNameService.java
-#            LookupTest.java SimpleNameServiceDescriptor.java
+# @compile -XDignore.symbol.file=true LookupTest.java
 # @run shell/timeout=50 lookup.sh
 #
 
@@ -58,7 +56,6 @@
 POLICY
 
 ${TESTJAVA}/bin/java ${TESTVMOPTS} \
-    -XaddExports:java.base/sun.net.spi.nameservice=ALL-UNNAMED \
     -Djava.security.policy=file:./policy \
-    -Dsun.net.spi.nameservice.provider.1=simple,sun \
+    -Dtest.src=${TESTSRC} \
     -cp ${TESTCLASSPATH}${PS}${TESTSRC} LookupTest -runtest ${port}
--- a/test/javax/net/ssl/DTLS/TEST.properties	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/javax/net/ssl/DTLS/TEST.properties	Mon Apr 11 03:00:50 2016 +0100
@@ -4,5 +4,4 @@
     java.security.jgss/sun.security.krb5.internal.ccache \
     java.security.jgss/sun.security.krb5.internal \
     java.security.jgss/sun.security.krb5.internal.ktab \
-    java.base/sun.net.spi.nameservice \
     java.base/sun.security.util
--- a/test/javax/net/ssl/DTLSv10/TEST.properties	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/javax/net/ssl/DTLSv10/TEST.properties	Mon Apr 11 03:00:50 2016 +0100
@@ -4,5 +4,4 @@
     java.security.jgss/sun.security.krb5.internal.ccache \
     java.security.jgss/sun.security.krb5.internal \
     java.security.jgss/sun.security.krb5.internal.ktab \
-    java.base/sun.net.spi.nameservice \
     java.base/sun.security.util
--- a/test/javax/net/ssl/TLS/TEST.properties	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/javax/net/ssl/TLS/TEST.properties	Mon Apr 11 03:00:50 2016 +0100
@@ -4,6 +4,5 @@
     java.security.jgss/sun.security.krb5 \
     java.security.jgss/sun.security.krb5.internal.ccache \
     java.security.jgss/sun.security.krb5.internal \
-    java.base/sun.net.spi.nameservice \
     java.base/sun.security.util \
     jdk.crypto.ec/sun.security.ec
--- a/test/javax/net/ssl/TLSv1/TEST.properties	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/javax/net/ssl/TLSv1/TEST.properties	Mon Apr 11 03:00:50 2016 +0100
@@ -4,5 +4,4 @@
     java.security.jgss/sun.security.krb5.internal.ccache \
     java.security.jgss/sun.security.krb5.internal \
     java.security.jgss/sun.security.krb5.internal.ktab \
-    java.base/sun.net.spi.nameservice \
     java.base/sun.security.util
--- a/test/javax/net/ssl/TLSv11/TEST.properties	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/javax/net/ssl/TLSv11/TEST.properties	Mon Apr 11 03:00:50 2016 +0100
@@ -4,5 +4,4 @@
     java.security.jgss/sun.security.krb5.internal.ccache \
     java.security.jgss/sun.security.krb5.internal \
     java.security.jgss/sun.security.krb5.internal.ktab \
-    java.base/sun.net.spi.nameservice \
     java.base/sun.security.util
--- a/test/sun/net/InetAddress/nameservice/chaining/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-Simple1NameServiceDescriptor
-Simple2NameServiceDescriptor
--- a/test/sun/net/InetAddress/nameservice/chaining/Providers.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test
- * @bug 4762344
- * @summary 2nd nameservice provider is non functional
- * @modules java.base/sun.net.spi.nameservice
- * @compile -XDignore.symbol.file=true SimpleNameService.java
- *                                     Simple1NameServiceDescriptor.java
- *                                     Simple2NameServiceDescriptor.java
- * @run main/othervm -Dsun.net.spi.nameservice.provider.1=simple1,sun -Dsun.net.spi.nameservice.provider.2=simple2,sun Providers
- */
-
-import java.net.*;
-import java.util.*;
-
-
-public class Providers {
-    private static String[][] hostnames = new String[][] {
-            // both providers know this host, but with different address
-            new String[] {"blade", "10.0.0.1"},
-            // provider1 knwos this host
-            new String[] {"blade.domain1", "10.0.0.2"},
-            // provider2 knows this host
-            new String[] {"blade.domain2", "20.0.0.2"}
-        };
-    private static String[][] hostaddrs = new String[][] {
-            new String[] {"10.0.0.1", "blade"},
-            new String[] {"10.0.0.2", "blade.domain1"},
-            new String[] {"20.0.0.2", "blade.domain2"}
-        };
-
-    public static void main(String[] args) throws Exception {
-        for (int i = 0; i < hostnames.length; i++) {
-            doLookup(hostnames[i][0], hostnames[i][1]);
-        }
-        for (int i = 0; i < hostaddrs.length; i++) {
-            doReverseLookup(hostaddrs[i][0], hostaddrs[i][1]);
-        }
-    }
-
-    private static void doLookup(String host, String addr) throws Exception {
-        String res = InetAddress.getByName(host).getHostAddress();
-        if (!res.equals(addr)) {
-            throw new RuntimeException("Test failed: wrong address for host " + host);
-        }
-    }
-
-    private static void doReverseLookup(String addr, String host) throws Exception {
-        StringTokenizer tokenizer = new StringTokenizer(addr, ".");
-        byte addrs[] = new byte[4];
-        for (int i = 0; i < 4; i++) {
-            addrs[i] = (byte)Integer.parseInt(tokenizer.nextToken());
-        }
-        String res = InetAddress.getByAddress(addrs).getHostName();
-        if (!res.equals(host)) {
-            throw new RuntimeException("Test failed: wrong host name for address " + addr);
-        }
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/chaining/Simple1NameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-import sun.net.spi.nameservice.*;
-
-
-public class Simple1NameServiceDescriptor implements NameServiceDescriptor {
-    public NameService createNameService() {
-        SimpleNameService ns = new SimpleNameService();
-
-        // both providers know this host, but the address is different
-        ns.put("blade", "10.0.0.1");
-        // only this provider knows this host
-        ns.put("blade.domain1", "10.0.0.2");
-
-        return ns;
-    }
-
-    public String getProviderName() {
-        return "sun";
-    }
-
-    public String getType() {
-        return "simple1";
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/chaining/Simple2NameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-import sun.net.spi.nameservice.*;
-
-
-public class Simple2NameServiceDescriptor implements NameServiceDescriptor {
-    public NameService createNameService() {
-        SimpleNameService ns = new SimpleNameService();
-        // both providers know this host, but the address of it is different
-        ns.put("blade", "20.0.0.1");
-        // only this provider knows this host
-        ns.put("blade.domain2", "20.0.0.2");
-
-        return ns;
-    }
-
-    public String getProviderName() {
-        return "sun";
-    }
-
-    public String getType() {
-        return "simple2";
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/chaining/SimpleNameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-import java.net.*;
-import java.util.*;
-import sun.net.spi.nameservice.*;
-
-
-public class SimpleNameService implements NameService {
-    // host name <-> host addr mapping
-    private HashMap<String, String> hosts = new LinkedHashMap<String, String>();
-
-    public void put(String host, String addr) {
-        hosts.put(host, addr);
-    }
-
-    private static String addrToString(byte addr[]) {
-        return Byte.toString(addr[0]) + "." +
-               Byte.toString(addr[1]) + "." +
-               Byte.toString(addr[2]) + "." +
-               Byte.toString(addr[3]);
-    }
-
-    public SimpleNameService() {
-    }
-
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-        String addr = hosts.get(host);
-        if (addr == null) {
-            throw new UnknownHostException(host);
-        }
-
-        StringTokenizer tokenizer = new StringTokenizer(addr, ".");
-        byte addrs[] = new byte[4];
-        for (int i = 0; i < 4; i++) {
-            addrs[i] = (byte)Integer.parseInt(tokenizer.nextToken());
-        }
-        InetAddress[] ret = new InetAddress[1];
-        ret[0] = InetAddress.getByAddress(host, addrs);
-        return ret;
-    }
-
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        String addrString = addrToString(addr);
-        Iterator i = hosts.keySet().iterator();
-        while (i.hasNext()) {
-            String host = (String)i.next();
-            String value = (String)hosts.get(host);
-            if (value.equals(addrString)) {
-                return host;
-            }
-        }
-        throw new UnknownHostException();
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/deadlock/Hang.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test
- * @bug 7012768
- * @modules java.base/sun.net.spi.nameservice
- * @compile -XDignore.symbol.file=true ThrowingNameService.java
- *          ThrowingNameServiceDescriptor.java
- * @run main/othervm/timeout=30 -Dsun.net.spi.nameservice.provider.1=throwing,sun Hang
- * @summary InetAddress lookupTable leaks/deadlocks when using unsupported
- *          name service spi
- */
-
-import java.net.InetAddress;
-
-public class Hang {
-    public static void main(String[] args) throws Exception {
-        try {
-            // 1st attempt - IllegalStateException caught below
-            InetAddress.getByName("host.company.com");
-        } catch (IllegalStateException e) { }
-
-        // 2nd attempt - Stuck here forever if bug exists
-        InetAddress.getByName("host.company.com");
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/deadlock/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-ThrowingNameServiceDescriptor
--- a/test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import sun.net.spi.nameservice.NameService;
-
-public class ThrowingNameService implements NameService {
-    static boolean firstCall = true;
-
-    @Override
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-        if (firstCall) {
-            firstCall = false;
-            // throw unchecked exception first time round
-            throw new IllegalStateException();
-        }
-
-        // return any valid address
-        return new InetAddress[] { InetAddress.getLoopbackAddress() };
-    }
-
-    @Override
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        throw new IllegalStateException();
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import sun.net.spi.nameservice.*;
-
-public class ThrowingNameServiceDescriptor implements NameServiceDescriptor {
-    public NameService createNameService() {
-        return new ThrowingNameService();
-    }
-
-    @Override
-    public String getProviderName() {
-        return "sun";
-    }
-
-    @Override
-    public String getType() {
-        return "throwing";
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/dns/cname.sh	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/net/InetAddress/nameservice/dns/cname.sh	Mon Apr 11 03:00:50 2016 +0100
@@ -66,8 +66,8 @@
 np="-Dsun.net.spi.nameservice.provider.1=dns,sun"
 sm="-Djava.security.manager -Djava.security.policy=${POLICY}"
 
-go "$np" "$HOST"
-go "$np $sm" "$HOST"
+go "" "$HOST"
+go "$sm" "$HOST"
 
 
 #
--- a/test/sun/net/InetAddress/nameservice/simple/CacheTest.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/net/InetAddress/nameservice/simple/CacheTest.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,14 +26,14 @@
  * @summary Check that InetAddress doesn't continue to throw UHE
  *          after the name service has recovered and the negative ttl
  *          on the initial lookup has expired.
- * @modules java.base/sun.net.spi.nameservice
- * @compile -XDignore.symbol.file=true SimpleNameService.java
- *                                     SimpleNameServiceDescriptor.java
- * @run main/othervm/timeout=200 -Dsun.net.spi.nameservice.provider.1=simple,sun CacheTest
+ * @run main/othervm/timeout=200 CacheTest
  */
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.security.Security;
+import java.io.PrintWriter;
+import java.io.FileWriter;
+import java.io.BufferedWriter;
 
 public class CacheTest {
 
@@ -59,6 +59,8 @@
             return;
 
         }
+        String hostsFileName = System.getProperty("test.src", ".") + "/CacheTestHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
 
         /*
          * The following outlines how the test works :-
@@ -78,7 +80,7 @@
          */
 
         // name service needs to resolve this.
-        SimpleNameService.put("theclub", "129.156.220.219");
+        addMappingToHostsFile("theclub", "129.156.220.219", hostsFileName, false);
 
         // this lookup will succeed
         InetAddress.getByName("theclub");
@@ -89,12 +91,12 @@
         try {
             InetAddress.getByName("luster");
             throw new RuntimeException("Test internal error " +
-                " - luster is bring resolved by name service");
+                " - luster is being resolved by name service");
         } catch (UnknownHostException x) {
         }
 
         // name service now needs to know about luster
-        SimpleNameService.put("luster", "10.5.18.21");
+        addMappingToHostsFile("luster", "10.5.18.21", hostsFileName, true);
 
         // wait for the cache entry to expire and lookup should
         // succeed.
@@ -102,4 +104,16 @@
         InetAddress.getByName("luster");
     }
 
+    private static void addMappingToHostsFile ( String host,
+                                                String addr,
+                                                String hostsFileName,
+                                                boolean append)
+                                                throws Exception {
+        String mapping = addr + " " + host;
+        try (PrintWriter hfPWriter = new PrintWriter(new BufferedWriter(
+                new FileWriter(hostsFileName, append)))) {
+            hfPWriter.println(mapping);
 }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/net/InetAddress/nameservice/simple/CacheTestHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,2 @@
+129.156.220.219 theclub
+10.5.18.21 luster
--- a/test/sun/net/InetAddress/nameservice/simple/DefaultCaching.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/net/InetAddress/nameservice/simple/DefaultCaching.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,35 +25,40 @@
  * @bug 6442088
  * @summary Change default DNS caching behavior for code not running under
  *          security manager.
- * @modules java.base/sun.net.spi.nameservice
- * @compile -XDignore.symbol.file=true SimpleNameService.java
- *                                     SimpleNameServiceDescriptor.java
- * @run main/othervm/timeout=200 -Dsun.net.inetaddr.ttl=20 -Dsun.net.spi.nameservice.provider.1=simple,sun DefaultCaching
+ * @run main/othervm/timeout=200 -Dsun.net.inetaddr.ttl=20  DefaultCaching
  */
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.security.Security;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.BufferedWriter;
 
 public class DefaultCaching {
 
     public static void main(String args[]) throws Exception {
 
+        String hostsFileName = System.getProperty("test.src", ".") + "/DefaultCachingHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
+        // initial mapping
         // name service needs to resolve this.
-        SimpleNameService.put("theclub", "129.156.220.219");
+        addMappingToHostsFile("theclub", "129.156.220.219", hostsFileName, false);
 
         test ("theclub", "129.156.220.219", true);      // lk: 1
         test ("luster", "1.16.20.2", false);            // lk: 2
 
         // name service now needs to know about luster
-        SimpleNameService.put("luster", "10.5.18.21");
+        addMappingToHostsFile("luster", "10.5.18.21", hostsFileName, true);
 
         test ("luster", "1.16.20.2", false);            // lk: 2
         sleep (10+1);
         test("luster", "10.5.18.21", true, 3);          // lk: 3
         sleep (5);
 
-        SimpleNameService.put("foo", "10.5.18.22");
-        SimpleNameService.put("theclub", "129.156.220.1");
+        // new mapping for theclub and rewrite existing foo and luster mappings
+        addMappingToHostsFile("theclub", "129.156.220.1", hostsFileName, false);
+        addMappingToHostsFile("foo", "10.5.18.22", hostsFileName, true);
+        addMappingToHostsFile("luster", "10.5.18.21", hostsFileName, true);
 
         test ("theclub", "129.156.220.219", true, 3);
         test ("luster", "10.5.18.21", true, 3);
@@ -84,10 +89,6 @@
     static void test (String host, String address,
                         boolean shouldSucceed, int count) {
         test (host, address, shouldSucceed);
-        int got = SimpleNameService.lookupCalls();
-        if (got != count) {
-            throw new RuntimeException ("lookups exp/got: " + count+"/"+got);
-        }
     }
 
     static void sleep (int seconds) {
@@ -114,4 +115,16 @@
         }
     }
 
+
+    private static void addMappingToHostsFile (String host,
+                                               String addr,
+                                               String hostsFileName,
+                                               boolean append)
+                                             throws Exception {
+        String mapping = addr + " " + host;
+        try (PrintWriter hfPWriter = new PrintWriter(new BufferedWriter(
+                new FileWriter(hostsFileName, append)))) {
+            hfPWriter.println(mapping);
 }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/net/InetAddress/nameservice/simple/DefaultCachingHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,3 @@
+129.156.220.1 theclub
+10.5.18.22 foo
+10.5.18.21 luster
--- a/test/sun/net/InetAddress/nameservice/simple/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-SimpleNameServiceDescriptor    # name service provider descriptor
--- a/test/sun/net/InetAddress/nameservice/simple/SimpleNameService.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * A simple name service based on an in-memory HashMap.
- */
-import java.net.UnknownHostException;
-import java.net.InetAddress;
-import sun.net.spi.nameservice.*;
-import java.util.*;
-
-public final class SimpleNameService implements NameService {
-
-    private static LinkedHashMap hosts = new LinkedHashMap();
-
-    private static String addrToString(byte addr[]) {
-        return Byte.toString(addr[0]) + "." +
-               Byte.toString(addr[1]) + "." +
-               Byte.toString(addr[2]) + "." +
-               Byte.toString(addr[3]);
-    }
-
-    // ------------
-
-    public static void put(String host, String addr) {
-        hosts.put(host, addr);
-    }
-
-    public static void put(String host, byte addr[]) {
-        hosts.put(host, addrToString(addr));
-    }
-
-    public static void remove(String host) {
-        hosts.remove(host);
-    }
-
-    public static int entries () {
-        return hosts.size();
-    }
-
-    public static int lookupCalls() {
-        return lookupCalls;
-    }
-
-    static int lookupCalls = 0;
-
-    // ------------
-
-    public SimpleNameService() throws Exception {
-    }
-
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-
-        lookupCalls ++;
-
-        String value = (String)hosts.get(host);
-        if (value == null) {
-            throw new UnknownHostException(host);
-        }
-        StringTokenizer st = new StringTokenizer(value, ".");
-        byte addr[] = new byte[4];
-        for (int i=0; i<4; i++) {
-            addr[i] = (byte)Integer.parseInt(st.nextToken());
-        }
-        InetAddress[] res = new InetAddress[1];
-        res[0] = InetAddress.getByAddress(host, addr);
-        return res;
-    }
-
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        String addrString = addrToString(addr);
-        Iterator i = hosts.keySet().iterator();
-        while (i.hasNext()) {
-            String host = (String)i.next();
-            String value = (String)hosts.get(host);
-            if (value.equals(addrString)) {
-                return host;
-            }
-        }
-        throw new UnknownHostException();
-    }
-}
--- a/test/sun/net/InetAddress/nameservice/simple/SimpleNameServiceDescriptor.java	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Descriptor for the simple name service
- */
-import sun.net.spi.nameservice.*;
-
-public final class SimpleNameServiceDescriptor implements NameServiceDescriptor {
-    /**
-     * Create a new instance of the corresponding name service.
-     */
-    public NameService createNameService() throws Exception {
-        return new SimpleNameService();
-    }
-
-    /**
-     * Returns this service provider's name
-     *
-     */
-    public String getProviderName() {
-        return "sun";
-    }
-
-    /**
-     * Returns this name service type
-     * "dns" "nis" etc
-     */
-    public String getType() {
-        return "simple";
-    }
-}
--- a/test/sun/security/krb5/auto/BogusKDC.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/BogusKDC.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -82,7 +82,7 @@
         // and wrong port for slave KDC
         try (PrintWriter w = new PrintWriter(new FileWriter(KRB5_CONF))) {
             w.write(String.format(KRB5_CONF_TEMPLATE,
-                    KDC.KDCNameService.NOT_EXISTING_HOST, WRONG_KDC_PORT));
+                    KDC.NOT_EXISTING_HOST, WRONG_KDC_PORT));
             w.flush();
         }
 
@@ -98,7 +98,7 @@
         // but correct port for slave KDC
         try (PrintWriter w = new PrintWriter(new FileWriter(KRB5_CONF))) {
             w.write(String.format(KRB5_CONF_TEMPLATE,
-                    KDC.KDCNameService.NOT_EXISTING_HOST, kdc.getPort()));
+                    KDC.NOT_EXISTING_HOST, kdc.getPort()));
             w.flush();
         }
 
--- a/test/sun/security/krb5/auto/HttpNegotiateServer.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/HttpNegotiateServer.java	Mon Apr 11 03:00:50 2016 +0100
@@ -24,8 +24,7 @@
 /*
  * @test
  * @bug 6578647 6829283
- * @modules java.base/sun.net.spi.nameservice
- *          java.base/sun.security.util
+ * @modules java.base/sun.security.util
  *          java.security.jgss/sun.security.jgss
  *          java.security.jgss/sun.security.krb5
  *          java.security.jgss/sun.security.krb5.internal
--- a/test/sun/security/krb5/auto/KDC.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/KDC.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,8 +35,6 @@
 import java.util.*;
 import java.util.concurrent.*;
 
-import sun.net.spi.nameservice.NameService;
-import sun.net.spi.nameservice.NameServiceDescriptor;
 import sun.security.krb5.*;
 import sun.security.krb5.internal.*;
 import sun.security.krb5.internal.ccache.CredentialsCache;
@@ -129,6 +127,8 @@
     public static final int DEFAULT_LIFETIME = 39600;
     public static final int DEFAULT_RENEWTIME = 86400;
 
+    public static String NOT_EXISTING_HOST = "not.existing.host";
+
     // Under the hood.
 
     // The random generator to generate random keys (including session keys)
@@ -219,7 +219,8 @@
     };
 
     static {
-        System.setProperty("sun.net.spi.nameservice.provider.1", "ns,mock");
+        String hostsFileName = System.getProperty("test.src", ".") + "/TestHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
     }
 
     /**
@@ -1448,45 +1449,6 @@
         }
     }
 
-    public static class KDCNameService implements NameServiceDescriptor {
-
-        public static String NOT_EXISTING_HOST = "not.existing.host";
-
-        @Override
-        public NameService createNameService() throws Exception {
-            NameService ns = new NameService() {
-                @Override
-                public InetAddress[] lookupAllHostAddr(String host)
-                        throws UnknownHostException {
-                    // Everything is localhost except NOT_EXISTING_HOST
-                    if (NOT_EXISTING_HOST.equals(host)) {
-                        throw new UnknownHostException("Unknown host name: "
-                                + NOT_EXISTING_HOST);
-                    }
-                    return new InetAddress[]{
-                        InetAddress.getByAddress(host, new byte[]{127,0,0,1})
-                    };
-                }
-                @Override
-                public String getHostByAddr(byte[] addr)
-                        throws UnknownHostException {
-                    // No reverse lookup, PrincipalName use original string
-                    throw new UnknownHostException();
-                }
-            };
-            return ns;
-        }
-
-        @Override
-        public String getProviderName() {
-            return "mock";
-        }
-
-        @Override
-        public String getType() {
-            return "ns";
-        }
-    }
 
     // Calling private methods thru reflections
     private static final Field getPADataField;
--- a/test/sun/security/krb5/auto/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-KDC$KDCNameService
--- a/test/sun/security/krb5/auto/NoAddresses.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/NoAddresses.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
 /*
  * @test
  * @bug 7032354
+ * @run main/othervm NoAddresses setup
  * @run main/othervm NoAddresses 1
  * @run main/othervm NoAddresses 2
  * @run main/othervm/fail NoAddresses 3
@@ -34,12 +35,24 @@
 import org.ietf.jgss.ChannelBinding;
 import sun.security.jgss.GSSUtil;
 import sun.security.krb5.Config;
+import java.io.PrintWriter;
+import java.io.FileWriter;
+import java.io.BufferedWriter;
 
 public class NoAddresses {
 
     public static void main(String[] args)
             throws Exception {
 
+        if (args[0].equalsIgnoreCase("setup")) {
+            // add a mapping of test host name to 127.0.0.1 to test's hosts file
+            InetAddress localHost = InetAddress.getLocalHost();
+            String localHostName = localHost.getHostName();
+            String hostsFileName = System.getProperty("test.src", ".") + "/TestHosts";
+            String loopBackAddress = "127.0.0.1";
+            System.setProperty("jdk.net.hosts.file", hostsFileName);
+            addMappingToHostsFile(localHostName, loopBackAddress, hostsFileName, true);
+        } else {
         OneKDC kdc = new OneKDC(null);
         kdc.writeJAASConf();
         KDC.saveConfig(OneKDC.KRB5_CONF, kdc,
@@ -79,3 +92,16 @@
         Context.handshake(c, s);
     }
 }
+
+    private static void addMappingToHostsFile (String host,
+                                               String addr,
+                                               String hostsFileName,
+                                               boolean append)
+                                             throws Exception {
+        String mapping = addr + " " + host;
+        try (PrintWriter hfPWriter = new PrintWriter(new BufferedWriter(
+                new FileWriter(hostsFileName, append)))) {
+            hfPWriter.println(mapping);
+        }
+    }
+}
--- a/test/sun/security/krb5/auto/Renew.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/Renew.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,8 +26,7 @@
  * @bug 8058290
  * @summary JAAS Krb5LoginModule has suspect ticket-renewal logic,
  *          relies on clockskew grace
- * @modules java.base/sun.net.spi.nameservice
- *          java.base/sun.security.util
+ * @modules java.base/sun.security.util
  *          java.security.jgss/sun.security.krb5
  *          java.security.jgss/sun.security.krb5.internal
  *          java.security.jgss/sun.security.krb5.internal.ccache
--- a/test/sun/security/krb5/auto/Renewal.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/Renewal.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,8 +45,11 @@
 
     static OneKDC kdc;
     static String clazz = "sun.security.krb5.internal.tools.Kinit";
+    static String hostsFileName = null;
 
     public static void main(String[] args) throws Exception {
+        hostsFileName = System.getProperty("test.src", ".") + "/TestHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
 
         kdc = new OneKDC(null);
         kdc.writeJAASConf();
@@ -95,7 +98,7 @@
         count++;
         p.args(OneKDC.USER, new String(OneKDC.PASS))
                 .inheritIO()
-                .prop("sun.net.spi.nameservice.provider.1", "ns,mock")
+                .prop("jdk.net.hosts.file", hostsFileName)
                 .prop("java.security.krb5.conf", OneKDC.KRB5_CONF)
                 .env("KRB5CCNAME", "ccache" + count)
                 .start();
@@ -114,10 +117,11 @@
     }
 
     static void checkKinitRenew() throws Exception {
+
         Proc p = Proc.create(clazz)
                 .args("-R")
                 .inheritIO()
-                .prop("sun.net.spi.nameservice.provider.1", "ns,mock")
+                .prop("jdk.net.hosts.file", hostsFileName)
                 .prop("java.security.krb5.conf", OneKDC.KRB5_CONF)
                 .env("KRB5CCNAME", "ccache" + count)
                 .start();
--- a/test/sun/security/krb5/auto/SSLwithPerms.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/SSLwithPerms.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,19 +84,21 @@
             ).getBytes());
             fos.close();
 
+            String hostsFileName = System.getProperty("test.src", ".") + "/TestHosts";
+
             Proc pc = Proc.create("SSLwithPerms")
                     .args("client")
                     .inheritIO()
                     .prop("java.security.manager", "")
                     .prop("java.security.krb5.conf", KRB5_CONF)
-                    .prop("sun.net.spi.nameservice.provider.1", "ns,mock")
+                    .prop("jdk.net.hosts.file", hostsFileName)
                     .prop("javax.net.ssl", "handshake")
                     .prop("sun.security.krb5.debug", "true")
                     .perm(new SecurityPermission("setProperty.jdk.tls.disabledAlgorithms"))
                     .perm(new PropertyPermission("sun.security.krb5.principal", "read"))
                     .perm(new FilePermission("port", "read"))
+                    .perm(new FilePermission(hostsFileName, "read"))
                     .perm(new FilePermission(KTAB, "read"))
-                    .perm(new RuntimePermission("accessClassInPackage.sun.net.spi.nameservice"))
                     .perm(new AuthPermission("modifyPrincipals"))
                     .perm(new AuthPermission("modifyPrivateCredentials"))
                     .perm(new AuthPermission("doAs"))
@@ -110,11 +112,13 @@
                     .prop("java.security.manager", "")
                     .prop("java.security.krb5.conf", KRB5_CONF)
                     .prop("java.security.auth.login.config", JAAS_CONF)
+                    .prop("jdk.net.hosts.file", hostsFileName)
                     .prop("javax.net.ssl", "handshake")
                     .prop("sun.security.krb5.debug", "true")
                     .perm(new SecurityPermission("setProperty.jdk.tls.disabledAlgorithms"))
                     .perm(new AuthPermission("createLoginContext.ssl"))
                     .perm(new AuthPermission("doAs"))
+                    .perm(new FilePermission(hostsFileName, "read"))
                     .perm(new FilePermission("port", "write"))
                     .perm(new SocketPermission("127.0.0.1", "accept"))
                     .perm(new ServicePermission("host/host.realm@REALM", "accept"))
--- a/test/sun/security/krb5/auto/TEST.properties	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/TEST.properties	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,4 @@
 modules java.base/jdk.internal.misc \
-        java.base/sun.net.spi.nameservice \
         java.base/sun.security.util \
         java.security.jgss/sun.security.jgss \
         java.security.jgss/sun.security.krb5 \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/krb5/auto/TestHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,16 @@
+127.0.0.1 host.rabbit.hole
+127.0.0.1 kdc.rabbit.hole
+127.0.0.1 kdc.snake.hole
+127.0.0.1 kdc.web.domain
+127.0.0.1 host.web.domain
+127.0.0.1 host.proxy.domain
+127.0.0.1 kdc.proxy.domain
+127.0.0.1 client.rabbit.hole
+127.0.0.1 localhost
+127.0.0.1 host.r3.local
+127.0.0.1 kdc.r1
+127.0.0.1 kdc.r2
+127.0.0.1 kdc.r3
+127.0.0.1 host.realm
+127.0.0.1 realm
+127.0.0.1 irlga09
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/krb5/auto/principalProperty/TestHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,1 @@
+127.0.0.1 localhost
--- a/test/sun/security/krb5/auto/principalProperty/principalSystemPropTest.policy	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/principalProperty/principalSystemPropTest.policy	Mon Apr 11 03:00:50 2016 +0100
@@ -11,6 +11,7 @@
   	permission javax.security.auth.AuthPermission "modifyPrincipals";
   	permission javax.security.auth.AuthPermission "getSubject";
   	permission java.util.PropertyPermission "*", "read,write";
+  	permission java.io.FilePermission "/-", "read,write,delete";
   	permission java.io.FilePermission "*", "read,write,delete";
   	permission java.lang.RuntimePermission "accessDeclaredMembers";
   	permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
--- a/test/sun/security/krb5/auto/unbound.ssl.policy	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/auto/unbound.ssl.policy	Mon Apr 11 03:00:50 2016 +0100
@@ -1,6 +1,7 @@
 grant {
     permission java.util.PropertyPermission "*", "read,write";
     permission java.net.SocketPermission "*:*", "listen,resolve,accept,connect";
+    permission java.io.FilePermission "/-", "read";
     permission java.io.FilePermission "*", "read,write,delete";
     permission java.lang.RuntimePermission "accessDeclaredMembers";
     permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
--- a/test/sun/security/krb5/canonicalize/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Test
--- a/test/sun/security/krb5/canonicalize/Test.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/krb5/canonicalize/Test.java	Mon Apr 11 03:00:50 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2016 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,20 +24,19 @@
  * @test
  * @bug 6682516
  * @summary SPNEGO_HTTP_AUTH/WWW_KRB and SPNEGO_HTTP_AUTH/WWW_SPNEGO failed on all non-windows platforms
- * @modules java.base/sun.net.spi.nameservice
- *          java.security.jgss/sun.security.krb5
- * @run main/othervm -Dsun.net.spi.nameservice.provider.1=ns,mock -Djava.security.krb5.conf=krb5.conf Test
+ * @modules java.security.jgss/sun.security.krb5
+ * @run main/othervm  -Djava.security.krb5.conf=krb5.conf Test
  */
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import sun.net.spi.nameservice.NameService;
-import sun.net.spi.nameservice.NameServiceDescriptor;
 import sun.security.krb5.PrincipalName;
 
-public class Test implements NameServiceDescriptor {
+public class Test {
     public static void main(String[] args) throws Exception {
         // This config file is generated using Kerberos.app on a Mac
+        String hostsFileName = System.getProperty("test.src", ".") + "/TestHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
         System.setProperty("java.security.krb5.realm", "THIS.REALM");
         System.setProperty("java.security.krb5.kdc", "localhost");
 
@@ -64,42 +63,4 @@
             throw new Exception("Output is " + pn);
         }
     }
-
-    @Override
-    public NameService createNameService() throws Exception {
-        NameService ns = new NameService() {
-            @Override
-            public InetAddress[] lookupAllHostAddr(String host)
-                    throws UnknownHostException {
-                // All c<n>.* goes to 127.0.0.n
-                int i = Integer.valueOf(host.split("\\.")[0].substring(1));
-                return new InetAddress[]{
-                    InetAddress.getByAddress(host, new byte[]{127,0,0,(byte)i})
-                };
             }
-            @Override
-            public String getHostByAddr(byte[] addr)
-                    throws UnknownHostException {
-                int i = addr[3];
-                switch (i) {
-                    case 1: return "c1.this.domain";        // Good
-                    case 2: return "127.0.0.2";             // Only IP
-                    case 3: return "d3.this.domain";        // name change
-                    default:
-                        throw new UnknownHostException();
-                }
-            }
-        };
-        return ns;
-    }
-
-    @Override
-    public String getProviderName() {
-        return "mock";
-    }
-
-    @Override
-    public String getType() {
-        return "ns";
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/krb5/canonicalize/TestHosts	Mon Apr 11 03:00:50 2016 +0100
@@ -0,0 +1,6 @@
+127.0.0.1 c1.this.domain
+127.0.0.1 c1
+127.0.0.2 127.0.0.2
+127.0.0.2 c2
+127.0.0.3 c3
+127.0.0.1 c1.this
--- a/test/sun/security/x509/URICertStore/ExtensionsWithLDAP.java	Sat Apr 09 20:12:13 2016 +0100
+++ b/test/sun/security/x509/URICertStore/ExtensionsWithLDAP.java	Mon Apr 11 03:00:50 2016 +0100
@@ -44,14 +44,11 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
-import sun.net.spi.nameservice.NameService;
-import sun.net.spi.nameservice.NameServiceDescriptor;
 
 /*
  * @test
  * @bug 8134708
  * @summary Check if LDAP resources from CRLDP and AIA extensions can be loaded
- * @modules java.base/sun.net.spi.nameservice
  * @run main/othervm ExtensionsWithLDAP
  */
 public class ExtensionsWithLDAP {
@@ -149,7 +146,8 @@
         System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
 
         // register a local name service
-        System.setProperty("sun.net.spi.nameservice.provider.1", "ns,localdns");
+        String hostsFileName = System.getProperty("test.src", ".") + "/ExtensionsWithLDAPHosts";
+        System.setProperty("jdk.net.hosts.file", hostsFileName);
 
         X509Certificate trustedCert = loadCertificate(CA_CERT);
         X509Certificate eeCert = loadCertificate(EE_CERT);
@@ -201,48 +199,8 @@
     }
 
     // a local name service which log requested host names
-    public static class LocalNameService implements NameServiceDescriptor {
+    public static class LocalNameService {
 
         static final List<String> requestedHosts = new ArrayList<>();
-
-        @Override
-        public NameService createNameService() throws Exception {
-            System.out.println("LocalNameService: createNameService() called");
-            NameService ns = new NameService() {
-
-                @Override
-                public InetAddress[] lookupAllHostAddr(String host)
-                        throws UnknownHostException {
-
-                    System.out.println("LocalNameService: "
-                            + "NameService.lookupAllHostAddr(): " + host);
-
-                    requestedHosts.add(host);
-
-                    throw new UnknownHostException();
                 }
-
-                @Override
-                public String getHostByAddr(byte[] addr)
-                        throws UnknownHostException {
-                    System.out.println("LocalNameService: "
-                            + "NameService.getHostByAddr(): "
-                            + Arrays.toString(addr));
-                    throw new UnknownHostException("No reverse lookup");
                 }
-            };
-            return ns;
-        }
-
-        @Override
-        public String getProviderName() {
-            return "localdns";
-        }
-
-        @Override
-        public String getType() {
-            return "ns";
-        }
-    }
-
-}
--- a/test/sun/security/x509/URICertStore/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor	Sat Apr 09 20:12:13 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-ExtensionsWithLDAP$LocalNameService