changeset 859:c87205c0e215

Merge
author tbell
date Thu, 05 Feb 2009 09:28:04 -0800
parents 886a56291f1c 61ee91f965ac
children 2753acfbf013
files
diffstat 8 files changed, 147 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/lang/Enum.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/src/share/classes/java/lang/Enum.java	Thu Feb 05 09:28:04 2009 -0800
@@ -34,11 +34,13 @@
 /**
  * This is the common base class of all Java language enumeration types.
  *
- * More information about enums, including implicit methods synthesised
- * by the compiler, can be found in <i>The Java&trade; Language
- * Specification, Third Edition</i>, <a
+ * More information about enums, including descriptions of the
+ * implicitly declared methods synthesized by the compiler, can be
+ * found in <i>The Java&trade; Language Specification, Third
+ * Edition</i>, <a
  * href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9">&sect;8.9</a>.
  *
+ * @param <E> The enum type subclass
  * @author  Josh Bloch
  * @author  Neal Gafter
  * @see     Class#getEnumConstants()
@@ -197,6 +199,15 @@
      * to declare an enum constant in this type.  (Extraneous whitespace
      * characters are not permitted.)
      *
+     * <p>Note that for a particular enum type {@code T}, the
+     * implicitly declared {@code public static T valueOf(String)}
+     * method on that enum may be used instead of this method to map
+     * from a name to the corresponding enum constant.  All the
+     * constants of an enum type can be obtained by calling the
+     * implicit {@code public static T[] values()} method of that
+     * type.
+     *
+     * @param <T> The enum type whose constant is to be returned
      * @param enumType the {@code Class} object of the enum type from which
      *      to return a constant
      * @param name the name of the constant to return
--- a/src/share/classes/java/net/CookieManager.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/src/share/classes/java/net/CookieManager.java	Thu Feb 05 09:28:04 2009 -0800
@@ -107,8 +107,9 @@
  * </ul>
  * </blockquote>
  *
- * <p>The implementation conforms to RFC 2965, section 3.3.
+ * <p>The implementation conforms to <a href="http://www.ietf.org/rfc/rfc2965.txt">RFC 2965</a>, section 3.3.
  *
+ * @see CookiePolicy
  * @author Edward Wang
  * @since 1.6
  */
--- a/src/share/classes/java/net/HttpCookie.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/src/share/classes/java/net/HttpCookie.java	Thu Feb 05 09:28:04 2009 -0800
@@ -33,6 +33,7 @@
 import java.util.Date;
 
 import java.lang.NullPointerException;  // for javadoc
+import java.util.Locale;
 
 /**
  * An HttpCookie object represents an http cookie, which carries state
@@ -1096,7 +1097,7 @@
     static {
             cDateFormats = new SimpleDateFormat[COOKIE_DATE_FORMATS.length];
             for (int i = 0; i < COOKIE_DATE_FORMATS.length; i++) {
-                cDateFormats[i] = new SimpleDateFormat(COOKIE_DATE_FORMATS[i]);
+                cDateFormats[i] = new SimpleDateFormat(COOKIE_DATE_FORMATS[i], Locale.US);
                 cDateFormats[i].setTimeZone(TimeZone.getTimeZone("GMT"));
             }
     }
--- a/src/share/classes/sun/security/krb5/Config.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/src/share/classes/sun/security/krb5/Config.java	Thu Feb 05 09:28:04 2009 -0800
@@ -39,7 +39,6 @@
 import java.io.InputStreamReader;
 import java.io.IOException;
 import java.util.Enumeration;
-import java.util.List;
 import java.util.StringTokenizer;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -156,11 +155,7 @@
                 configFile = loadConfigFile();
                 stanzaTable = parseStanzaTable(configFile);
             } catch (IOException ioe) {
-                KrbException ke = new KrbException("Could not load " +
-                                                   "configuration file " +
-                                                   ioe.getMessage());
-                ke.initCause(ioe);
-                throw(ke);
+                // No krb5.conf, no problem. We'll use DNS etc.
             }
         }
     }
@@ -1057,7 +1052,12 @@
     public boolean useDNS(String name) {
         String value = getDefault(name, "libdefaults");
         if (value == null) {
-            return getDefaultBooleanValue("dns_fallback", "libdefaults");
+            value = getDefault("dns_fallback", "libdefaults");
+            if ("false".equalsIgnoreCase(value)) {
+                return false;
+            } else {
+                return true;
+            }
         } else {
             return value.equalsIgnoreCase("true");
         }
@@ -1079,12 +1079,39 @@
 
     /**
      * Gets default realm.
+     * @throws KrbException where no realm can be located
+     * @return the default realm, always non null
      */
     public String getDefaultRealm() throws KrbException {
+        Exception cause = null;
         String realm = getDefault("default_realm", "libdefaults");
         if ((realm == null) && useDNS_Realm()) {
             // use DNS to locate Kerberos realm
-            realm = getRealmFromDNS();
+            try {
+                realm = getRealmFromDNS();
+            } catch (KrbException ke) {
+                cause = ke;
+            }
+        }
+        if (realm == null) {
+            realm = java.security.AccessController.doPrivileged(
+                    new java.security.PrivilegedAction<String>() {
+                @Override
+                public String run() {
+                    String osname = System.getProperty("os.name");
+                    if (osname.startsWith("Windows")) {
+                        return System.getenv("USERDNSDOMAIN");
+                    }
+                    return null;
+                }
+            });
+        }
+        if (realm == null) {
+            KrbException ke = new KrbException("Cannot locate default realm");
+            if (cause != null) {
+                ke.initCause(cause);
+            }
+            throw ke;
         }
         return realm;
     }
