FYI: Test if Policy.implies(Permission) is called for domains with AllPermission
Dr Andrew John Hughes
ahughes@redhat.com
Sat Dec 25 01:15:00 GMT 2010
I found the following issue when trying to work out why OpenJDK
would only pass some permission checks to the Policy object and Classpath
VMs would pass them all, causing tests using gnu.testlet.TestSecurityManager
to fail.
It turns out OpenJDK doesn't bother to check the policy if the domain already
has AllPermission (as it obviously already has permission regardless of what
the policy says). This adds a Mauve test to check for this behaviour. I'm
also committing a patch to Classpath to implement this behaviour.
2010-12-24 Andrew John Hughes <ahughes@redhat.com>
* gnu/testlet/java/security/ProtectionDomain/Implies.java:
Check if Policy.implies(Permission) is called if the
protection domain is already known to have AllPermission.
--
Andrew :)
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
Support Free Java!
Contribute to GNU Classpath and IcedTea
http://www.gnu.org/software/classpath
http://icedtea.classpath.org
PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint = F8EF F1EA 401E 2E60 15FA 7927 142C 2591 94EF D9D8
-------------- next part --------------
Index: gnu/testlet/java/security/ProtectionDomain/Implies.java
===================================================================
RCS file: gnu/testlet/java/security/ProtectionDomain/Implies.java
diff -N gnu/testlet/java/security/ProtectionDomain/Implies.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/security/ProtectionDomain/Implies.java 25 Dec 2010 01:08:41 -0000
@@ -0,0 +1,73 @@
+// Copyright (C) 2010 Red Hat, Inc.
+// Written by Andrew John Hughes <ahughes@redhat.com>
+
+// This file is part of Mauve.
+
+// Mauve is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// Mauve is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Mauve; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+// Tags: JDK1.4
+
+package gnu.testlet.java.security.ProtectionDomain;
+
+import gnu.testlet.Testlet;
+import gnu.testlet.TestHarness;
+
+import java.security.AllPermission;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.Permissions;
+import java.security.PermissionCollection;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.security.SecurityPermission;
+
+/**
+ * Tests whether Policy.implies(Permission) is called
+ * when the domain has AllPermission as one of its permissions.
+ */
+public class Implies implements Testlet
+{
+
+ private boolean called = false;
+
+ public void test(TestHarness harness)
+ {
+ Policy.setPolicy(new Policy()
+ {
+ public boolean implies(ProtectionDomain domain,
+ Permission perm)
+ {
+ if (perm.getName().equals("TestPermission"))
+ called = true;
+ return true;
+ }
+ public void refresh() {}
+ public PermissionCollection getPermissions(CodeSource codesource)
+ {
+ return null;
+ }
+ });
+
+ System.setSecurityManager(new SecurityManager());
+ PermissionCollection coll = new Permissions();
+ coll.add(new AllPermission());
+ ProtectionDomain pd = new ProtectionDomain(null, coll,
+ Implies.class.getClassLoader(), null);
+ pd.implies(new SecurityPermission("TestPermission"));
+ harness.check(!called, "Policy was not checked due to AllPermission");
+ }
+
+}
More information about the Mauve-patches
mailing list