Mercurial > hg > release > icedtea7-forest-2.0 > jdk
changeset 3567:d1365fdfb3ea
Merge
author | phh |
---|---|
date | Sat, 22 Jan 2011 08:43:25 -0500 |
parents | cd13b2114f2e (current diff) d03e47de3a89 (diff) |
children | 4cc447291326 b33e9b15835e |
files | test/java/net/InetAddress/B4762344.java test/java/net/InetAddress/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/java/net/InetAddress/Simple1NameServiceDescriptor.java test/java/net/InetAddress/Simple2NameServiceDescriptor.java test/java/net/InetAddress/SimpleNameService.java test/sun/net/InetAddress/nameservice/B6442088.java test/sun/net/InetAddress/nameservice/CacheTest.java test/sun/net/InetAddress/nameservice/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor test/sun/net/InetAddress/nameservice/SimpleNameService.java test/sun/net/InetAddress/nameservice/SimpleNameServiceDescriptor.java |
diffstat | 29 files changed, 983 insertions(+), 793 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/bin/java.c Sat Jan 22 08:42:14 2011 -0500 +++ b/src/share/bin/java.c Sat Jan 22 08:43:25 2011 -0500 @@ -94,15 +94,15 @@ * Prototypes for functions internal to launcher. */ static void SetClassPath(const char *s); -static void SetModulesBootClassPath(const char *s); static void SelectVersion(int argc, char **argv, char **main_class); -static jboolean ParseArguments(int *pargc, char ***pargv, char **pjarfile, - char **pclassname, int *pret, const char *jvmpath); +static jboolean ParseArguments(int *pargc, char ***pargv, + int *pmode, char **pwhat, + int *pret, const char *jrepath); static jboolean InitializeJVM(JavaVM **pvm, JNIEnv **penv, InvocationFunctions *ifn); static jstring NewPlatformString(JNIEnv *env, char *s); static jobjectArray NewPlatformStringArray(JNIEnv *env, char **strv, int strc); -static jclass LoadMainClass(JNIEnv *env, jboolean isJar, char *name); +static jclass LoadMainClass(JNIEnv *env, int mode, char *name); static void TranslateApplicationArgs(int jargc, const char **jargv, int *pargc, char ***pargv); static jboolean AddApplicationOptions(int cpathc, const char **cpathv); @@ -158,18 +158,27 @@ * Running Java code in primordial thread caused many problems. We will * create a new thread to invoke JVM. See 6316197 for more information. */ -static jlong threadStackSize = 0; /* stack size of the new thread */ +static jlong threadStackSize = 0; /* stack size of the new thread */ static jlong maxHeapSize = 0; /* max heap size */ static jlong initialHeapSize = 0; /* inital heap size */ int JNICALL JavaMain(void * args); /* entry point */ +enum LaunchMode { // cf. sun.launcher.LauncherHelper + LM_UNKNOWN = 0, + LM_CLASS, + LM_JAR +}; + +static const char *launchModeNames[] + = { "Unknown", "Main class", "JAR file" }; + typedef struct { - int argc; - char ** argv; - char * jarfile; - char * classname; - InvocationFunctions ifn; + int argc; + char **argv; + int mode; + char *what; + InvocationFunctions ifn; } JavaMainArgs; /* @@ -189,8 +198,8 @@ jint ergo /* ergonomics class policy */ ) { - char *jarfile = 0; - char *classname = 0; + int mode = LM_UNKNOWN; + char *what = NULL; char *cpath = 0; char *main_class = NULL; int ret; @@ -277,24 +286,21 @@ SetClassPath(cpath); } - /* - * Parse command line options; if the return value of - * ParseArguments is false, the program should exit. + /* Parse command line options; if the return value of + * ParseArguments is false, the program should exit. */ - if (!ParseArguments(&argc, &argv, &jarfile, &classname, &ret, jvmpath)) { + if (!ParseArguments(&argc, &argv, &mode, &what, &ret, jrepath)) + { return(ret); } - /* Set bootclasspath for modules */ - SetModulesBootClassPath(jrepath); - /* Override class path if -jar flag was specified */ - if (jarfile != 0) { - SetClassPath(jarfile); + if (mode == LM_JAR) { + SetClassPath(what); /* Override class path */ } /* set the -Dsun.java.command pseudo property */ - SetJavaCommandLineProp(classname, jarfile, argc, argv); + SetJavaCommandLineProp(what, argc, argv); /* Set the -Dsun.java.launcher pseudo property */ SetJavaLauncherProp(); @@ -305,7 +311,7 @@ /* Show the splash screen if needed */ ShowSplashScreen(); - return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret); + return ContinueInNewThread(&ifn, argc, argv, mode, what, ret); } /* @@ -353,13 +359,13 @@ JavaMainArgs *args = (JavaMainArgs *)_args; int argc = args->argc; char **argv = args->argv; - char *jarfile = args->jarfile; - char *classname = args->classname; + int mode = args->mode; + char *what = args->what; InvocationFunctions ifn = args->ifn; JavaVM *vm = 0; JNIEnv *env = 0; - jclass mainClass; + jclass mainClass = NULL; jmethodID mainID; jobjectArray mainArgs; int ret = 0; @@ -385,7 +391,7 @@ CHECK_EXCEPTION_LEAVE(1); } /* If the user specified neither a class name nor a JAR file */ - if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) { + if (printXUsage || printUsage || what == 0 || mode == LM_UNKNOWN) { PrintUsage(env, printXUsage); CHECK_EXCEPTION_LEAVE(1); LEAVE(); @@ -399,11 +405,11 @@ (long)(jint)Counter2Micros(end-start)); } - /* At this stage, argc/argv have the applications' arguments */ + /* At this stage, argc/argv have the application's arguments */ if (JLI_IsTraceLauncher()){ int i; - printf("Main-Class is '%s'\n", classname ? classname : ""); - printf("Apps' argc is %d\n", argc); + printf("%s is '%s'\n", launchModeNames[mode], what); + printf("App's argc is %d\n", argc); for (i=0; i < argc; i++) { printf(" argv[%2d] = '%s'\n", i, argv[i]); } @@ -431,11 +437,7 @@ * 2) Remove the vestages of maintaining main_class through * the environment (and remove these comments). */ - if (jarfile != 0) { - mainClass = LoadMainClass(env, JNI_TRUE, jarfile); - } else { - mainClass = LoadMainClass(env, JNI_FALSE, classname); - } + mainClass = LoadMainClass(env, mode, what); CHECK_EXCEPTION_NULL_LEAVE(mainClass); /* @@ -697,7 +699,7 @@ if (JLI_StrCCmp(str, "-Xms") == 0) { jlong tmp; if (parse_size(str + 4, &tmp)) { - initialHeapSize = tmp; + initialHeapSize = tmp; } } } @@ -719,44 +721,6 @@ } /* - * Set the bootclasspath for modules. - * A temporary workaround until jigsaw is integrated into JDK 7. - */ -static void -SetModulesBootClassPath(const char *jrepath) -{ - char *def, *s; - char pathname[MAXPATHLEN]; - const char separator[] = { FILE_SEPARATOR, '\0' }; - const char *orig = jrepath; - static const char format[] = "-Xbootclasspath/p:%s"; - struct stat statbuf; - - /* return if jre/lib/rt.jar exists */ - JLI_Snprintf(pathname, sizeof(pathname), "%s%slib%srt.jar", jrepath, separator, separator); - if (stat(pathname, &statbuf) == 0) { - return; - } - - /* return if jre/classes exists */ - JLI_Snprintf(pathname, sizeof(pathname), "%s%sclasses", jrepath, separator); - if (stat(pathname, &statbuf) == 0) { - return; - } - - /* modularized jre */ - JLI_Snprintf(pathname, sizeof(pathname), "%s%slib%s*", jrepath, separator, separator); - s = (char *) JLI_WildcardExpandClasspath(pathname); - def = JLI_MemAlloc(sizeof(format) - - 2 /* strlen("%s") */ - + JLI_StrLen(s)); - sprintf(def, format, s); - AddOption(def, NULL); - if (s != orig) - JLI_MemFree((char *) s); -} - -/* * The SelectVersion() routine ensures that an appropriate version of * the JRE is running. The specification for the appropriate version * is obtained from either the manifest of a jar file (preferred) or @@ -1000,16 +964,17 @@ /* * Parses command line arguments. Returns JNI_FALSE if launcher * should exit without starting vm, returns JNI_TRUE if vm needs - * to be started to process given options. *pret (the launcher + * to be started to process given options. *pret (the launcher * process return value) is set to 0 for a normal exit. */ static jboolean -ParseArguments(int *pargc, char ***pargv, char **pjarfile, - char **pclassname, int *pret, const char *jvmpath) +ParseArguments(int *pargc, char ***pargv, + int *pmode, char **pwhat, + int *pret, const char *jrepath) { int argc = *pargc; char **argv = *pargv; - jboolean jarflag = JNI_FALSE; + int mode = LM_UNKNOWN; char *arg; *pret = 0; @@ -1019,10 +984,11 @@ if (JLI_StrCmp(arg, "-classpath") == 0 || JLI_StrCmp(arg, "-cp") == 0) { ARG_CHECK (argc, ARG_ERROR1, arg); SetClassPath(*argv); + mode = LM_CLASS; argv++; --argc; } else if (JLI_StrCmp(arg, "-jar") == 0) { ARG_CHECK (argc, ARG_ERROR2, arg); - jarflag = JNI_TRUE; + mode = LM_JAR; } else if (JLI_StrCmp(arg, "-help") == 0 || JLI_StrCmp(arg, "-h") == 0 || JLI_StrCmp(arg, "-?") == 0) { @@ -1102,19 +1068,24 @@ } if (--argc >= 0) { - if (jarflag) { - *pjarfile = *argv++; - *pclassname = NULL; - } else { - *pjarfile = NULL; - *pclassname = *argv++; - } + *pwhat = *argv++; + } + + if (*pwhat == NULL) { + *pret = 1; + } else if (mode == LM_UNKNOWN) { + /* default to LM_CLASS if -jar and -cp option are + * not specified */ + mode = LM_CLASS; + } + + if (argc >= 0) { *pargc = argc; *pargv = argv; } - if (*pjarfile == NULL && *pclassname == NULL) { - *pret = 1; - } + + *pmode = mode; + return JNI_TRUE; } @@ -1263,7 +1234,7 @@ * call it for more details refer to the java implementation. */ static jclass -LoadMainClass(JNIEnv *env, jboolean isJar, char *name) +LoadMainClass(JNIEnv *env, int mode, char *name) { jclass cls; jmethodID mid; @@ -1276,9 +1247,9 @@ } NULL_CHECK0(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper")); NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls, "checkAndLoadMain", - "(ZZLjava/lang/String;)Ljava/lang/Object;")); + "(ZILjava/lang/String;)Ljava/lang/Class;")); str = (*env)->NewStringUTF(env, name); - result = (*env)->CallStaticObjectMethod(env, cls, mid, JNI_TRUE, isJar, str); + result = (*env)->CallStaticObjectMethod(env, cls, mid, JNI_TRUE, mode, str); if (JLI_IsTraceLauncher()) { end = CounterGet(); @@ -1424,8 +1395,7 @@ * property is not exported by HotSpot to the Java layer. */ void -SetJavaCommandLineProp(char *classname, char *jarfile, - int argc, char **argv) +SetJavaCommandLineProp(char *what, int argc, char **argv) { int i = 0; @@ -1433,22 +1403,17 @@ char* javaCommand = NULL; char* dashDstr = "-Dsun.java.command="; - if (classname == NULL && jarfile == NULL) { + if (what == NULL) { /* unexpected, one of these should be set. just return without * setting the property */ return; } - /* if the class name is not set, then use the jarfile name */ - if (classname == NULL) { - classname = jarfile; - } - /* determine the amount of memory to allocate assuming * the individual components will be space separated */ - len = JLI_StrLen(classname); + len = JLI_StrLen(what); for (i = 0; i < argc; i++) { len += JLI_StrLen(argv[i]) + 1; } @@ -1459,7 +1424,7 @@ /* build the -D string */ *javaCommand = '\0'; JLI_StrCat(javaCommand, dashDstr); - JLI_StrCat(javaCommand, classname); + JLI_StrCat(javaCommand, what); for (i = 0; i < argc; i++) { /* the components of the string are space separated. In @@ -1479,7 +1444,8 @@ * JVM would like to know if it's created by a standard Sun launcher, or by * user native application, the following property indicates the former. */ -void SetJavaLauncherProp() { +void +SetJavaLauncherProp() { AddOption("-Dsun.java.launcher=SUN_STANDARD", NULL); } @@ -1913,8 +1879,8 @@ } static int -ContinueInNewThread(InvocationFunctions* ifn, int argc, - char **argv, char *jarfile, char *classname, int ret) +ContinueInNewThread(InvocationFunctions* ifn, int argc, char **argv, + int mode, char *what, int ret) { /* @@ -1938,8 +1904,8 @@ args.argc = argc; args.argv = argv; - args.jarfile = jarfile; - args.classname = classname; + args.mode = mode; + args.what = what; args.ifn = *ifn; rslt = ContinueInNewThread0(JavaMain, threadStackSize, (void*)&args);
--- a/src/share/bin/java.h Sat Jan 22 08:42:14 2011 -0500 +++ b/src/share/bin/java.h Sat Jan 22 08:43:25 2011 -0500 @@ -153,7 +153,7 @@ /* sun.java.launcher.* platform properties. */ void SetJavaLauncherPlatformProps(void); -void SetJavaCommandLineProp(char* classname, char* jarfile, int argc, char** argv); +void SetJavaCommandLineProp(char* what, int argc, char** argv); void SetJavaLauncherProp(void); /* @@ -178,8 +178,9 @@ jboolean ServerClassMachine(); -static int ContinueInNewThread(InvocationFunctions* ifn, int argc, char** argv, - char* jarfile, char* classname, int ret); +static int ContinueInNewThread(InvocationFunctions* ifn, + int argc, char** argv, + int mode, char *what, int ret); /* * Initialize platform specific settings
--- a/src/share/classes/java/net/InetAddress.java Sat Jan 22 08:42:14 2011 -0500 +++ b/src/share/classes/java/net/InetAddress.java Sat Jan 22 08:43:25 2011 -0500 @@ -677,8 +677,7 @@ static InetAddressImpl impl; - private static HashMap<String, InetAddress[]> lookupTable - = new HashMap<String, InetAddress[]>(); + private static final HashMap<String, Void> lookupTable = new HashMap<>(); /** * Represents a cache entry @@ -737,7 +736,7 @@ // As we iterate in insertion order we can // terminate when a non-expired entry is found. - LinkedList<String> expired = new LinkedList<String>(); + LinkedList<String> expired = new LinkedList<>(); long now = System.currentTimeMillis(); for (String key : cache.keySet()) { CacheEntry entry = cache.get(key); @@ -1227,43 +1226,45 @@ // lookupTable and return null so the // following code would do a lookup itself. if ((addresses = checkLookupTable(host)) == null) { - // This is the first thread which looks up the addresses - // this host or the cache entry for this host has been - // expired so this thread should do the lookup. - for (NameService nameService : nameServices) { - try { - /* - * Do not put the call to lookup() inside the - * constructor. if you do you will still be - * allocating space when the lookup fails. - */ + try { + // This is the first thread which looks up the addresses + // this host or the cache entry for this host has been + // expired so this thread should do the lookup. + for (NameService nameService : nameServices) { + try { + /* + * Do not put the call to lookup() inside the + * constructor. if you do you will still be + * allocating space when the lookup fails. + */ - addresses = nameService.lookupAllHostAddr(host); - success = true; - break; - } catch (UnknownHostException uhe) { - if (host.equalsIgnoreCase("localhost")) { - InetAddress[] local = new InetAddress[] { impl.loopbackAddress() }; - addresses = local; + addresses = nameService.lookupAllHostAddr(host); success = true; break; - } - else { - addresses = unknown_array; - success = false; - ex = uhe; + } catch (UnknownHostException uhe) { + if (host.equalsIgnoreCase("localhost")) { + InetAddress[] local = new InetAddress[] { impl.loopbackAddress() }; + addresses = local; + success = true; + break; + } + else { + addresses = unknown_array; + success = false; + ex = uhe; + } } } + + // Cache the addresses. + cacheAddresses(host, addresses, success); + if (!success && ex != null) + throw ex; + } finally { + // Delete host from the lookupTable and notify + // all threads waiting on the lookupTable monitor. + updateLookupTable(host); } - - // Cache the addresses. - cacheAddresses(host, addresses, success); - // Delete the host from the lookupTable, and - // notify all threads waiting for the monitor - // for lookupTable. - updateLookupTable(host); - if (!success && ex != null) - throw ex; } return addresses; @@ -1271,16 +1272,13 @@ private static InetAddress[] checkLookupTable(String host) { - // make sure addresses is null. - InetAddress[] addresses = null; - synchronized (lookupTable) { // If the host isn't in the lookupTable, add it in the // lookuptable and return null. The caller should do // the lookup. if (lookupTable.containsKey(host) == false) { lookupTable.put(host, null); - return addresses; + return null; } // If the host is in the lookupTable, it means that another @@ -1298,10 +1296,11 @@ // the host. This thread should retry to get the addresses // from the addressCache. If it doesn't get the addresses from // the cache, it will try to look up the addresses itself. - addresses = getCachedAddresses(host); + InetAddress[] addresses = getCachedAddresses(host); if (addresses == null) { synchronized (lookupTable) { lookupTable.put(host, null); + return null; } }
--- a/src/share/classes/sun/launcher/LauncherHelper.java Sat Jan 22 08:42:14 2011 -0500 +++ b/src/share/classes/sun/launcher/LauncherHelper.java Sat Jan 22 08:43:25 2011 -0500 @@ -401,6 +401,14 @@ } } + + // From src/share/bin/java.c: + // enum LaunchMode { LM_UNKNOWN = 0, LM_CLASS, LM_JAR }; + + private static final int LM_UNKNOWN = 0; + private static final int LM_CLASS = 1; + private static final int LM_JAR = 2; + /** * This method does the following: * 1. gets the classname from a Jar's manifest, if necessary @@ -420,24 +428,40 @@ * @return * @throws java.io.IOException */ - public static Object checkAndLoadMain(boolean printToStderr, - boolean isJar, String name) throws IOException { + public static Class<?> checkAndLoadMain(boolean printToStderr, + int mode, + String what) throws IOException + { + + ClassLoader ld = ClassLoader.getSystemClassLoader(); + // get the class name - String classname = (isJar) ? getMainClassFromJar(name) : name; - classname = classname.replace('/', '.'); - ClassLoader loader = ClassLoader.getSystemClassLoader(); - Class<?> clazz = null; + String cn = null; + switch (mode) { + case LM_CLASS: + cn = what; + break; + case LM_JAR: + cn = getMainClassFromJar(what); + break; + default: + throw new InternalError("" + mode + ": Unknown launch mode"); + } + cn = cn.replace('/', '.'); + PrintStream ostream = (printToStderr) ? System.err : System.out; + Class<?> c = null; try { - clazz = loader.loadClass(classname); + c = ld.loadClass(cn); } catch (ClassNotFoundException cnfe) { - ostream.println(getLocalizedMessage("java.launcher.cls.error1", classname)); - NoClassDefFoundError ncdfe = new NoClassDefFoundError(classname); + ostream.println(getLocalizedMessage("java.launcher.cls.error1", + cn)); + NoClassDefFoundError ncdfe = new NoClassDefFoundError(cn); ncdfe.initCause(cnfe); throw ncdfe; } - signatureDiagnostic(ostream, clazz); - return clazz; + signatureDiagnostic(ostream, c); + return c; } static void signatureDiagnostic(PrintStream ostream, Class<?> clazz) {
--- a/src/windows/demo/jvmti/hprof/hprof_md.c Sat Jan 22 08:42:14 2011 -0500 +++ b/src/windows/demo/jvmti/hprof/hprof_md.c Sat Jan 22 08:43:25 2011 -0500 @@ -29,12 +29,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +// To ensure winsock2.h is used, it has to be included ahead of +// windows.h, which includes winsock.h by default. +#include <winsock2.h> #include <windows.h> #include <io.h> #include <sys/types.h> #include <sys/stat.h> #include <mmsystem.h> -#include <winsock2.h> #include <fcntl.h> #include <process.h> @@ -147,7 +149,7 @@ void md_close(int filedes) { - (void)close(filedes); + (void)closesocket(filedes); } int
--- a/test/java/net/InetAddress/B4762344.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2007, 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 - * @build B4762344 SimpleNameService Simple1NameServiceDescriptor Simple2NameServiceDescriptor - * @run main/othervm -Dsun.net.spi.nameservice.provider.1=simple1,sun -Dsun.net.spi.nameservice.provider.2=simple2,sun B4762344 - */ - -import java.net.*; -import java.util.*; - - -public class B4762344 { - 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/java/net/InetAddress/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -Simple1NameServiceDescriptor -Simple2NameServiceDescriptor
--- a/test/java/net/InetAddress/Simple1NameServiceDescriptor.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2006, 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/java/net/InetAddress/Simple2NameServiceDescriptor.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2006, 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/java/net/InetAddress/SimpleNameService.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2006, 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/B6442088.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2006, 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 6442088 - * @summary Change default DNS caching behavior for code not running under - * security manager. - * - * @build B6442088 SimpleNameService SimpleNameServiceDescriptor - * @run main/othervm/timeout=200 -Dsun.net.inetaddr.ttl=20 -Dsun.net.spi.nameservice.provider.1=simple,sun B6442088 - */ -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.security.Security; - -public class B6442088 { - - public static void main(String args[]) throws Exception { - - // name service needs to resolve this. - SimpleNameService.put("theclub", "129.156.220.219"); - - 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"); - - 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"); - - test ("theclub", "129.156.220.219", true, 3); - test ("luster", "10.5.18.21", true, 3); - test ("bar", "10.5.18.22", false, 4); - test ("foo", "10.5.18.22", true, 5); - - // now delay to see if theclub has expired - sleep (5); - - test ("foo", "10.5.18.22", true, 5); - test ("theclub", "129.156.220.1", true, 6); - - sleep (11); - // now see if luster has expired - test ("luster", "10.5.18.21", true, 7); - test ("theclub", "129.156.220.1", true, 7); - - // now delay to see if 3rd has expired - sleep (10+6); - - test ("theclub", "129.156.220.1", true, 8); - test ("luster", "10.5.18.21", true, 8); - test ("foo", "10.5.18.22", true, 9); - } - - /* throws RuntimeException if it fails */ - - 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) { - try { - Thread.sleep (seconds * 1000); - } catch (InterruptedException e) {} - } - - static void test (String host, String address, boolean shouldSucceed) { - InetAddress addr = null; - try { - addr = InetAddress.getByName (host); - if (!shouldSucceed) { - throw new RuntimeException (host+":"+address+": should fail"); - - } - if (!address.equals(addr.getHostAddress())) { - throw new RuntimeException(host+":"+address+": compare failed"); - } - } catch (UnknownHostException e) { - if (shouldSucceed) { - throw new RuntimeException(host+":"+address+": should succeed"); - } - } - } - -}
--- a/test/sun/net/InetAddress/nameservice/CacheTest.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2002, 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 4292867 - * @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. - * - * @build CacheTest SimpleNameService SimpleNameServiceDescriptor - * @run main/othervm/timeout=200 -Dsun.net.spi.nameservice.provider.1=simple,sun CacheTest - */ -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.security.Security; - -public class CacheTest { - - - public static void main(String args[]) throws Exception { - - /* - * First check the ttl on negative lookups is in the <15 second - * range. If the ttl is <=0 it means we cache forever or always - * consult the name service. For ttl > 15 the test would take - * too long so we skip it (need to coordinate jtreg timeout - * with negative ttl) - */ - String ttlProp = "networkaddress.cache.negative.ttl"; - int ttl = 0; - String policy = Security.getProperty(ttlProp); - if (policy != null) { - ttl = Integer.parseInt(policy); - } - if (ttl <= 0 || ttl > 15) { - System.err.println("Security property " + ttlProp + " needs to " + - " in 1-15 second range to execute this test"); - return; - - } - - /* - * The following outlines how the test works :- - * - * 1. Do a lookup via InetAddress.getByName that it guaranteed - * to succeed. This forces at least one entry into the cache - * that will not expire. - * - * 2. Do a lookup via InetAddress.getByName that is guarnateed - * to fail. This results in a negative lookup cached for - * for a short period to time. - * - * 3. Wait for the cache entry to expire. - * - * 4. Do a lookup (which should consult the name service) and - * the lookup should succeed. - */ - - // name service needs to resolve this. - SimpleNameService.put("theclub", "129.156.220.219"); - - // this lookup will succeed - InetAddress.getByName("theclub"); - - // lookup "luster" - this should throw UHE as name service - // doesn't know anything about this host. - - try { - InetAddress.getByName("luster"); - throw new RuntimeException("Test internal error " + - " - luster is bring resolved by name service"); - } catch (UnknownHostException x) { - } - - // name service now needs to know about luster - SimpleNameService.put("luster", "10.5.18.21"); - - // wait for the cache entry to expire and lookup should - // succeed. - Thread.currentThread().sleep(ttl*1000 + 1000); - InetAddress.getByName("luster"); - } - -}
--- a/test/sun/net/InetAddress/nameservice/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -# name service provider descriptor -SimpleNameServiceDescriptor
--- a/test/sun/net/InetAddress/nameservice/SimpleNameService.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2002, 2006, 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/SimpleNameServiceDescriptor.java Sat Jan 22 08:42:14 2011 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2002, 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"; - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/chaining/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,23 @@ +# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/chaining/Providers.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2007, 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 + * @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); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/chaining/Simple1NameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006, 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"; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/chaining/Simple2NameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006, 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"; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/chaining/SimpleNameService.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2006, 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(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/deadlock/Hang.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,46 @@ +/* + * 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 + * @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"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/deadlock/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,22 @@ +# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameService.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,47 @@ +/* + * 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(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/deadlock/ThrowingNameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,40 @@ +/* + * 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"; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/simple/CacheTest.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2002, 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 4292867 + * @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. + * @compile -XDignore.symbol.file=true SimpleNameService.java + * SimpleNameServiceDescriptor.java + * @run main/othervm/timeout=200 -Dsun.net.spi.nameservice.provider.1=simple,sun CacheTest + */ +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.security.Security; + +public class CacheTest { + + + public static void main(String args[]) throws Exception { + + /* + * First check the ttl on negative lookups is in the <15 second + * range. If the ttl is <=0 it means we cache forever or always + * consult the name service. For ttl > 15 the test would take + * too long so we skip it (need to coordinate jtreg timeout + * with negative ttl) + */ + String ttlProp = "networkaddress.cache.negative.ttl"; + int ttl = 0; + String policy = Security.getProperty(ttlProp); + if (policy != null) { + ttl = Integer.parseInt(policy); + } + if (ttl <= 0 || ttl > 15) { + System.err.println("Security property " + ttlProp + " needs to " + + " in 1-15 second range to execute this test"); + return; + + } + + /* + * The following outlines how the test works :- + * + * 1. Do a lookup via InetAddress.getByName that it guaranteed + * to succeed. This forces at least one entry into the cache + * that will not expire. + * + * 2. Do a lookup via InetAddress.getByName that is guarnateed + * to fail. This results in a negative lookup cached for + * for a short period to time. + * + * 3. Wait for the cache entry to expire. + * + * 4. Do a lookup (which should consult the name service) and + * the lookup should succeed. + */ + + // name service needs to resolve this. + SimpleNameService.put("theclub", "129.156.220.219"); + + // this lookup will succeed + InetAddress.getByName("theclub"); + + // lookup "luster" - this should throw UHE as name service + // doesn't know anything about this host. + + try { + InetAddress.getByName("luster"); + throw new RuntimeException("Test internal error " + + " - luster is bring resolved by name service"); + } catch (UnknownHostException x) { + } + + // name service now needs to know about luster + SimpleNameService.put("luster", "10.5.18.21"); + + // wait for the cache entry to expire and lookup should + // succeed. + Thread.currentThread().sleep(ttl*1000 + 1000); + InetAddress.getByName("luster"); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/simple/DefaultCaching.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2006, 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 6442088 + * @summary Change default DNS caching behavior for code not running under + * security manager. + * @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 + */ +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.security.Security; + +public class DefaultCaching { + + public static void main(String args[]) throws Exception { + + // name service needs to resolve this. + SimpleNameService.put("theclub", "129.156.220.219"); + + 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"); + + 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"); + + test ("theclub", "129.156.220.219", true, 3); + test ("luster", "10.5.18.21", true, 3); + test ("bar", "10.5.18.22", false, 4); + test ("foo", "10.5.18.22", true, 5); + + // now delay to see if theclub has expired + sleep (5); + + test ("foo", "10.5.18.22", true, 5); + test ("theclub", "129.156.220.1", true, 6); + + sleep (11); + // now see if luster has expired + test ("luster", "10.5.18.21", true, 7); + test ("theclub", "129.156.220.1", true, 7); + + // now delay to see if 3rd has expired + sleep (10+6); + + test ("theclub", "129.156.220.1", true, 8); + test ("luster", "10.5.18.21", true, 8); + test ("foo", "10.5.18.22", true, 9); + } + + /* throws RuntimeException if it fails */ + + 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) { + try { + Thread.sleep (seconds * 1000); + } catch (InterruptedException e) {} + } + + static void test (String host, String address, boolean shouldSucceed) { + InetAddress addr = null; + try { + addr = InetAddress.getByName (host); + if (!shouldSucceed) { + throw new RuntimeException (host+":"+address+": should fail"); + + } + if (!address.equals(addr.getHostAddress())) { + throw new RuntimeException(host+":"+address+": compare failed"); + } + } catch (UnknownHostException e) { + if (shouldSucceed) { + throw new RuntimeException(host+":"+address+": should succeed"); + } + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/simple/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,22 @@ +# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/simple/SimpleNameService.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2002, 2006, 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(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/InetAddress/nameservice/simple/SimpleNameServiceDescriptor.java Sat Jan 22 08:43:25 2011 -0500 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2002, 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"; + } +}