@@ -1092,17 +1119,48 @@
     /**
      * Returns a list of KDC's with each KDC separated by a space
      *
-     * @param realm the realm for which the master KDC is desired
-     * @return the list of KDCs
+     * @param realm the realm for which the KDC list is desired
+     * @throws KrbException if there's no way to find KDC for the realm
+     * @return the list of KDCs separated by a space, always non null
      */
     public String getKDCList(String realm) throws KrbException {
         if (realm == null) {
             realm = getDefaultRealm();
         }
+        Exception cause = null;
         String kdcs = getDefault("kdc", realm);
         if ((kdcs == null) && useDNS_KDC()) {
             // use DNS to locate KDC
-            kdcs = getKDCFromDNS(realm);
+            try {
+                kdcs = getKDCFromDNS(realm);
+            } catch (KrbException ke) {
+                cause = ke;
+            }
+        }
+        if (kdcs == null) {
+            kdcs = java.security.AccessController.doPrivileged(
+                    new java.security.PrivilegedAction<String>() {
+                @Override
+                public String run() {
+                    String osname = System.getProperty("os.name");
+                    if (osname.startsWith("Windows")) {
+                        String logonServer = System.getenv("LOGONSERVER");
+                        if (logonServer != null
+                                && logonServer.startsWith("\\\\")) {
+                            logonServer = logonServer.substring(2);
+                        }
+                        return logonServer;
+                    }
+                    return null;
+                }
+            });
+        }
+        if (kdcs == null) {
+            KrbException ke = new KrbException("Cannot locate KDC");
+            if (cause != null) {
+                ke.initCause(cause);
+            }
+            throw ke;
         }
         return kdcs;
     }
@@ -1117,7 +1175,7 @@
         String realm = null;
         String hostName = null;
         try {
-            hostName = InetAddress.getLocalHost().getHostName();
+            hostName = InetAddress.getLocalHost().getCanonicalHostName();
         } catch (UnknownHostException e) {
             KrbException ke = new KrbException(Krb5.KRB_ERR_GENERIC,
                 "Unable to locate Kerberos realm: " + e.getMessage());
--- a/src/share/classes/sun/security/krb5/KrbServiceLocator.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/src/share/classes/sun/security/krb5/KrbServiceLocator.java	Thu Feb 05 09:28:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2006-2009 Sun Microsystems, Inc.  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
@@ -133,7 +133,7 @@
      */
     static String[] getKerberosService(String realmName, String protocol) {
 
-        String dnsUrl = "dns:///_kerberos." + protocol + realmName;
+        String dnsUrl = "dns:///_kerberos." + protocol + "." + realmName;
         String[] hostports = null;
 
         try {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/CookieHandler/B6791927.java	Thu Feb 05 09:28:04 2009 -0800
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 6791927
+ * @summary Wrong Locale in HttpCookie::expiryDate2DeltaSeconds
+ */
+
+import java.net.*;
+import java.util.List;
+import java.util.Locale;
+
+public class B6791927 {
+    public static final void main( String[] aaParamters ) throws Exception{
+        // Forces a non US locale
+        Locale.setDefault(Locale.FRANCE);
+        List<HttpCookie> cookies = HttpCookie.parse("set-cookie: CUSTOMER=WILE_E_COYOTE; expires=Wednesday, 09-Nov-2019 23:12:40 GMT");
+        if (cookies == null || cookies.isEmpty()) {
+            throw new RuntimeException("No cookie found");
+        }
+        for (HttpCookie c : cookies) {
+            if (c.getMaxAge() == 0) {
+                throw new RuntimeException("Expiration date shouldn't be 0");
+            }
+        }
+    }
+}
--- a/test/sun/security/krb5/DnsFallback.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/test/sun/security/krb5/DnsFallback.java	Thu Feb 05 09:28:04 2009 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2008-2009 Sun Microsystems, Inc.  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
@@ -23,7 +23,8 @@
 /*
  * @test
  * @bug 6673164
- * @summary dns_fallback parse error
+ * @bug 6552334
+ * @summary fix dns_fallback parse error, and use dns by default
  */
 
 import sun.security.krb5.*;
@@ -31,6 +32,8 @@
 
 public class DnsFallback {
     public static void main(String[] args) throws Exception {
+
+        // for 6673164
         check("true", "true", true);
         check("false", "true", false);
         check("true", "false", true);
@@ -39,6 +42,9 @@
         check("false", null, false);
         check(null, "true", true);
         check(null, "false", false);
+
+        // for 6552334
+        check(null, null, true);
     }
 
     static void check(String realm, String fallback, boolean output) throws Exception {
--- a/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/B6216082.java	Thu Feb 05 09:24:45 2009 -0800
+++ b/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/B6216082.java	Thu Feb 05 09:28:04 2009 -0800
@@ -136,6 +136,7 @@
                                 server.getLocalPort(), "/");
             HttpURLConnection uc = (HttpURLConnection)url.openConnection();
             System.out.println(uc.getResponseCode());
+            uc.disconnect();
         } catch (IOException e) {
             e.printStackTrace();
         } finally {