# This patch file was generated by NetBeans IDE
# This patch can be applied using context Tools: Apply Diff Patch action on respective folder.
# It uses platform neutral UTF-8 encoding.
# Above lines and this line are ignored by the patching process.
Index: mauve/gnu/testlet/TestSecurityManager.java
--- mauve/gnu/testlet/TestSecurityManager.java Base (1.4)
+++ mauve/gnu/testlet/TestSecurityManager.java Locally Modified (Based On 1.4)
@@ -22,7 +22,12 @@
package gnu.testlet;
+import java.security.CodeSource;
import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.PropertyPermission;
/**
* A security manager for testing that security checks are performed.
@@ -54,6 +59,11 @@
private SecurityManager oldManager;
/**
+ * The policy in force before we were installed
+ */
+ private Policy oldPolicy;
+
+ /**
* Permissions that must be checked for this test to pass.
*/
private Permission[] mustCheck;
@@ -134,6 +144,97 @@
oldManager = oldsm;
enabled = false;
+
+ oldPolicy = Policy.getPolicy();
+ Policy.setPolicy(new Policy()
+ {
+ public PermissionCollection getPermissions(CodeSource codesource)
+ {
+ return null;
+ }
+ /**
+ * Check that this permission is one that we should be checking.
+ * This code used to be in TestSecurityManager.checkPermission,
+ * but doing the same here allows us to easily skip doPrivileged
+ * actions like reading some properties in system code.
+ *
+ * @param perm the permission to be checked
+ * @throws SuccessException if all mustCheck
+ * permissions have been checked and isHalting
+ * is true.
+ * @return returns false if and only if none of the mustCheck
+ * or mayCheck
permissions matches
+ * perm
. else true
+ */
+ public boolean implies(ProtectionDomain domain,
+ Permission perm)
+ {
+ if (!enabled)
+ return true;
+
+ if (harness != null)
+ harness.debug("checkPermission(" + perm + ")");
+
+ boolean matched = false;
+
+ if (!matched) {
+ for (int i = 0; i < mustCheck.length; i++) {
+ if (permissionsMatch(mustCheck[i], perm)) {
+ checked[i] = true;
+ matched = true;
+ }
+ }
+ }
+
+ if (!matched) {
+ for (int i = 0; i < mayCheck.length; i++) {
+ if (permissionsMatch(mayCheck[i], perm)) {
+ matched = true;
+ }
+ }
+ }
+
+ if (!matched) {
+ enabled = false;
+
+ harness.debug("unexpected check: " + perm);
+
+ if (mustCheck.length != 0) {
+ StringBuffer expected = new StringBuffer();
+ for (int i = 0; i < mustCheck.length; i++)
+ expected.append(' ').append(mustCheck[i]);
+ harness.debug("expected: mustCheck:" + expected.toString());
+ }
+
+ if (mayCheck.length != 0) {
+ StringBuffer expected = new StringBuffer();
+ for (int i = 0; i < mayCheck.length; i++)
+ expected.append(' ').append(mayCheck[i]);
+ harness.debug("expected: mayCheck:" + expected.toString());
+ }
+
+ return false;
+ }
+
+ if (isHalting) {
+ boolean allChecked = true;
+ for (int i = 0; i < checked.length; i++) {
+ if (!checked[i])
+ allChecked = false;
+ }
+ if (allChecked) {
+ enabled = false;
+ throw successException;
+ }
+ }
+ return true;
+ }
+ public void refresh()
+ {
+ return;
+ }
+ });
+
System.setSecurityManager(this);
}
@@ -149,6 +250,7 @@
enabled = false;
System.setSecurityManager(oldManager);
+ Policy.setPolicy(oldPolicy);
}
/**
@@ -264,73 +366,6 @@
}
/**
- * Check that this permission is one that we should be checking.
- *
- * @param perm the permission to be checked
- * @throws SuccessException if all mustCheck
- * permissions have been checked and isHalting
- * is true.
- * @throws SecurityException if none of the mustCheck
- * or mayCheck
permissions matches
- * perm
.
- */
- public void checkPermission(Permission perm) throws SecurityException
- {
- if (!enabled)
- return;
-
- if (harness != null)
- harness.debug("checkPermission(" + perm + ")");
-
- boolean matched = false;
- for (int i = 0; i < mustCheck.length; i++) {
- if (permissionsMatch(mustCheck[i], perm))
- matched = checked[i] = true;
- }
-
- if (!matched) {
- for (int i = 0; i < mayCheck.length; i++) {
- if (permissionsMatch(mayCheck[i], perm))
- matched = true;
- }
- }
-
- if (!matched) {
- enabled = false;
-
- harness.debug("unexpected check: " + perm);
-
- if (mustCheck.length != 0) {
- StringBuffer expected = new StringBuffer();
- for (int i = 0; i < mustCheck.length; i++)
- expected.append(' ').append(mustCheck[i]);
- harness.debug("expected: mustCheck:" + expected.toString());
- }
-
- if (mayCheck.length != 0) {
- StringBuffer expected = new StringBuffer();
- for (int i = 0; i < mayCheck.length; i++)
- expected.append(' ').append(mayCheck[i]);
- harness.debug("expected: mayCheck:" + expected.toString());
- }
-
- throw new SecurityException("unexpected check: " + perm);
- }
-
- if (isHalting) {
- boolean allChecked = true;
- for (int i = 0; i < checked.length; i++) {
- if (!checked[i])
- allChecked = false;
- }
- if (allChecked) {
- enabled = false;
- throw successException;
- }
- }
- }
-
- /**
* Check that all mustCheck
permissions were checked,
* calling TestHarness.check()
with the result.
*/