--- a/jdk/test/javax/crypto/CryptoPermissions/TestUnlimited.java Mon Dec 05 16:27:50 2016 -0800
+++ b/jdk/test/javax/crypto/CryptoPermissions/TestUnlimited.java Mon Dec 05 17:04:02 2016 -0800
@@ -27,10 +27,11 @@
* @test
* @bug 8061842
* @summary Package jurisdiction policy files as something other than JAR
+ * @run main/othervm TestUnlimited use_default default
* @run main/othervm TestUnlimited "" exception
- * @run main/othervm TestUnlimited limited fail
- * @run main/othervm TestUnlimited unlimited pass
- * @run main/othervm TestUnlimited unlimited/ pass
+ * @run main/othervm TestUnlimited limited limited
+ * @run main/othervm TestUnlimited unlimited unlimited
+ * @run main/othervm TestUnlimited unlimited/ unlimited
* @run main/othervm TestUnlimited NosuchDir exception
* @run main/othervm TestUnlimited . exception
* @run main/othervm TestUnlimited /tmp/unlimited exception
@@ -40,9 +41,38 @@
*/
import javax.crypto.*;
import java.security.Security;
+import java.nio.file.*;
+import java.util.stream.*;
public class TestUnlimited {
+ private enum Result {
+ UNLIMITED,
+ LIMITED,
+ EXCEPTION,
+ UNKNOWN
+ };
+
+ /*
+ * Grab the default policy entry from java.security.
+ *
+ * If the input java.security file is malformed
+ * (missing crypto.policy, attribute/no value, etc), throw
+ * exception. split() might throw AIOOB which
+ * is ok behavior.
+ */
+ private static String getDefaultPolicy() throws Exception {
+ String javaHome = System.getProperty("java.home");
+ Path path = Paths.get(javaHome, "conf", "security", "java.security");
+
+ try (Stream<String> lines = Files.lines(path)) {
+ return lines.filter(x -> x.startsWith("crypto.policy="))
+ .findFirst().orElseThrow(
+ () -> new Exception("Missing crypto.policy"))
+ .split("=")[1].trim();
+ }
+ }
+
public static void main(String[] args) throws Exception {
/*
* Override the Security property to allow for unlimited policy.
@@ -53,16 +83,37 @@
throw new Exception("Two args required");
}
- boolean expected = args[1].equals("pass");
- boolean exception = args[1].equals("exception");
- boolean result = false;
+ String testStr = args[0];
+ String expectedStr = args[1];
+ if (testStr.equals("use_default")) {
+ expectedStr = getDefaultPolicy();
+ }
+
+ Result expected = Result.UNKNOWN; // avoid NPE warnings
+ Result result;
- System.out.println("Testing: " + args[0]);
+ switch (expectedStr) {
+ case "unlimited":
+ expected = Result.UNLIMITED;
+ break;
+ case "limited":
+ expected = Result.LIMITED;
+ break;
+ case "exception":
+ expected = Result.EXCEPTION;
+ break;
+ default:
+ throw new Exception("Unexpected argument");
+ }
- if (args[0].equals("\"\"")) {
+ System.out.println("Testing: " + testStr);
+ if (testStr.equals("\"\"")) {
Security.setProperty("crypto.policy", "");
} else {
- Security.setProperty("crypto.policy", args[0]);
+ // skip default case.
+ if (!testStr.equals("use_default")) {
+ Security.setProperty("crypto.policy", testStr);
+ }
}
/*
@@ -74,21 +125,20 @@
System.out.println("max AES key len:" + maxKeyLen);
if (maxKeyLen > 128) {
System.out.println("Unlimited policy is active");
- result = true;
+ result = Result.UNLIMITED;
} else {
System.out.println("Unlimited policy is NOT active");
- result = false;
+ result = Result.LIMITED;
}
} catch (Throwable e) {
- if (!exception) {
- throw new Exception();
- }
+ //ExceptionInInitializerError's
+ result = Result.EXCEPTION;
}
System.out.println(
"Expected:\t" + expected + "\nResult:\t\t" + result);
- if (expected != result) {
- throw new Exception();
+ if (!expected.equals(result)) {
+ throw new Exception("Didn't match");
}
System.out.println("DONE!");