< 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 >