Merge jdk7u51-b04 into jdk7u51-b05
diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index f37ca9e..f2541ce 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -382,3 +382,4 @@
 c5822e1d1baa9625ee4e54b8e83a9bf529c883fc jdk7u51-b01
 f750621fb31b8f6462b803b47bbf84f05cd5174a jdk7u51-b02
 dafd6c301c979ece6493dfb52e09e46bc81b7285 jdk7u51-b03
+8bc2f477bba4ccecaf46a52877e429342ab9c5bc jdk7u51-b04
diff --git a/corba/.hgtags b/corba/.hgtags
index bbba7ab..6e4aaad 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -385,3 +385,4 @@
 8d884cf2e8cce92d532950de2c7283d9804f9e58 jdk7u51-b01
 327035fbb0433927c1b1af2bc0bcb84e7827f1b9 jdk7u51-b02
 3c186a6d2b86ec4c6cfb093969d5f4e4a6ef6a98 jdk7u51-b03
+6969598640b2a4731634669eb1402a6af5772b44 jdk7u51-b04
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index 4fa0ee1..b4b859b 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -594,3 +594,4 @@
 68f03ff066f2341b89b52a6d6e21ae09de008351 jdk7u51-b01
 67910a581eca113847c5320c49436a9816c5d5c6 jdk7u51-b02
 4138fb11955a528e5ee5448d9c6c8e88e0e268b2 jdk7u51-b03
+683458c333ced92d515daa1b9bcdb5be679e535a jdk7u51-b04
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index 1dbc6ef..c2c8035 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -385,3 +385,4 @@
 2450ace952f45202e5a3fd4f6a8356a196fe029e jdk7u51-b01
 68def851cc6b17944756f1986734b323d8569571 jdk7u51-b02
 0df316a3b3111427500a86f3282293dd566ae936 jdk7u51-b03
+42be8e6266ab1733a890b21cf6cd6c2e1a48972d jdk7u51-b04
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index 39ad0c3..7910705 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -385,3 +385,4 @@
 db9e3328f393313e52cbf3fee5236aa2429028d0 jdk7u51-b01
 92a4787cb3617005a329fb49247c550e8d7eb47a jdk7u51-b02
 2240523feb968d7921e22f6730c299246a4125d0 jdk7u51-b03
+c4f7cc35e47a4db7f380d62127dd2b49713f5552 jdk7u51-b04
diff --git a/jdk/.hgtags b/jdk/.hgtags
index cfc11f9..6a26cdd 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -369,3 +369,4 @@
 d76613074ff357d0664b97b4aaf99fbb65dcec47 jdk7u51-b01
 fb057871f094ebe4906ad6856326768b01a62c45 jdk7u51-b02
 6b3c195c73b051ee3c4a0ac44f050011414ab08b jdk7u51-b03
