/* * Copyright (c) 2018, 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 8046171 * @summary Test that security checks occur for getNestHost/getNestMembers * * @library /test/lib * @build TestSecurityManagerChecks testPkg.Host testPkg.Singleton * @run driver ClassFileInstaller testPkg.Host testPkg.Host$Member testPkg.Singleton * @run main/othervm -Xbootclasspath/a:. TestSecurityManagerChecks */ // ClassFileInstaller copies the testPkg files into the "current" directory // so we can add it to the bootclasspath. Then when we run the test the // loader for the testPkg files is the bootloader but the loader for the // test class is the system loader, hence a package access check will fail // because the system loader is not the same as, nor a parent of, the bootloader. import java.security.Security; public class TestSecurityManagerChecks { public static void main(String[] args) throws Throwable { // First get hold of the target classes before we enable security Class host = testPkg.Host.class; Class member = testPkg.Host.Member.class; Class memberArray = testPkg.Host.Member[].class; Class singleton = testPkg.Singleton.class; // Next add testPkg to the set of packages for which package-access // permission is required Security.setProperty("package.access", Security.getProperty("package.access") + ",testPkg."); // Finally install a default security manager SecurityManager sm = new SecurityManager(); System.setSecurityManager(sm); // These cases all succeed getNestHost(int.class); // primitive getNestHost(int[].class); // primitive[] getNestHost(host); // host class getNestHost(memberArray); // NestedT[] getNestHost(singleton); // Singleton nest getNestMembers(int.class); // primitive getNestMembers(int[].class); // primitive[] getNestMembers(memberArray); // NestedT[] getNestMembers(singleton); // Singleton nest // these cases all fail getNestHostThrows(member); // NestedT getNestMembersThrows(member); // NestedT getNestMembersThrows(host); // host class } static void getNestHost(Class c) { Class host = c.getNestHost(); System.out.println("OK - getNestHost succeeded for " + c.getName()); } static void getNestHostThrows(Class c) throws SecurityException { try { Class host = c.getNestHost(); throw new Error("getNestHost succeeded for " + c.getName()); } catch (SecurityException e) { System.out.println("OK - getNestHost for " + c.getName() + " got expected exception: " + e); } } static void getNestMembers(Class c) { Class[] members = c.getNestMembers(); System.out.println("OK - getNestMembers succeeded for " + c.getName()); } static void getNestMembersThrows(Class c) throws SecurityException { try { Class[] members = c.getNestMembers(); throw new Error("getNestMembers succeeded for " + c.getName()); } catch (SecurityException e) { System.out.println("OK - getNestMembers for " + c.getName() + " got expected exception: " + e); } } }