Author: jkf
Date: Mon Apr 23 14:49:24 2007
New Revision: 531625

URL: http://svn.apache.org/viewvc?view=rev&rev=531625
Log:
pr 41766 permissions for AllPermission not working correctly.

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/types/Permissions.java

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=531625&r1=531624&r2=531625
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Mon Apr 23 14:49:24 2007
@@ -6,6 +6,10 @@
 
 Fixed bugs:
 -----------
+* Error in handling of some permissions, most notably the AllPermission on
+  jdk 1.5
+  Bugzilla report 41776
+
 * Replace task summary output incorrect.
   Bugzilla report 41544
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/Permissions.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/Permissions.java?view=diff&rev=531625&r1=531624&r2=531625
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/Permissions.java 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/Permissions.java Mon Apr 
23 14:49:24 2007
@@ -18,6 +18,7 @@
 
 package org.apache.tools.ant.types;
 
+import java.lang.reflect.Constructor;
 import java.security.UnresolvedPermission;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -50,6 +51,9 @@
     private SecurityManager origSm = null;
     private boolean active = false;
     private boolean delegateToOldSM;
+    
+    // Mandatory constructor for permission object.
+    private static final Class[] PARAMS = { String.class, String.class};
 
     /**
      * Create a set of Permissions.  Equivalent to calling
@@ -113,10 +117,10 @@
         for (Iterator i = grantedPermissions.listIterator(); i.hasNext();) {
             Permissions.Permission p = (Permissions.Permission) i.next();
             if (p.getClassName() == null) {
-                throw new BuildException("Granted permission " + p + " does 
not contain a class.");
+                throw new BuildException("Granted permission " + p
+                        + " does not contain a class.");
             } else {
-                java.security.Permission perm =
-                    new UnresolvedPermission(p.getClassName(), p.getName(), 
p.getActions(), null);
+                java.security.Permission perm = createPermission(p);
                 granted.add(perm);
             }
         }
@@ -142,6 +146,24 @@
         granted.add(new java.util.PropertyPermission("java.vm.version", 
"read"));
         granted.add(new java.util.PropertyPermission("java.vm.vendor", 
"read"));
         granted.add(new java.util.PropertyPermission("java.vm.name", "read"));
+    }
+
+    private java.security.Permission createPermission(
+            Permissions.Permission permission) {
+        try {
+            // First add explicitly already resolved permissions will not be
+            // resolved when added as unresolved permission.
+            Class clazz = Class.forName(permission.getClassName());
+            String name = permission.getName();
+            String actions = permission.getActions();
+            Constructor ctr = clazz.getConstructor(PARAMS);
+            return (java.security.Permission) ctr.newInstance(new Object[] {
+                    name, actions });
+        } catch (Exception e) {
+            // Let the UnresolvedPermission handle it.
+            return new UnresolvedPermission(permission.getClassName(),
+                    permission.getName(), permission.getActions(), null);
+        }
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to