Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4256530

accessClassInPackage permission does not get overidden in a privileged block.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P1 P1
    • 1.2.2_001
    • 1.2.2
    • security-libs
    • None
    • b01
    • unknown
    • solaris_2.6

        Hi,

        This code works with JDK1.2 and JDK1.2.1 and fails with the following stack trace when run with JDK1.2.2.

        import java.security.*;

        public class Test {

            public static void main(String[] args)
            {
                System.setSecurityManager(new java.rmi.RMISecurityManager());

                // javac
                sun.tools.javac.Main compiler;

        System.err.println("\nCreating javac");
                try {
                    compiler = (sun.tools.javac.Main)AccessController.doPrivileged(
                        new PrivilegedExceptionAction() {
                            public java.lang.Object run()
                                throws Exception
                            {
                                return new sun.tools.javac.Main(System.err, "javac");
                            }
                        }
                    );
                }
                catch ( PrivilegedActionException ex ) {
        System.err.println("Got PrivilegedActionException");
                    ex.getException().printStackTrace();
                    System.err.println("Compilation failed...");
                }
                catch ( Throwable ex ) {
        System.err.println("Got Throwable");
                    ex.printStackTrace();
                    System.err.println("Compilation failed...");
                }
            }
        }


        ** This stack trace is got when Test is run with default permissions.
         
        raga> /usr/local/java/jdk1.2.2/solaris/bin/java -classpath /usr/local/java/jdk1.2.2/solaris/lib/tools.jar:. Test

        Creating javac
        Got Throwable
        java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.tools.javac )
                at java.security.AccessControlContext.checkPermission(AccessControlContext.java, Compiled Code)
                at java.security.AccessController.checkPermission(AccessController.java, Compiled Code)
                at java.lang.SecurityManager.checkPermission(SecurityManager.java, Compiled Code)
                at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java, Compiled Code)
                at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java, Compiled Code)
                at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled Code)
                at Test$1.run(Test.java, Compiled Code)
                at java.security.AccessController.doPrivileged(Native Method)
                at Test.main(Test.java, Compiled Code)
        Compilation failed...

        ** This stack trace is got when Test is run with a policy file with
        AllPermissions to the Test code. Why does it throw this exception even
        when the code is in a privileged block?

        raga> /usr/local/java/jdk1.2.2/solaris/bin/java -classpath /usr/local/java/jdk1.2.2/solaris/lib/tools.jar:. -Djava.security.policy=/space/local2/ejbws/j2ee/build/unix/lib/security/java.policy -Dcom.sun.enterprise.home=/space/local2/ejbws/j2ee/build/unix Test

        Creating javac
        Got Throwable
        java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.tools.java )
                at java.security.AccessControlContext.checkPermission(AccessControlContext.java, Compiled Code)
                at java.security.AccessController.checkPermission(AccessController.java, Compiled Code)
                at java.lang.SecurityManager.checkPermission(SecurityManager.java, Compiled Code)
                at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java, Compiled Code)
                at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java, Compiled Code)
                at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled Code)
                at java.lang.ClassLoader.defineClass0(Native Method)
                at java.lang.ClassLoader.defineClass(ClassLoader.java, Compiled Code)
                at java.security.SecureClassLoader.defineClass(SecureClassLoader.java, Compiled Code)
                at java.net.URLClassLoader.defineClass(URLClassLoader.java, Compiled Code)
                at java.net.URLClassLoader.access$1(URLClassLoader.java, Compiled Code)
                at java.net.URLClassLoader$1.run(URLClassLoader.java, Compiled Code)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.net.URLClassLoader.findClass(URLClassLoader.java, Compiled Code)
                at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled Code)
                at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java, Compiled Code)
                at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled Code)
                at Test$1.run(Test.java, Compiled Code)
                at java.security.AccessController.doPrivileged(Native Method)
                at Test.main(Test.java, Compiled Code)
        Compilation failed...


        Removing RMISecurityManager() is not an option because it is needed for RMI
        Stubs downloading. Setting the bootclasspath is not an option either.

        Please take a look at the above stack trace and suggest a solution or
        workaround.

        Java 2 Enterprise Edition is broken on JDK1.2.2 right now.


        Thanx


        Harish

              gellisonsunw Gary Ellison (Inactive)
              duke J. Duke
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: