blob: 7167bbb96c8311d06a2bfc9437396b35bdcf1338 [file] [log] [blame]
joehw08a68c42012-04-17 11:21:35 -07001/*
coffeys55ddfb12013-06-06 14:10:44 +01002 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
joehw08a68c42012-04-17 11:21:35 -07003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
coffeys52be22a2013-07-09 16:00:41 +010025 * @test
26 * @bug 6741606 7146431 8000450
27 * @summary Make sure all restricted packages listed in the package.access
28 * property in the java.security file are blocked
29 * @run main/othervm CheckPackageAccess
joehw08a68c42012-04-17 11:21:35 -070030 */
31
coffeys52be22a2013-07-09 16:00:41 +010032import java.security.Security;
33import java.util.Collections;
34import java.util.Arrays;
35import java.util.ArrayList;
36import java.util.List;
37import java.util.StringTokenizer;
38
39/*
40 * The main benefit of this test is to catch merge errors or other types
41 * of issues where one or more of the packages are accidentally
42 * removed. This is why the packages that are known to be restricted have to
43 * be explicitly listed below.
44 */
joehw08a68c42012-04-17 11:21:35 -070045public class CheckPackageAccess {
46
coffeys52be22a2013-07-09 16:00:41 +010047 /*
48 * This array should be updated whenever new packages are added to the
49 * package.access property in the java.security file
50 */
51 private static final String[] packages = {
52 "sun.",
coffeys52be22a2013-07-09 16:00:41 +010053 "com.sun.xml.internal.",
54 "com.sun.imageio.",
55 "com.sun.istack.internal.",
56 "com.sun.jmx.",
57 "com.sun.proxy.",
58 "com.sun.org.apache.bcel.internal.",
59 "com.sun.org.apache.regexp.internal.",
60 "com.sun.org.apache.xerces.internal.",
61 "com.sun.org.apache.xpath.internal.",
62 "com.sun.org.apache.xalan.internal.extensions.",
63 "com.sun.org.apache.xalan.internal.lib.",
64 "com.sun.org.apache.xalan.internal.res.",
65 "com.sun.org.apache.xalan.internal.templates.",
66 "com.sun.org.apache.xalan.internal.utils.",
67 "com.sun.org.apache.xalan.internal.xslt.",
68 "com.sun.org.apache.xalan.internal.xsltc.cmdline.",
69 "com.sun.org.apache.xalan.internal.xsltc.compiler.",
70 "com.sun.org.apache.xalan.internal.xsltc.trax.",
71 "com.sun.org.apache.xalan.internal.xsltc.util.",
72 "com.sun.org.apache.xml.internal.res.",
73 "com.sun.org.apache.xml.internal.security.",
74 "com.sun.org.apache.xml.internal.serializer.utils.",
75 "com.sun.org.apache.xml.internal.utils.",
76 "com.sun.org.glassfish.",
77 "com.oracle.xmlns.internal.",
78 "com.oracle.webservices.internal.",
79 "oracle.jrockit.jfr.",
80 "org.jcp.xml.dsig.internal.",
81 "jdk.internal.",
82 "jdk.nashorn.internal.",
83 "jdk.nashorn.tools."
84 };
joehw08a68c42012-04-17 11:21:35 -070085
coffeys52be22a2013-07-09 16:00:41 +010086 public static void main(String[] args) throws Exception {
87 List<String> pkgs = new ArrayList<>(Arrays.asList(packages));
88 String osName = System.getProperty("os.name");
89 if (osName.contains("OS X")) {
90 pkgs.add("apple."); // add apple package for OS X
91 } else if (osName.startsWith("Windows")) {
92 pkgs.add("com.sun.java.accessibility.");
93 }
94
95 List<String> jspkgs =
96 getPackages(Security.getProperty("package.access"));
97
98 // Sort to ensure lists are comparable
99 Collections.sort(pkgs);
100 Collections.sort(jspkgs);
101
102 if (!pkgs.equals(jspkgs)) {
103 for (String p : pkgs)
104 if (!jspkgs.contains(p))
105 System.out.println("In golden set, but not in j.s file: " + p);
106 for (String p : jspkgs)
107 if (!pkgs.contains(p))
108 System.out.println("In j.s file, but not in golden set: " + p);
109
110
111 throw new RuntimeException("restricted packages are not " +
112 "consistent with java.security file");
113 }
114 System.setSecurityManager(new SecurityManager());
115 SecurityManager sm = System.getSecurityManager();
116 for (String pkg : packages) {
117 String subpkg = pkg + "foo";
joehw08a68c42012-04-17 11:21:35 -0700118 try {
119 sm.checkPackageAccess(pkg);
coffeys52be22a2013-07-09 16:00:41 +0100120 throw new RuntimeException("Able to access " + pkg +
121 " package");
122 } catch (SecurityException se) { }
123 try {
124 sm.checkPackageAccess(subpkg);
125 throw new RuntimeException("Able to access " + subpkg +
126 " package");
coffeys55ddfb12013-06-06 14:10:44 +0100127 } catch (SecurityException se) { }
128 try {
129 sm.checkPackageDefinition(pkg);
coffeys52be22a2013-07-09 16:00:41 +0100130 throw new RuntimeException("Able to define class in " + pkg +
131 " package");
132 } catch (SecurityException se) { }
133 try {
134 sm.checkPackageDefinition(subpkg);
135 throw new RuntimeException("Able to define class in " + subpkg +
136 " package");
joehw08a68c42012-04-17 11:21:35 -0700137 } catch (SecurityException se) { }
138 }
coffeys52be22a2013-07-09 16:00:41 +0100139 System.out.println("Test passed");
140 }
141
142 private static List<String> getPackages(String p) {
143 List<String> packages = new ArrayList<>();
144 if (p != null && !p.equals("")) {
145 StringTokenizer tok = new StringTokenizer(p, ",");
146 while (tok.hasMoreElements()) {
147 String s = tok.nextToken().trim();
148 packages.add(s);
149 }
150 }
151 return packages;
joehw08a68c42012-04-17 11:21:35 -0700152 }
153}