/* * Copyright (c) 2005, 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 5100561 * @bug 6273812 * @summary Can not explicitly create a java.security.Policy object from a file * @build GetInstancePolicySpi GetInstanceProvider * @run main/othervm/policy=GetInstance.policy GetInstance */ import java.security.*; import java.io.File; import java.net.URI; import sun.net.www.ParseUtil; public class GetInstance { private static final String JAVA_POLICY = "JavaPolicy"; private static class BadParam implements Policy.Parameters { } public static void main(String[] args) throws Exception { int testnum = 1; GetInstance gi = new GetInstance(); testnum = gi.testDefault(testnum); testnum = gi.testStringProvider(testnum); testnum = gi.testProvider(testnum); testnum = gi.testCustomImpl(testnum); testnum = gi.testBadParam(testnum); // make this go last because we don't want to leave its policy set // for other tests testnum = gi.testURIParam(testnum); } private int testDefault(int testnum) throws Exception { // get an instance of the default PolicySpiFile Policy p = Policy.getInstance(JAVA_POLICY, null); doTest(p, testnum++); Policy.setPolicy(p); doTestSM(testnum++); // get an instance of FooPolicy try { p = Policy.getInstance("FooPolicy", null); throw new SecurityException("test " + testnum++ + " failed"); } catch (NoSuchAlgorithmException nsae) { // good System.out.println("test " + testnum++ + " passed"); } return testnum; } private int testStringProvider(int testnum) throws Exception { // get an instance of JavaPolicy from SUN Policy p = Policy.getInstance(JAVA_POLICY, null, "SUN"); doTest(p, testnum++); Policy.setPolicy(p); doTestSM(testnum++); // get an instance of JavaPolicy from SunRsaSign try { p = Policy.getInstance(JAVA_POLICY, null, "SunRsaSign"); throw new SecurityException("test " + testnum++ + " failed"); } catch (NoSuchAlgorithmException nsae) { // good System.out.println("test " + testnum++ + " passed"); } // get an instance of JavaPolicy from FOO try { p = Policy.getInstance(JAVA_POLICY, null, "FOO"); throw new SecurityException("test " + testnum++ + " failed"); } catch (NoSuchProviderException nspe) { // good System.out.println("test " + testnum++ + " passed"); } return testnum; } private int testProvider(int testnum) throws Exception { // get an instance of JavaPolicy from SUN Policy p = Policy.getInstance(JAVA_POLICY, null, Security.getProvider("SUN")); doTest(p, testnum++); Policy.setPolicy(p); doTestSM(testnum++); // get an instance of JavaPolicy from SunRsaSign try { p = Policy.getInstance(JAVA_POLICY, null, Security.getProvider("SunRsaSign")); throw new SecurityException("test " + testnum++ + " failed"); } catch (NoSuchAlgorithmException nsae) { // good System.out.println("test " + testnum++ + " passed"); } return testnum; } private int testBadParam(int testnum) throws Exception { // pass bad param try { Policy p = Policy.getInstance(JAVA_POLICY, new BadParam()); throw new SecurityException("test " + testnum++ + " failed"); } catch (IllegalArgumentException iae) { // good System.out.println("test " + testnum++ + " passed"); } try { Policy p = Policy.getInstance(JAVA_POLICY, new BadParam(), "SUN"); throw new SecurityException("test " + testnum++ + " failed"); } catch (IllegalArgumentException iae) { // good System.out.println("test " + testnum++ + " passed"); } try { Policy p = Policy.getInstance(JAVA_POLICY, new BadParam(), Security.getProvider("SUN")); throw new SecurityException("test " + testnum++ + " failed"); } catch (IllegalArgumentException iae) { // good System.out.println("test " + testnum++ + " passed"); } return testnum; } private int testURIParam(int testnum) throws Exception { // get an instance of JavaPolicy from SUN and have it read from the URL File file = new File(System.getProperty("test.src", "."), "GetInstance.policyURL"); URI uri = file.toURI(); Policy p = Policy.getInstance(JAVA_POLICY, new URIParameter(uri)); doTest(p, testnum++); Policy.setPolicy(p); doTestSM(testnum++); return testnum; } private int testCustomImpl(int testnum) throws Exception { Provider customProvider = new GetInstanceProvider(); Policy p = Policy.getInstance("GetInstancePolicySpi", null, customProvider); // doTest has a case that will not work with custom policies, // so do not call it // // doTest(p, testnum++); Policy.setPolicy(p); doTestSM(testnum++); return testnum; } private void doTest(Policy p, int testnum) throws Exception { // check granted perm if (p.implies(this.getClass().getProtectionDomain(), new SecurityPermission("GetInstanceTest"))) { System.out.println("test " + testnum + ".1 passed"); } else { throw new SecurityException("test " + testnum + ".1 failed"); } // check perm not granted if (p.implies(this.getClass().getProtectionDomain(), new SecurityPermission("NotGranted"))) { throw new SecurityException("test " + testnum + ".2 failed"); } else { System.out.println("test " + testnum + ".2 passed"); } // test getProvider if ("SUN".equals(p.getProvider().getName())) { System.out.println("test " + testnum + ".3 passed"); } else { throw new SecurityException("test " + testnum + ".3 failed"); } // test getType if (JAVA_POLICY.equals(p.getType())) { System.out.println("test " + testnum + ".4 passed"); } else { throw new SecurityException("test " + testnum + ".4 failed"); } } private void doTestSM(int testnum) throws Exception { // check granted perm System.getSecurityManager().checkPermission (new SecurityPermission("GetInstanceTest")); System.out.println("test " + testnum + ".1 passed"); // check perm not granted try { System.getSecurityManager().checkPermission (new SecurityPermission("NotGranted")); throw new RuntimeException("test " + testnum + ".2 failed"); } catch (SecurityException se) { System.out.println("test " + testnum + ".2 passed"); } } }