< prev index next >
test/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java
Print this page
@@ -21,10 +21,11 @@
* questions.
*/
package jaxp.library;
+import java.net.URL;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.Policy;
@@ -32,10 +33,11 @@
import java.security.SecurityPermission;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.PropertyPermission;
+import java.util.Set;
import java.util.StringJoiner;
/*
* This is a base class that every test class must extend if it needs to be run
@@ -105,16 +107,11 @@
private void setDefaultPermissions() {
//Permissions to set security manager and policy
addPermission(new SecurityPermission("getPolicy"));
addPermission(new SecurityPermission("setPolicy"));
addPermission(new RuntimePermission("setSecurityManager"));
- //Properties that jtreg and TestNG require
- addPermission(new PropertyPermission("testng.show.stack.frames", "read"));
addPermission(new PropertyPermission("test.src", "read"));
- addPermission(new PropertyPermission("test.classes", "read"));
- addPermission(new PropertyPermission("dataproviderthreadcount", "read"));
- addPermission(new PropertyPermission("experimental", "read"));
}
/*
* Add permission to the TestPolicy.
*
@@ -161,10 +158,12 @@
/*
* Simple Policy class that supports the required Permissions to validate the
* JAXP concrete classes.
*/
class TestPolicy extends Policy {
+ private final static Set<String> TEST_JARS =
+ Set.of("jtreg.jar", "javatest.jar", "testng.jar");
private final PermissionCollection permissions = new Permissions();
private ThreadLocal<Map<Integer, Permission>> transientPermissions = new ThreadLocal<>();
private ThreadLocal<Boolean> allowAll = new ThreadLocal<>();
@@ -209,24 +208,41 @@
@Override
public PermissionCollection getPermissions(CodeSource codesource) {
return permissions;
}
+
+ private boolean isTestMachineryDomain(ProtectionDomain domain) {
+ CodeSource cs = (domain == null) ? null : domain.getCodeSource();
+ URL loc = (cs == null) ? null : cs.getLocation();
+ String path = (loc == null) ? null : loc.getPath();
+ return path != null && TEST_JARS.stream()
+ .filter(path::endsWith)
+ .findAny()
+ .isPresent();
+ }
+
@Override
public boolean implies(ProtectionDomain domain, Permission perm) {
if (allowAll())
return true;
if (defaultPolicy.implies(domain, perm))
return true;
if (permissions.implies(perm))
return true;
- else
+
+ if (isTestMachineryDomain(domain))
+ return true;
+
return tmpImplies(perm);
}
+
+
+
/*
* Add a temporary permission in current thread context. This won't impact
* global policy and doesn't support permission combination.
*
* @param permission to add.
< prev index next >