+96431826ae3a927008c56aeefa1397a33bda3e70 jdk7u51-b04
diff --git a/jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java b/jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java
index 738048b..8d2ca21 100644
--- a/jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java
+++ b/jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java
@@ -81,7 +81,6 @@
             try {
                 if (answer == null) {   // reload class if weak ref cleared
                     Class<?> cls = Class.forName(className, true, loader);
-                    VersionHelper12.checkPackageAccess(cls);
                     answer = cls;
                 }
                 // Instantiate Class to get factory
diff --git a/jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java b/jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java
index 22a63ce..a3a8a21 100644
--- a/jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java
+++ b/jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java
@@ -39,7 +39,6 @@
 import java.util.Properties;
 
 import javax.naming.*;
-import sun.reflect.misc.ReflectUtil;
 
 /**
  * VersionHelper was used by JNDI to accommodate differences between
@@ -54,18 +53,6 @@
 
 final class VersionHelper12 extends VersionHelper {
 
-    // workaround to disable additional package access control with
-    // Thread Context Class Loader (TCCL).
-    private final static boolean noPackageAccessWithTCCL = "true".equals(
-        AccessController.doPrivileged(
-            new PrivilegedAction<String>() {
-                public String run() {
-                    return System.getProperty(
-                        "com.sun.naming.untieAccessContextWithTCCL");
-                }
-            }
-        ));
-
     // Disallow external from creating one of these.
     VersionHelper12() {
     }
@@ -83,7 +70,6 @@
     Class loadClass(String className, ClassLoader cl)
         throws ClassNotFoundException {
         Class<?> cls = Class.forName(className, true, cl);
-        checkPackageAccess(cls);
         return cls;
     }
 
@@ -101,39 +87,6 @@
         return loadClass(className, cl);
     }
 
-    /**
-     * check package access of a class that is loaded with Thread Context
-     * Class Loader (TCCL).
-     *
-     * Similar to java.lang.ClassLoader.checkPackageAccess()
-     */
-    static void checkPackageAccess(Class<?> cls) {
-        if (noPackageAccessWithTCCL) {
-            return;
-        }
-
-        final SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            if (ReflectUtil.isNonPublicProxyClass(cls)) {
-                for (Class<?> intf: cls.getInterfaces()) {
-                    checkPackageAccess(intf);
-                }
-                return;
-            }
-
-            final String name = cls.getName();
-            final int i = name.lastIndexOf('.');
-            if (i != -1) {
-                AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                    public Void run() {
-                        sm.checkPackageAccess(name.substring(0, i));
-                        return null;
-                    }
-                }, AccessController.getContext());
-            }
-        }
-    }
-
     String getJndiProperty(final int i) {
         return (String) AccessController.doPrivileged(
             new PrivilegedAction() {
@@ -223,17 +176,23 @@
     /**
      * Package private.
      *
-     * This internal method makes use of Thread Context Class Loader (TCCL),
-     * please don't expose this method as public.
+     * This internal method returns Thread Context Class Loader (TCCL),
+     * if null, returns the system Class Loader.
      *
-     * Please take care of package access control on the current context
-     * whenever using TCCL.
+     * Please don't expose this method as public.
      */
     ClassLoader getContextClassLoader() {
         return (ClassLoader) AccessController.doPrivileged(
             new PrivilegedAction() {
                 public Object run() {
-                    return Thread.currentThread().getContextClassLoader();
+                    ClassLoader loader =
+                            Thread.currentThread().getContextClassLoader();
+                    if (loader == null) {
+                        // Don't use bootstrap class loader directly!
+                        loader = ClassLoader.getSystemClassLoader();
+                    }
+
+                    return loader;
                 }
             }
         );
diff --git a/jdk/src/share/classes/javax/security/auth/login/LoginContext.java b/jdk/src/share/classes/javax/security/auth/login/LoginContext.java
index e649a41..6c1b2b8 100644
--- a/jdk/src/share/classes/javax/security/auth/login/LoginContext.java
+++ b/jdk/src/share/classes/javax/security/auth/login/LoginContext.java
@@ -37,10 +37,8 @@
 import javax.security.auth.callback.*;
 import java.security.AccessController;
 import java.security.AccessControlContext;
-import java.security.PrivilegedAction;
 import sun.security.util.PendingException;
 import sun.security.util.ResourcesMgr;
-import sun.reflect.misc.ReflectUtil;
 
 /**
  * <p> The <code>LoginContext</code> class describes the basic methods used
@@ -235,19 +233,6 @@
     private static final sun.security.util.Debug debug =
         sun.security.util.Debug.getInstance("logincontext", "\t[LoginContext]");
 
-    // workaround to disable additional package access control with
-    // Thread Context Class Loader (TCCL).
-    private static final boolean noPackageAccessWithTCCL = "true".equals(
-        AccessController.doPrivileged(
-            new PrivilegedAction<String>() {
-                public String run() {
-                    return System.getProperty(
-                        "auth.login.untieAccessContextWithTCCL");
-                }
-            }
-        ));
-
-
     private void init(String name) throws LoginException {
 
         SecurityManager sm = System.getSecurityManager();
@@ -301,7 +286,15 @@
         contextClassLoader = java.security.AccessController.doPrivileged
                 (new java.security.PrivilegedAction<ClassLoader>() {
                 public ClassLoader run() {
-                    return Thread.currentThread().getContextClassLoader();
+                    ClassLoader loader =
+                            Thread.currentThread().getContextClassLoader();
+                    if (loader == null) {
+                        // Don't use bootstrap class loader directly to ensure
+                        // proper package access control!
+                        loader = ClassLoader.getSystemClassLoader();
+                    }
+
+                    return loader;
                 }
         });
     }
@@ -721,17 +714,11 @@
                     // instantiate the LoginModule
                     //
                     // Allow any object to be a LoginModule as long as it
-                    // conforms to the interface if no customized config or
-                    // noPackageAccessWithTCCL is true.
+                    // conforms to the interface.
                     Class<?> c = Class.forName(
                                 moduleStack[i].entry.getLoginModuleName(),
                                 true,
                                 contextClassLoader);
-                    // check package access for customized config
-                    if (!noPackageAccessWithTCCL && creatorAcc != null) {
-                        c.asSubclass(javax.security.auth.spi.LoginModule.class);
-                        checkPackageAccess(c, creatorAcc);
-                    }
 
                     Constructor constructor = c.getConstructor(PARAMS);
                     Object[] args = { };
@@ -935,35 +922,6 @@
     }
 
     /**
-     * check package access of a class that is loaded with Thread Context
-     * Class Loader (TCCL) with specified access control context.
-     *
-     * Similar to java.lang.ClassLoader.checkPackageAccess()
-     */
-    static void checkPackageAccess(Class<?> cls, AccessControlContext context) {
-        final SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            if (ReflectUtil.isNonPublicProxyClass(cls)) {
-                for (Class<?> intf: cls.getInterfaces()) {
-                    checkPackageAccess(intf, context);
-                }
-                return;
-            }
-
-            final String name = cls.getName();
-            final int i = name.lastIndexOf('.');
-            if (i != -1) {
-                AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                    public Void run() {
-                        sm.checkPackageAccess(name.substring(0, i));
-                        return null;
-                    }
-                }, context);
-            }
-        }
-    }
-
-    /**
      * Wrap the caller-specified CallbackHandler in our own
      * and invoke it within a privileged block, constrained by
      * the caller's AccessControlContext.
diff --git a/langtools/.hgtags b/langtools/.hgtags
index 71ea015..0446163 100644
--- a/langtools/.hgtags
+++ b/langtools/.hgtags
@@ -385,3 +385,4 @@
 14d1cf2630aea549cfba9d052200c7ebcabd875c jdk7u51-b01
 f0168ccf171ed6080267fe0a7f7aed0b46bd5713 jdk7u51-b02
 33f986894a3e42686a3a9713efc075a6876dbeb7 jdk7u51-b03
+9a4b7362a592b157cd2b1c2ce15f1bb97d2792f6 jdk7u51-b04