1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# HG changeset patch
# User andrew
# Date 1365766584 -3600
# Node ID ac0858a12d62c384c53a048a634d25dc1f8f1b72
# Parent 5ed9acc1f6be298713f10ad71c33564d48f46555
8001040: Rework RMI model
Reviewed-by: alanb, ahgross, coffeys, dmocek
diff --git a/src/share/classes/sun/rmi/server/MarshalInputStream.java b/src/share/classes/sun/rmi/server/MarshalInputStream.java
--- jdk/src/share/classes/sun/rmi/server/MarshalInputStream.java
+++ jdk/src/share/classes/sun/rmi/server/MarshalInputStream.java
@@ -55,13 +55,19 @@
public class MarshalInputStream extends ObjectInputStream {
/**
- * value of "java.rmi.server.useCodebaseOnly" property,
+ * Value of "java.rmi.server.useCodebaseOnly" property,
* as cached at class initialization time.
+ *
+ * The default value is true. That is, the value is true
+ * if the property is absent or is not equal to "false".
+ * The value is only false when the property is present
+ * and is equal to "false".
*/
private static final boolean useCodebaseOnlyProperty =
- ((Boolean) java.security.AccessController.doPrivileged(
- new sun.security.action.GetBooleanAction(
- "java.rmi.server.useCodebaseOnly"))).booleanValue();
+ ! java.security.AccessController.doPrivileged(
+ new sun.security.action.GetPropertyAction(
+ "java.rmi.server.useCodebaseOnly", "true"))
+ .equalsIgnoreCase("false");
/** table to hold sun classes to which access is explicitly permitted */
protected static Map permittedSunClasses = new HashMap(3);
diff --git a/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java b/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java
--- jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java
+++ jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java
@@ -31,7 +31,8 @@
*
* @library ../../testlibrary
* @build ClassPathCodebase Dummy
- * @run main/othervm/policy=security.policy ClassPathCodebase
+ * @run main/othervm/policy=security.policy
+ * -Djava.rmi.server.useCodebaseOnly=false ClassPathCodebase
*/
import java.io.*;
diff --git a/test/java/rmi/registry/readTest/readTest.sh b/test/java/rmi/registry/readTest/readTest.sh
--- jdk/test/java/rmi/registry/readTest/readTest.sh
+++ jdk/test/java/rmi/registry/readTest/readTest.sh
@@ -52,7 +52,8 @@
RMIREG_OUT=rmi.out
#start rmiregistry without any local classes on classpath
cd rmi_tmp
-${TESTJAVA}${FS}bin${FS}rmiregistry 7491 > ..${FS}${RMIREG_OUT} 2>&1 &
+${TESTJAVA}${FS}bin${FS}rmiregistry -J-Djava.rmi.server.useCodebaseOnly=false \
+ ${TESTTOOLVMOPTS} 64005 > ..${FS}${RMIREG_OUT} 2>&1 &
RMIREG_PID=$!
# allow some time to start
sleep 3
diff --git a/test/java/rmi/server/RMIClassLoader/downloadArrayClass/DownloadArrayClass.java b/test/java/rmi/server/RMIClassLoader/downloadArrayClass/DownloadArrayClass.java
--- jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/DownloadArrayClass.java
+++ jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/DownloadArrayClass.java
@@ -68,6 +68,10 @@
TestLibrary.bomb(e);
}
+ System.err.println("Setting codebase property to: " + remoteCodebase);
+ System.setProperty("java.rmi.server.codebase",
+ remoteCodebase.toString());
+
/*
* Load Foo from a non-RMI class loader so that it won't be already
* loaded by an RMI class loader in this VM (for whatever that's
diff --git a/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy b/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy
--- jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy
+++ jdk/test/java/rmi/server/RMIClassLoader/downloadArrayClass/security.policy
@@ -7,6 +7,8 @@
};
grant {
+ permission java.util.PropertyPermission
+ "java.rmi.server.codebase", "read,write";
// permissions needed to move classes into separate codebase directories
permission java.io.FilePermission
diff --git a/test/java/rmi/server/RMIClassLoader/loadProxyClasses/LoadProxyClasses.java b/test/java/rmi/server/RMIClassLoader/loadProxyClasses/LoadProxyClasses.java
--- jdk/test/java/rmi/server/RMIClassLoader/loadProxyClasses/LoadProxyClasses.java
+++ jdk/test/java/rmi/server/RMIClassLoader/loadProxyClasses/LoadProxyClasses.java
@@ -32,7 +32,8 @@
* @library ../../../testlibrary
* @build TestLibrary FnnClass FnnUnmarshal LoadProxyClasses NonpublicInterface
* @build NonpublicInterface1 PublicInterface PublicInterface1
- * @run main/othervm/policy=security.policy LoadProxyClasses
+ * @run main/othervm/policy=security.policy
+ * -Djava.rmi.server.useCodebaseOnly=false LoadProxyClasses
*/
import java.rmi.server.RMIClassLoader;
diff --git a/test/java/rmi/testlibrary/RMID.java b/test/java/rmi/testlibrary/RMID.java
--- jdk/test/java/rmi/testlibrary/RMID.java
+++ jdk/test/java/rmi/testlibrary/RMID.java
@@ -109,6 +109,9 @@
if (!TestParams.testClasses.equals("")) {
args += " -C-Dtest.classes=" + TestParams.testClasses;
}
+
+ args += " -C-Djava.rmi.server.useCodebaseOnly=false ";
+
args += " " + getCodeCoverageArgs();
return args;
}
|