From 82545c7118c44bf2ba40c7d78bfd1db52b2bb459 Mon Sep 17 00:00:00 2001 From: Jacobus Martinus Kruithof Date: Mon, 23 Apr 2007 21:49:24 +0000 Subject: [PATCH] pr 41766 permissions for AllPermission not working correctly. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@531625 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 4 +++ .../apache/tools/ant/types/Permissions.java | 28 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 804a28df7..db4ccdd49 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -6,6 +6,10 @@ Changes that could break older environments: 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 diff --git a/src/main/org/apache/tools/ant/types/Permissions.java b/src/main/org/apache/tools/ant/types/Permissions.java index 5a8685167..db94a08c9 100644 --- a/src/main/org/apache/tools/ant/types/Permissions.java +++ b/src/main/org/apache/tools/ant/types/Permissions.java @@ -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 @@ public class Permissions { 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 @@ public class Permissions { 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); } } @@ -144,6 +148,24 @@ public class Permissions { 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 be used by tasks that just finished executing the parts subject to these permissions. */