You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2010/03/28 14:57:05 UTC
svn commit: r928394 [1/6] - in /incubator/river/jtsk/trunk: ./ qa/
qa/harness/policy/ qa/jtreg/net/jini/jeri/kerberos/UnitTests/
qa/jtreg/net/jini/jeri/transport/multihomed/ qa/jtreg/unittestlib/
qa/src/com/sun/jini/qa/harness/ qa/src/com/sun/jini/qa/r...
Author: peter_firmstone
Date: Sun Mar 28 12:57:03 2010
New Revision: 928394
URL: http://svn.apache.org/viewvc?rev=928394&view=rev
Log:
Note this commit may be reversed, it is primarily to allow other developers to participate in my recent experiments utilising the compiler options source=5 and target=jsr14 and relates to River-334
This commit also contains code relevant to River-323 to provide concurrency to DynamicPolicyProvider, additional packages and junit tests have been included.
Added:
incubator/river/jtsk/trunk/src/com/sun/jini/tool/ProfilingSecurityManager.java (with props)
incubator/river/jtsk/trunk/src/manifest/concurrent-policy-uitl/
incubator/river/jtsk/trunk/src/net/jini/security/policy/DynamicPolicyProviderImpl.java
- copied, changed from r921640, incubator/river/jtsk/trunk/src/net/jini/security/policy/DynamicPolicyProvider.java
incubator/river/jtsk/trunk/src/org/
incubator/river/jtsk/trunk/src/org/apache/
incubator/river/jtsk/trunk/src/org/apache/river/
incubator/river/jtsk/trunk/src/org/apache/river/security/
incubator/river/jtsk/trunk/src/org/apache/river/security/RevokePermission.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/RevokeablePermissionCollection.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/ConcurrentDynamicPolicyProvider.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/ConcurrentPermissions.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/ConcurrentPolicyFile.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/DyanamicConcurrentPolicyProvider.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/Grants.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/MultiReadPermissionCollection.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/PermissionPendingResolution.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/PermissionPendingResolutionCollection.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/concurrent/WeakGroup.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/spi/
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/spi/RevokeableDynamicPolicySpi.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/spi/RevokeablePolicy.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/DefaultPolicyParser.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/DefaultPolicyScanner.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/Messages.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/NullPolicyParser.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyParser.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyUtils.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/UnresolvedPrincipal.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/Util.java (with props)
incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/messages.properties (with props)
incubator/river/jtsk/trunk/src/org/apache/river/util/
incubator/river/jtsk/trunk/src/org/apache/river/util/concurrent/
incubator/river/jtsk/trunk/src/org/apache/river/util/concurrent/WeakIdentityMap.java (with props)
incubator/river/jtsk/trunk/test/src/net/
incubator/river/jtsk/trunk/test/src/net/jini/
incubator/river/jtsk/trunk/test/src/net/jini/security/
incubator/river/jtsk/trunk/test/src/org/
incubator/river/jtsk/trunk/test/src/org/apache/
incubator/river/jtsk/trunk/test/src/org/apache/river/
incubator/river/jtsk/trunk/test/src/org/apache/river/security/
incubator/river/jtsk/trunk/test/src/org/apache/river/security/concurrent/
incubator/river/jtsk/trunk/test/src/org/apache/river/security/concurrent/ConcurrentPermissionsTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/concurrent/ConcurrentPolicyFileTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/concurrent/MultiReadPermissionCollectionTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/concurrent/PermissionCollectionTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/concurrent/Permissions_ImplTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/policy/
incubator/river/jtsk/trunk/test/src/org/apache/river/security/policy/util/
incubator/river/jtsk/trunk/test/src/org/apache/river/security/policy/util/DefaultPolicyParserTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/policy/util/PolicyEntryTest.java (with props)
incubator/river/jtsk/trunk/test/src/org/apache/river/security/policy/util/PolicyUtilsTest.java (with props)
incubator/river/jtsk/trunk/test/src/tests/
incubator/river/jtsk/trunk/test/src/tests/support/
incubator/river/jtsk/trunk/test/src/tests/support/FakePrincipal.java (with props)
incubator/river/jtsk/trunk/test/src/tests/support/MyPrincipal.java (with props)
incubator/river/jtsk/trunk/test/src/tests/support/Support_Configuration.java (with props)
incubator/river/jtsk/trunk/test/src/tests/support/Support_Exec.java (with props)
incubator/river/jtsk/trunk/test/src/tests/support/Support_GetLocal.java (with props)
incubator/river/jtsk/trunk/test/src/tests/support/Support_Resources.java (with props)
Modified:
incubator/river/jtsk/trunk/build.xml
incubator/river/jtsk/trunk/common.xml
incubator/river/jtsk/trunk/qa/ (props changed)
incubator/river/jtsk/trunk/qa/build.xml
incubator/river/jtsk/trunk/qa/harness/policy/defaulttest.policy
incubator/river/jtsk/trunk/qa/harness/policy/qa.policy
incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/kerberos/UnitTests/TestUtilities.java
incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/transport/multihomed/Multihomed.java
incubator/river/jtsk/trunk/qa/jtreg/unittestlib/UnitTestUtilities.java
incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java
incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/TestDescription.java
incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/jinitest.policy
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qa1.logging
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qaHarness.prop
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant01.policy
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant02.policy
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrantAll.policy
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoAccessClass.policy
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoGetProperty.policy
incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderUmbrellaGrant.policy
incubator/river/jtsk/trunk/src/com/sun/jini/action/GetPropertyAction.java
incubator/river/jtsk/trunk/src/com/sun/jini/collection/WeakIdentityMap.java
incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java
incubator/river/jtsk/trunk/src/net/jini/core/lookup/ServiceRegistrar.java
incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassLoader.java
incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java
incubator/river/jtsk/trunk/src/net/jini/security/GrantPermission.java
incubator/river/jtsk/trunk/src/net/jini/security/policy/DynamicPolicyProvider.java
incubator/river/jtsk/trunk/src/net/jini/security/policy/PolicyFileProvider.java
incubator/river/jtsk/trunk/src/net/jini/security/proxytrust/BasicUntrustedObjectSecurityContext.java
Modified: incubator/river/jtsk/trunk/build.xml
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/build.xml?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/build.xml (original)
+++ incubator/river/jtsk/trunk/build.xml Sun Mar 28 12:57:03 2010
@@ -228,7 +228,7 @@
doctitle="${javadoc.doc-title}"
linkoffline="${jdk.doc.url} ${jdk.packages}"
serialwarn="yes"
- source="1.4"
+ source="5"
use="true"
version="true"
windowtitle="${javadoc.win-title}">
@@ -305,6 +305,11 @@
<package name="net.jini.security"/>
<package name="net.jini.security.policy"/>
<package name="net.jini.security.proxytrust"/>
+ <package name="org.apache.river.security"/>
+ <package name="org.apache.river.security.concurrent"/>
+ <package name="org.apache.river.security.policy.spi"/>
+ <package name="org.apache.river.security.policy.util"/>
+ <package name="org.apache.river.util.concurrent"/>
<package name="net.jini.space"/>
<package name="net.jini.url.file"/>
<package name="net.jini.url.httpmd"/>
@@ -325,7 +330,7 @@
doctitle="${javadoc.spec.doc-title}"
linkoffline="${jdk.doc.url} ${jdk.packages}"
serialwarn="yes"
- source="1.4"
+ source="5"
use="true"
version="true"
windowtitle="${javadoc.spec.win-title}">
@@ -381,6 +386,7 @@
jsk-resources.jar,
jsk-platform.jar,
jsk-policy.jar,
+ concurrent-policy-util.jar,
sun-util.jar" />
<target name="services.jars" depends="toolswrappers.jars,
@@ -609,6 +615,7 @@
<arg line="${jskprivate.include}"/>
<arg line="-in com.sun.jini.tool"/>
<arg value="com.sun.jini.tool.DebugDynamicPolicyProvider"/>
+ <arg value="com.sun.jini.tool.ProfilingSecurityManager"/>
</classdep>
<delete file="${lib.dir}/jsk-debug-policy.jar" quiet="true"/>
<jar destfile="${lib.dir}/jsk-debug-policy.jar"
@@ -788,6 +795,7 @@
<arg value="net.jini.security.policy.PolicyFileProvider"/>
<arg line="-in com.sun.jini"/>
<arg line="-in net.jini"/>
+ <arg line="-in org.apache.river"/>
</classdep>
<delete file="${lib-ext.dir}/jsk-policy.jar" quiet="true"/>
<jar destfile="${lib-ext.dir}/jsk-policy.jar"
@@ -796,6 +804,27 @@
</jar>
</target>
+ <target name="concurrent-policy-util.jar">
+ <property name="concurrent-policy-util.deps"
+ location="${build.deps.dir}/concurrent-policy-util.deps"/>
+ <classdep output="${concurrent-policy-util.deps}"
+ classpathref="classdep.classes.classpath">
+ <arg value="-cp"/>
+ <arg path="${build.classes.dir}"/>
+ <arg value="-files"/>
+ <arg value="org.apache.river.security.concurrent.ConcurrentPolicyFile"/>
+ <arg line="-in com.sun.jini"/>
+ <arg line="-in net.jini"/>
+ <arg line="-in org.apache.river"/>
+ </classdep>
+ <delete file="${lib-ext.dir}/concurrent-policy-util.jar" quiet="true"/>
+ <jar destfile="${lib-ext.dir}/concurrent-policy-util.jar"
+ index="false">
+ <fileset dir="${build.classes.dir}"
+ includesfile="${concurrent-policy-util.deps}"/>
+ </jar>
+ </target>
+
<target name="jsk-resources.jar" depends="stubs">
<delete file="${lib.dir}/jsk-resources.jar" quiet="true"/>
<jar destfile="${lib.dir}/jsk-resources.jar"
@@ -1628,6 +1657,10 @@
<arg value="com.sun.jini.phoenix.AbstractRegistry_Skel"/>
<arg value="com.sun.jini.phoenix.AbstractRegistry_Stub"/>
<arg value="com.sun.jini.phoenix.AbstractSystem_Stub"/>
+ <!--Why was the following class was missing from jar file,
+ is this a bug with ClassDep?
+ com.sun.jini.phoenix.Activation depends on this:-->
+ <arg value="com.sun.jini.phoenix.ConstrainableAID"/>
</classdep>
<delete file="${lib.dir}/phoenix.jar" quiet="true" />
<jar destfile="${lib.dir}/phoenix.jar" index="false"
Modified: incubator/river/jtsk/trunk/common.xml
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/common.xml?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/common.xml (original)
+++ incubator/river/jtsk/trunk/common.xml Sun Mar 28 12:57:03 2010
@@ -168,8 +168,8 @@
<attribute name="source.dir"/>
<attribute name="dest.dir"/>
<attribute name="debug" default="${debug}"/>
- <attribute name="source" default="1.4"/>
- <attribute name="target" default="1.4"/>
+ <attribute name="source" default="5"/>
+ <attribute name="target" default="jsr14"/>
<element name="javac-cmd-elements" implicit="true" optional="true"/>
<sequential>
<javac fork="yes"
@@ -181,7 +181,7 @@
source="@{source}"
srcdir="@{source.dir}"
target="@{target}"
- verbose="no">
+ verbose="yes">
<patternset refid="@{source.pat}"/>
<javac-cmd-elements/>
</javac>
Propchange: incubator/river/jtsk/trunk/qa/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sun Mar 28 12:57:03 2010
@@ -3,3 +3,4 @@ lib-ext
lib
build.properties
build
+LeaseRenewDurRFE-sharedVMDir-TestService_0
Modified: incubator/river/jtsk/trunk/qa/build.xml
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/build.xml?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/build.xml (original)
+++ incubator/river/jtsk/trunk/qa/build.xml Sun Mar 28 12:57:03 2010
@@ -161,6 +161,7 @@
<!--<arg value="-Djava.security.debug=access,failure"/>-->
<arg value="-Djavatest.maxOutputSize=500000"/>
<!--<arg value="-Bug:6307813"/>-->
+ <!--<arg value="net/jini/security/policy/DynamicPolicyProvider/dynamicBasePolicy/Test.java"/>-->
<!--<arg value="net/jini/security/GrantPermission/implies/Test.java" />-->
</jtreg>
<move todir="${river.lib.dir}">
@@ -196,19 +197,37 @@
<element name="tr-elements" optional="true" implicit="true"/>
<sequential>
<java classname="com.sun.jini.qa.harness.QARunner" fork="yes" failOnError="true">
+ <!--Note these arguments only apply to the qa harness, they aren't
+ propagated to client test jvm's to do that you must set the
+ global or client vm args in the file:
+ src/com/sun/jini/resources/qaDefaults.properties-->
<!-- JDK extension directories (include our lib-ext dirs, for the custom policy providers) -->
+ <!--<jvmarg value="-Xbootclasspath/a:${river-ext.lib-dir}"/>-->
<jvmarg value="-Djava.ext.dirs=${ext.dirs}" />
+ <!--Use the following security manager if you need to discover which jar
+ file requires a particular permission, note this only works for the harness here -->
+ <!--<jvmarg value="-Djava.security.manager=com.sun.jini.tool.ProfilingSecurityManager"/>-->
+ <!--<jvmarg value="-Dpolicy.provider=net.jini.security.policy.DynamicPolicyProvider"/>-->
+ <!--Enable the following if you don't want to use any other policy's -->
+ <!--<jvmarg value="-Djava.security.policy==${security.policy}" />-->
<jvmarg value="-Djava.security.policy=${security.policy}" />
- <!--<jvmarg value="-Djava.security.debug=access" />-->
+ <jvmarg value="-Djava.security.debug=access" />
<jvmarg value="-Djava.util.logging.config.file=${log.config}" />
<jvmarg value="-Dcom.sun.jini.jsk.home=${river.home}" />
<jvmarg value="-Dcom.sun.jini.qa.home=${basedir}" />
+ <!--We have a problem with path to properties and the src directory
+ it appears that the src directory was added later, however links
+ to property files aren't reflective of this and conflict with
+ the path to those property files in jar archives needs looking into
+ this is now solved by setting the -->
<jvmarg value="-Dcom.sun.jini.test.home=${basedir}" />
+ <!--<jvmarg value="-DsearchPath=${basedir}/src,${basedir},${searchPath}"/>-->
+ <jvmarg value="-Dcom.sun.jini.qa.harness.harnessJar=${basedir}/lib/jiniharness.jar"/>
<jvmarg value="-Dcom.sun.jini.qa.harness.configs=${harness.configs}" />
<!-- VM args for each test run: include our JDK extension directories
$${com.sun.jini.qa.harness.globalvmargs},-Dcom.sun.jini.test.home=$${com.sun.jini.test.home},-Dcom.sun.jini.test.port=$${com.sun.jini.test.port},-Dcom.sun.jini.qa.harness.policies=<url: com/sun/jini/test/resources/jinitest.policy>-Djava.security.debug=access-->
- <!--<jvmarg value="-Dcom.sun.jini.qa.harness.globalvmargs=$${com.sun.jini.qa.harness.globalvmargs},-Djava.ext.dirs=${ext.dirs},-Djava.security.debug=access"/>-->
- <jvmarg value="-Dcom.sun.jini.qa.harness.globalvmargs=$${com.sun.jini.qa.harness.globalvmargs},-Djava.ext.dirs=${ext.dirs}"/>
+ <jvmarg value="-Dcom.sun.jini.qa.harness.globalvmargs=$${com.sun.jini.qa.harness.globalvmargs},-Djava.ext.dirs=${ext.dirs},-Djava.security.debug=access"/>
+ <!--<jvmarg value="-Dcom.sun.jini.qa.harness.globalvmargs=$${com.sun.jini.qa.harness.globalvmargs},-Djava.ext.dirs=${ext.dirs}"/>-->
<arg path="${src.dir}/com/sun/jini/test/resources/qaHarness.prop" />
<arg value="-testJar"/>
<arg path="${lib.dir}/jinitests.jar" />
@@ -230,7 +249,9 @@
</macrodef>
<target name="run-tests" depends="" description="Execute specific QA test(s)">
- <property name="run.tests" value="com/sun/jini/test/impl/discoverymanager/RemoveGroupsLocsDiscard.td"/>
+ <!--<property name="run.tests" value="com/sun/jini/test/impl/discoverymanager/RemoveGroupsLocsDiscard.td"/>-->
+ <!--<property name="run.tests" value="com/sun/jini/test/impl/locatordiscovery/DelayDiscoveryAfterDiscard.td"/>-->
+ <property name="run.tests" value="com/sun/jini/test/impl/joinmanager/LeaseRenewDurRFE.td"/>
<testrun>
<!-- Run specific test(s) -->
<arg value="-tests"/>
Modified: incubator/river/jtsk/trunk/qa/harness/policy/defaulttest.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/harness/policy/defaulttest.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/harness/policy/defaulttest.policy (original)
+++ incubator/river/jtsk/trunk/qa/harness/policy/defaulttest.policy Sun Mar 28 12:57:03 2010
@@ -23,7 +23,7 @@ grant codebase "file:${com.sun.jini.qa.h
permission java.security.AllPermission "", "";
};
-grant codebase "file:${com.sun.jini.qa.home}${/}lib${/}harness.jar" {
+grant codebase "file:${com.sun.jini.qa.home}${/}lib${/}jiniharness.jar" {
permission java.security.AllPermission "", "";
};
Modified: incubator/river/jtsk/trunk/qa/harness/policy/qa.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/harness/policy/qa.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/harness/policy/qa.policy (original)
+++ incubator/river/jtsk/trunk/qa/harness/policy/qa.policy Sun Mar 28 12:57:03 2010
@@ -49,7 +49,7 @@ grant codebase "file:${com.sun.jini.qa.h
permission java.io.FilePermission "/tmp", "read,write,execute,delete";
permission java.io.FilePermission "/tmp/-", "read,write,execute,delete";
permission java.io.FilePermission "/var/tmp", "read,write,execute,delete";
- permission java.io.FilePermission "/var/tmp/-", "read,write,execute,delete";
+ permission java.io.FilePermission "/var/tmp/-", "read,write,execute,delete";
// uncomment this one if you need lookup to accept file: codebases
// permission java.io.FilePermission "<<ALL FILES>>", "read";
permission java.lang.RuntimePermission "modifyThreadGroup";
@@ -70,7 +70,25 @@ grant codebase "file:${com.sun.jini.qa.h
permission java.io.FilePermission "d:\\temp", "read,write,execute,delete";
permission java.io.FilePermission "d:\\temp\\-", "read,write,execute,delete";
permission java.io.FilePermission "d:\\windows\\temp", "read,write,execute,delete";
- permission java.io.FilePermission "d:\\windows\\temp\\-", "read,write,execute,delete";
+ permission java.io.FilePermission "d:\\windows\\temp\\-", "read,write,execute,delete";
+ // THE FOLLOWING ARE REQUIRED IF UTILISING A SECURITY MANAGER FROM COMMAND LINE
+ // AT START UP.
+ // logging permissions
+ // permission java.util.logging.LoggingPermission "control";
+ // runtime permissions
+ //permission java.lang.RuntimePermission "createClassLoader";
+ //permission java.lang.RuntimePermission "accessClassInPackage.sun.util.logging.resources";
+ //permission java.lang.RuntimePermission "getClassLoader";
+ // property permissions
+ //permission java.util.PropertyPermission "*", "read,write";
+ //permission java.io.FilePermission "${com.sun.jini.jsk.home}${/}-", "read";
+ //permission java.io.FilePermission "${com.sun.jini.jsk.home}", "read";
+};
+ // THE FOLLOWING ARE REQUIRED IF UTILISING A SECURITY MANAGER FROM COMMAND LINE
+ // OR AT START UP.
+grant codebase "file:${com.sun.jini.qa.home}${/}lib${/}jinitests.jar" {
+ //permission java.util.PropertyPermission "net.jini.discovery.announce", "read";
+ //permission java.util.PropertyPermission "com.sun.jini.qa.harness.testhosts", "read";
};
grant codebase "file:${com.sun.jini.qa.home}${/}lib/qa1-jini-latest.jar" {
Modified: incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/kerberos/UnitTests/TestUtilities.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/kerberos/UnitTests/TestUtilities.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/kerberos/UnitTests/TestUtilities.java (original)
+++ incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/kerberos/UnitTests/TestUtilities.java Sun Mar 28 12:57:03 2010
@@ -28,6 +28,7 @@ import java.io.File;
import java.lang.reflect.Field;
import java.security.AccessControlContext;
import java.security.Permission;
+import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.ProtectionDomain;
import java.util.Properties;
@@ -118,7 +119,7 @@ class TestUtilities extends UnitTestUtil
}
public static AccessControlContext getContext(Permission[] perms) {
- Permissions permissions = new Permissions();
+ PermissionCollection permissions = new Permissions();
if (perms != null) {
for (int i = 0; i < perms.length; i++) {
if (perms[i] != null)
Modified: incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/transport/multihomed/Multihomed.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/transport/multihomed/Multihomed.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/transport/multihomed/Multihomed.java (original)
+++ incubator/river/jtsk/trunk/qa/jtreg/net/jini/jeri/transport/multihomed/Multihomed.java Sun Mar 28 12:57:03 2010
@@ -59,6 +59,7 @@ import java.rmi.server.ExportException;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.Permission;
+import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
@@ -281,7 +282,7 @@ public class Multihomed {
* has only the specified permissions.
**/
private static AccessControlContext createAccWith(Permission[] perms) {
- Permissions permissions = new Permissions();
+ PermissionCollection permissions = new Permissions();
for (int i = 0; i < perms.length; i++) {
permissions.add(perms[i]);
}
Modified: incubator/river/jtsk/trunk/qa/jtreg/unittestlib/UnitTestUtilities.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/jtreg/unittestlib/UnitTestUtilities.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/jtreg/unittestlib/UnitTestUtilities.java (original)
+++ incubator/river/jtsk/trunk/qa/jtreg/unittestlib/UnitTestUtilities.java Sun Mar 28 12:57:03 2010
@@ -360,7 +360,7 @@ public class UnitTestUtilities {
ProtectionDomain domain = UnitTestUtilities.class.getProtectionDomain();
PermissionCollection origPerms =
Policy.getPolicy().getPermissions(domain);
- Permissions perms = new Permissions();
+ PermissionCollection perms = new Permissions();
for (Enumeration en = origPerms.elements();
en.hasMoreElements(); )
{
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java Sun Mar 28 12:57:03 2010
@@ -1654,8 +1654,8 @@ public class QAConfig implements Seriali
getStringConfigVal("com.sun.jini.qa.harness.globalvmargs", null);
return parseArgList(vmArgs);
}
-
- /**
+
+ /**
* Return an array of VM options extracted from the given array
* of combined options and properties. These are structured
* to be input to service starter descriptions, i.e. one
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/TestDescription.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/TestDescription.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/TestDescription.java (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/TestDescription.java Sun Mar 28 12:57:03 2010
@@ -602,6 +602,8 @@ public class TestDescription implements
String testClass = getTestClassName();
ArrayList cmdList = new ArrayList(10);
cmdList.add(getJVM());
+ // Uncomment the following line if you want to debug permission requests
+ //cmdList.add("-Djava.security.manager=com.sun.jini.tool.ProfilingSecurityManager");
cmdList.add("-Djava.security.policy=" + getPolicyFile());
if (getCodebase() != null) {
cmdList.add("-Djava.rmi.server.codebase=" + getCodebase());
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/qa/resources/qaDefaults.properties Sun Mar 28 12:57:03 2010
@@ -213,6 +213,8 @@ com.sun.jini.qa.harness.actdeathdelay=5
#
# no cosmetic whitespace
com.sun.jini.qa.harness.globalvmargs=\
+-Djava.ext.dirs=${java.ext.dirs},\
+-Djava.security.debug=access,\
-Dcom.sun.jini.jsk.port=${com.sun.jini.jsk.port},\
-Dcom.sun.jini.qa.port=${com.sun.jini.qa.port},\
-Dcom.sun.jini.jsk.home=${com.sun.jini.jsk.home},\
@@ -269,4 +271,3 @@ com.sun.jini.qa.harness.defaultTestConfi
# all additional defs should be done self-referentially
testOverrideProviders=com.sun.jini.qa.harness.StoreOverrideProvider
-
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/jinitest.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/jinitest.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/jinitest.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/jinitest.policy Sun Mar 28 12:57:03 2010
@@ -9,6 +9,7 @@ grant codebase "file:${com.sun.jini.test
grant {
permission java.io.FilePermission "${com.sun.jini.test.home}${/}lib${/}-", "read";
+ permission java.util.PropertyPermission "com.sun.jini.reggie.enableImplToStubReplacement", "read";
};
grant codebase "file:${com.sun.jini.test.home}${/}lib${/}qa1-start-tests.jar" {
@@ -23,6 +24,29 @@ grant codebase "file:${com.sun.jini.test
permission java.security.AllPermission "", "";
};
+// Grants required for jdk1.6 combined with source=5 and target=jsr14
+// I think this has something to do with the new java 6 Policy implementation,
+// the visibility of our policy implementations on the boot classpath and
+// jdk1.6 compiler optimisations. See River-334
+grant codebase "file:${com.sun.jini.jsk.home}${/}lib-ext${/}*" {
+ permission java.security.AllPermission "", "";
+ //permission java.security.SecurityPermission "getProperty.net.jini.security.policy.PolicyFileProvider.basePolicyClass";
+ //permission java.util.PropertyPermission "java.security.policy", "read";
+ //permission java.util.PropertyPermission "java.security.policy", "write";
+ //permission java.lang.RuntimePermission "accessClassInPackage.sun.security.provider";
+ //permission java.lang.RuntimePermission "getProtectionDomain";
+ //permission net.jini.security.GrantPermission "java.security.AllPermission \"\", \"\"";
+};
+
+// Grants required for jdk1.6 combined with source=5 and target=jsr14
+// I think this has something to do with the new java 6 Policy implementation,
+// the visibility of our policy implementations on the boot classpath and
+// jdk1.6 compiler optimisations. See River-334
+grant codebase "file:${com.sun.jini.test.home}${/}lib-ext${/}*" {
+ permission java.security.AllPermission "", "";
+};
+
+
grant codebase "file:${com.sun.jini.qa.harness.testJar}" {
permission net.jini.security.GrantPermission
"java.security.AllPermission \"\", \"\"";
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qa1.logging
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qa1.logging?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qa1.logging (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qa1.logging Sun Mar 28 12:57:03 2010
@@ -39,7 +39,7 @@ handlers = java.util.logging.ConsoleHand
# level setting (set below) to limit messages printed to
# the console.
-.level = INFO
+.level = FINEST
############################################################
# Handler specific properties: formatters and logger levels
@@ -104,10 +104,10 @@ java.util.logging.FileHandler.level = IN
# FINEST (lowest value)
# For Everything
-sun.rmi.level = INFO
-net.jini.level = INFO
+sun.rmi.level = FINEST
+net.jini.level = FINEST
-com.sun.jini.level = INFO
+com.sun.jini.level = FINEST
# For the LogManager
com.sun.jini.logging.LogManager.level = INFO
@@ -159,9 +159,9 @@ net.jini.jeri.BasicInvocationHandler.lev
net.jini.iiop.IiopExporter.level = INFO
# For Preferred Classes
-net.jini.loader.level = INFO
-#net.jini.loader.pref.PreferredClassLoader.level = INFO
-#net.jini.loader.pref.PreferredClassLoader.preferred.level = INFO
+net.jini.loader.level = FINEST
+net.jini.loader.pref.PreferredClassLoader.level = FINEST
+net.jini.loader.pref.PreferredClassLoader.preferred.level = FINEST
#net.jini.loader.pref.PreferredClassLoader.exception.level = INFO
#net.jini.loader.pref.PreferredClassProvider.level = INFO
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qaHarness.prop
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qaHarness.prop?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qaHarness.prop (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/resources/qaHarness.prop Sun Mar 28 12:57:03 2010
@@ -26,13 +26,13 @@
######################################################
# location of the JSK installation
-com.sun.jini.jsk.home=${user.home}/river/jtsk/trunk
+# com.sun.jini.jsk.home=${user.home}/river/jtsk/trunk
# Location of the harness installation
-com.sun.jini.qa.home=${user.home}/river/qatests/trunk/source/vob/qa
+# com.sun.jini.qa.home=${user.home}/river/qatests/trunk/source/vob/qa
# Location of the tests installation
-com.sun.jini.test.home=${user.home}/river/qatests/trunk/source/vob/qa
+# com.sun.jini.test.home=${user.home}/river/qatests/trunk/source/vob/qa
######################################################
#
@@ -216,9 +216,12 @@ testOverrideProviders=${testOverrideProv
com.sun.jini.qa.harness.globalvmargs=${com.sun.jini.qa.harness.globalvmargs},\
-Dcom.sun.jini.test.home=${com.sun.jini.test.home},\
-Dcom.sun.jini.test.port=${com.sun.jini.test.port},\
--Dcom.sun.jini.qa.harness.policies=<url: com/sun/jini/test/resources/jinitest.policy>
+-Dcom.sun.jini.qa.harness.policies=<url: src/com/sun/jini/test/resources/jinitest.policy>
# make sure slave's use their local test home directory
com.sun.jini.qa.harness.slaveOverrides=${com.sun.jini.qa.harness.slaveOverrides} com.sun.jini.test.home
-searchPath=${com.sun.jini.test.home},${searchPath}
+# The src directory was newly added after the ant build conversion now policy
+# files attempts succeed and don't need to be loaded from jar files.
+# This makes life a lot easier while trying to change policy files during debugging.
+searchPath=${com.sun.jini.test.home}/src,${searchPath}
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant01.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant01.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant01.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant01.policy Sun Mar 28 12:57:03 2010
@@ -37,7 +37,7 @@ grant {
"accessClassInPackage.sun.security.provider";
permission java.security.SecurityPermission "getDomainCombiner";
permission java.security.SecurityPermission "createAccessControlContext";
-
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
};
/*
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant02.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant02.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant02.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrant02.policy Sun Mar 28 12:57:03 2010
@@ -66,6 +66,7 @@ grant {
permission java.lang.RuntimePermission "setIO";
permission javax.security.auth.AuthPermission "createLoginContext.com.sun.jini.Test";
permission javax.security.auth.AuthPermission "doAs";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
// Allow reflection to examine service starter framework classes
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrantAll.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrantAll.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrantAll.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderGrantAll.policy Sun Mar 28 12:57:03 2010
@@ -23,7 +23,7 @@ grant {
permission java.security.SecurityPermission "getPolicy";
permission java.security.SecurityPermission "getDomainCombiner";
permission java.security.SecurityPermission "createAccessControlContext";
-
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.security.SecurityPermission
"getProperty.net.jini.security.policy.*";
permission java.security.SecurityPermission
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoAccessClass.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoAccessClass.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoAccessClass.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoAccessClass.policy Sun Mar 28 12:57:03 2010
@@ -38,6 +38,7 @@ grant {
permission java.lang.RuntimePermission "getProtectionDomain";
permission javax.security.auth.AuthPermission "createLoginContext.com.sun.jini.Test";
permission javax.security.auth.AuthPermission "doAs";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
// Allow reflection to examine service starter framework classes
permission java.lang.RuntimePermission "accessDeclaredMembers";
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoGetProperty.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoGetProperty.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoGetProperty.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderNoGetProperty.policy Sun Mar 28 12:57:03 2010
@@ -43,6 +43,7 @@ grant {
permission java.lang.RuntimePermission "getProtectionDomain";
permission javax.security.auth.AuthPermission "createLoginContext.com.sun.jini.Test";
permission javax.security.auth.AuthPermission "doAs";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
// Allow reflection to examine service starter framework classes
permission java.lang.RuntimePermission "accessDeclaredMembers";
Modified: incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderUmbrellaGrant.policy
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderUmbrellaGrant.policy?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderUmbrellaGrant.policy (original)
+++ incubator/river/jtsk/trunk/qa/src/com/sun/jini/test/spec/policyprovider/dynamicPolicyProvider/policyProviderUmbrellaGrant.policy Sun Mar 28 12:57:03 2010
@@ -76,6 +76,7 @@ grant {
permission java.lang.RuntimePermission "setIO";
permission javax.security.auth.AuthPermission "createLoginContext.com.sun.jini.Test";
permission javax.security.auth.AuthPermission "doAs";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
// Allow reflection to examine service starter framework classes
permission java.lang.RuntimePermission "accessDeclaredMembers";
Modified: incubator/river/jtsk/trunk/src/com/sun/jini/action/GetPropertyAction.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/com/sun/jini/action/GetPropertyAction.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/com/sun/jini/action/GetPropertyAction.java (original)
+++ incubator/river/jtsk/trunk/src/com/sun/jini/action/GetPropertyAction.java Sun Mar 28 12:57:03 2010
@@ -23,6 +23,7 @@ import com.sun.jini.logging.LogUtil;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.logging.Logger;
+import java.util.logging.Level;
import net.jini.security.Security;
/**
@@ -58,7 +59,7 @@ public class GetPropertyAction implement
private static final Logger logger =
Logger.getLogger("com.sun.jini.action.GetPropertyAction");
-
+
private final String theProp;
private final String defaultVal;
@@ -104,12 +105,14 @@ public class GetPropertyAction implement
return value;
}
} catch (SecurityException e) {
- if (logger.isLoggable(Levels.HANDLED)) {
- LogUtil.logThrow(logger, Levels.HANDLED,
- GetPropertyAction.class, "run",
- "security exception reading \"{0}\", returning {1}",
- new Object[] { theProp, defaultVal }, e);
- }
+ if (logger.isLoggable(Level.FINE)) {
+ logger.logp( Level.FINE,
+ GetPropertyAction.class.toString(), "run()",
+ "security exception reading \"" + theProp + "\", returning "
+ + defaultVal,
+ e);
+ throw e;
+ }
}
return defaultVal;
}
Modified: incubator/river/jtsk/trunk/src/com/sun/jini/collection/WeakIdentityMap.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/com/sun/jini/collection/WeakIdentityMap.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/com/sun/jini/collection/WeakIdentityMap.java (original)
+++ incubator/river/jtsk/trunk/src/com/sun/jini/collection/WeakIdentityMap.java Sun Mar 28 12:57:03 2010
@@ -23,26 +23,32 @@ import java.lang.ref.WeakReference;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
/**
- * Identity-based weak hash map.
+ * Identity-based weak hash map. Updated to support Generics and Map<K,V> on
+ * 22nd March 2010
*
+ * @param K Object Key used for identity
+ * @param V Object Value
* @author Sun Microsystems, Inc.
- *
+ * @author Peter Firmstone
+ * @version 2.0 - Generic Support and Map<K,V> added.
* @since 2.0
*/
-public class WeakIdentityMap {
+public class WeakIdentityMap<K,V> implements Map<K,V>{
// REMIND: optimize implementation (clone new java.util.WeakHashMap?)
- private final Map map = new HashMap();
+ private final Map<Key, V> map = new HashMap<Key, V>();
private final ReferenceQueue queue = new ReferenceQueue();
/**
* Associates value with given key, returning value previously associated
* with key, or null if none.
*/
- public Object put(Object key, Object value) {
+ public V put(K key, V value) {
processQueue();
return map.put(Key.create(key, queue), value);
}
@@ -50,7 +56,7 @@ public class WeakIdentityMap {
/**
* Returns value associated with given key, or null if none.
*/
- public Object get(Object key) {
+ public V get(Object key) {
processQueue();
return map.get(Key.create(key, null));
}
@@ -59,7 +65,7 @@ public class WeakIdentityMap {
* Removes association for given key, returning value previously associated
* with key, or null if none.
*/
- public Object remove(Object key) {
+ public V remove(Object key) {
processQueue();
return map.remove(Key.create(key, null));
}
@@ -67,7 +73,7 @@ public class WeakIdentityMap {
/**
* Returns collection containing all values currently held in this map.
*/
- public Collection values() {
+ public Collection<V> values() {
processQueue();
return map.values();
}
@@ -87,30 +93,28 @@ public class WeakIdentityMap {
}
}
- private static class Key extends WeakReference {
+ private static class Key<T> extends WeakReference<T> {
private final int hash;
+ @SuppressWarnings("unchecked")
static Key create(Object k, ReferenceQueue q) {
- if (k == null) {
- return null;
- } else if (q == null) {
- return new Key(k);
- } else {
- return new Key(k, q);
- }
+ //if (k == null) {return null;} Not so sure we should return null
+ if (q == null) {return new Key(k);}
+ return new Key(k, q);
}
- private Key(Object k) {
+ private Key(T k) {
super(k);
hash = System.identityHashCode(k);
}
- private Key(Object k, ReferenceQueue q) {
+ private Key(T k, ReferenceQueue<? super T> q) {
super(k, q);
hash = System.identityHashCode(k);
}
+ @Override
public boolean equals(Object o) {
if (this == o) {
return true;
@@ -121,8 +125,37 @@ public class WeakIdentityMap {
return (k1 != null && k2 != null && k1 == k2);
}
+ @Override
public int hashCode() {
return hash;
}
}
+
+ public int size() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isEmpty() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean containsKey(Object key) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean containsValue(Object value) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void putAll(Map<? extends K, ? extends V> m) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Set<K> keySet() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Set<Entry<K, V>> entrySet() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
Added: incubator/river/jtsk/trunk/src/com/sun/jini/tool/ProfilingSecurityManager.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/com/sun/jini/tool/ProfilingSecurityManager.java?rev=928394&view=auto
==============================================================================
--- incubator/river/jtsk/trunk/src/com/sun/jini/tool/ProfilingSecurityManager.java (added)
+++ incubator/river/jtsk/trunk/src/com/sun/jini/tool/ProfilingSecurityManager.java Sun Mar 28 12:57:03 2010
@@ -0,0 +1,241 @@
+/*
+
+ * Copyright (c) 2006 Mark Petrovic <ms...@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Original Author: Mark Petrovic <ms...@gmail.com>
+ *
+*/
+
+package com.sun.jini.tool;
+
+import static java.lang.System.err;
+import static java.lang.System.out;
+
+import java.lang.reflect.Field;
+
+import java.net.URL;
+
+import java.security.AccessController;
+import java.security.AccessControlContext;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.ProtectionDomain;
+
+import java.util.ArrayList;
+
+/**
+ * <code>ProfilingSecurityManager</code> is a Java security manager that profiles
+ * what resources an application accesses, and in what manner --- e.g., read, write, etc. It does not enforce a
+ * security policy, but rather produces a starting point for crafting one.
+ * <p>
+ * It extends <code>java.lang.SecurityManager</code> and overrides the two forms of the <code>checkPermission()</code> method.
+ * For each call to <code>checkPermission()</code>, <code>ProfilingSecurityManager</code> first guards against the
+ * condition that it itself induced the call to <code>checkPermission()</code>, which would result in
+ * unterminated recursion. If a call to <code>checkPermission()</code> resulted from a call outside
+ * <code>ProfilingSecurityManager</code>, the current context is examined and each class found therein is
+ * profiled as needing access to the <code>java.security.Permission</code> in question.
+ *
+ * Profiling is manifested as a writing to <code>System.out</code> a "grant" rule for each <code>java.security.Permission</code> requested
+ * on a per <code>CodeBase</code> basis.
+ *
+ * The implementation here does some very simple rule caching. If a rule has been seen previously, it is not output to System.out.
+ * The caching cannot prevent a security check, but it can reduce I/O during profiling.
+ *
+ * @author Mark S. Petrovic
+ */
+public class ProfilingSecurityManager extends SecurityManager {
+
+ /* Variables of pure convenience */
+ final private String thisClassName;
+ final private String thisCodeSourceURLString;
+ final private String psmMsg = "ProfilingSecurityManager";
+ final private ArrayList<String> cacheList = new ArrayList<String>();
+
+ // ---------------------------------
+
+ public ProfilingSecurityManager() {
+ thisClassName=this.getClass().getName();
+ CodeSource thisCodeSource = this.getClass().getProtectionDomain().getCodeSource();
+ thisCodeSourceURLString = thisCodeSource.getLocation().toString();
+ }
+
+ // -----------------
+
+ @Override
+ public void checkPermission(final Permission permission) {
+ final Throwable t = new Throwable("Profiler stack probe");
+ final StackTraceElement[] stack = t.getStackTrace();
+ // Avoid recursion owing to actions in this class itself inducing callbacks
+ if( !isRecur(stack) ) {
+ buildRules(permission, AccessController.getContext());
+ }
+ }
+
+ // -----------------
+
+ @Override
+ public void checkPermission(final Permission permission, final Object context) {
+ buildRules(permission, (AccessControlContext)context);
+ }
+
+ // -----------------
+
+ // With a Permission and an AccessControlContext, we can build and print rules
+ private void buildRules(final Permission permission, final AccessControlContext ctx) {
+ try {
+ final ProtectionDomain[] protectionDomain = getProtectionDomains(ctx);
+ if( null != protectionDomain ) {
+ for(int i=0;i<protectionDomain.length;++i) {
+ final String grant = formatRule(permission, protectionDomain[i]);
+ if( null != grant && !isCached(grant)) {
+ out.println(grant);
+ }
+ }
+ }
+ }
+ catch(IllegalStateException e) {
+ e.printStackTrace();
+ }
+ }
+
+ // -----------------
+
+ /*
+ Traverse the stack, returning true if the stack indicates we called ourself.
+ */
+ private boolean isRecur(final StackTraceElement[] st) {
+ boolean v = false;
+ for(int i=st.length-1;i>=1;--i) {
+ final boolean c = st[i].getClassName().equals(thisClassName);
+ final boolean m = st[i].getMethodName().equals("buildRules");
+ if (c && m) {
+ v = true;
+ break;
+ }
+ }
+ return v;
+ }
+
+ // -----------------
+
+ /* Get the protection domains by Java reflection. There is no public API for this info,
+ * making this code Sun Java 1.5 JVM implementation dependent.
+ */
+ private ProtectionDomain[] getProtectionDomains(final AccessControlContext context) throws
+ IllegalStateException {
+ ProtectionDomain[] pda = null;
+ try {
+ final Field[] fields = AccessControlContext.class.getDeclaredFields();
+ if( null == fields ) {
+ throw new IllegalStateException("No fields");
+ }
+ for(int i=0; i<fields.length; ++i ) {
+ if( fields[i].getName().equals("context") ) { // Warning: JVM-dependent works with JVM 5 and 6
+ fields[i].setAccessible(true);
+ final Object o = fields[i].get(context);
+ pda = (ProtectionDomain[] )o;
+ break;
+ }
+ }
+
+ // No 'context' field found, throw exception.
+ if( null == pda ) {
+ throw new IllegalStateException("No \"context\" Field found!");
+ }
+
+ }
+ catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ finally {
+ return pda;
+ }
+ }
+
+ // -----------------
+
+ private String formatRule(final Permission permission, final ProtectionDomain pd) {
+ final CodeSource cs = pd.getCodeSource();
+
+ if ( null == cs ) {
+ return null;
+ }
+ final URL url = cs.getLocation();
+ if( null == url ) {
+ return null;
+ }
+
+ // Remove ProfilingSecurityManager.class codebase from output rule consideration
+ if( url.toString().equals(thisCodeSourceURLString) ) {
+ return null;
+ }
+
+ final StringBuilder sb = new StringBuilder();
+ sb.append("grant codeBase \"");
+ sb.append(url.toString());
+ sb.append("\" {");
+ sb.append("permission ");
+ sb.append(" ");
+ sb.append(permission.getClass().getName());
+ sb.append(" ");
+ sb.append("\"");
+
+ /* Some complex permissions have quoted strings embedded or
+ literal carriage returns that must be escaped. */
+
+ final String permissionName = permission.getName();
+ final String escapedPermissionName = permissionName.replace("\"","\\\"").replace("\r","\\\r");
+
+ sb.append(escapedPermissionName);
+ sb.append("\", ");
+ sb.append("\"");
+ sb.append(permission.getActions());
+ sb.append("\";");
+ sb.append("};");
+ return sb.toString();
+ }
+
+ // -----------------
+
+ /*
+ If the rule has been seen during this runtime invocation, do not print it again.
+ */
+ private boolean isCached(final String candidate) {
+ synchronized(cacheList) {
+ for(String s : cacheList) {
+ if( s.equals(candidate) ) {
+ return true;
+ }
+ }
+ cacheList.add(candidate);
+ }
+ return false;
+ }
+
+ // -----------------
+
+ @Override
+ public String toString() {
+ return "SecurityManager: " + psmMsg;
+ }
+
+}
\ No newline at end of file
Propchange: incubator/river/jtsk/trunk/src/com/sun/jini/tool/ProfilingSecurityManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java (original)
+++ incubator/river/jtsk/trunk/src/com/sun/jini/tool/classdepend/ClassDepend.java Sun Mar 28 12:57:03 2010
@@ -511,7 +511,7 @@ public class ClassDepend {
* is null.
* @param string
* @param pattern
- * @return
+ * @return True if the Pattern Matches
*/
public boolean matches(String string, Pattern pattern) {
return pattern != null && pattern.matcher(string).matches();
@@ -520,7 +520,7 @@ public class ClassDepend {
/**
* Returns a literal pattern String for the specified String.
* Added to backport Java 1.5 sources to 1.4. adds the functionality
- * of java.util.regex.Patter.quote() method missing from Java 1.4 version
+ * of java.util.regex.Pattern.quote() method missing from Java 1.4 version
*
* This method produces a String that can be used to create a
* Pattern that would match the string s as if it were a literal pattern.
Modified: incubator/river/jtsk/trunk/src/net/jini/core/lookup/ServiceRegistrar.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/net/jini/core/lookup/ServiceRegistrar.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/net/jini/core/lookup/ServiceRegistrar.java (original)
+++ incubator/river/jtsk/trunk/src/net/jini/core/lookup/ServiceRegistrar.java Sun Mar 28 12:57:03 2010
@@ -19,8 +19,9 @@ package net.jini.core.lookup;
import java.rmi.RemoteException;
import java.rmi.MarshalledObject;
-import net.jini.core.event.*;
import net.jini.core.discovery.LookupLocator;
+import net.jini.core.event.EventRegistration;
+import net.jini.core.event.RemoteEventListener;
/**
* Defines the interface to the lookup service. The interface is not a
Modified: incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassLoader.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassLoader.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassLoader.java (original)
+++ incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassLoader.java Sun Mar 28 12:57:03 2010
@@ -239,7 +239,7 @@ public class PreferredClassLoader extend
private final String exportAnnotation;
/** permissions required to access loader through public API */
- private final Permissions permissions;
+ private final PermissionCollection permissions;
/** security context for loading classes and resources */
private final AccessControlContext acc;
@@ -445,7 +445,7 @@ public class PreferredClassLoader extend
final boolean requireDlPerm)
{
/* ensure caller has permission to access all urls */
- Permissions perms = new Permissions();
+ PermissionCollection perms = new Permissions();
addPermissionsForURLs(urls, perms, false);
checkPermissions(perms);
@@ -1038,7 +1038,7 @@ public class PreferredClassLoader extend
* Check that the current access control context has all of the
* given permissions.
*/
- private static void checkPermissions(Permissions perms) {
+ private static void checkPermissions(PermissionCollection perms) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) { // should never be null?
Enumeration en = perms.elements();
Modified: incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java (original)
+++ incubator/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java Sun Mar 28 12:57:03 2010
@@ -18,10 +18,8 @@
package net.jini.loader.pref;
-import com.sun.jini.action.GetPropertyAction;
import com.sun.jini.logging.Levels;
import com.sun.jini.logging.LogUtil;
-import java.io.FilePermission;
import java.io.IOException;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
@@ -30,15 +28,14 @@ import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
import java.net.URL;
-import java.net.URLConnection;
import java.net.URLClassLoader;
-import java.rmi.server.RMIClassLoader;
import java.rmi.server.RMIClassLoaderSpi;
import java.security.AccessController;
-import java.security.CodeSource;
import java.security.Permission;
+import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.PrivilegedAction;
+import java.security.Security;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
@@ -49,7 +46,6 @@ import java.util.WeakHashMap;
import java.util.logging.Logger;
import java.util.logging.Level;
import net.jini.loader.ClassAnnotation;
-import net.jini.loader.DownloadPermission;
/**
* An <code>RMIClassLoader</code> provider that supports preferred
@@ -220,8 +216,9 @@ import net.jini.loader.DownloadPermissio
*
* </table>
**/
+@SuppressWarnings("unchecked")
public class PreferredClassProvider extends RMIClassLoaderSpi {
-
+
/** encodings for primitive array class element types */
private static final String PRIMITIVE_TYPES = "BCDFIJSZ";
@@ -237,35 +234,70 @@ public class PreferredClassProvider exte
private static final Permission getClassLoaderPermission =
new RuntimePermission("getClassLoader");
-
+
/**
- * value of "java.rmi.server.codebase" property, as cached at class
- * initialization time. It may contain malformed URLs.
+ * value of "java.rmi.server.codebase" property, was cached at class
+ * initialization time, now lazy loaded as required and cached at
+ * runtime. It may contain malformed URLs.
*/
- private static String codebaseProperty = null;
- static {
- String prop = (String) AccessController.doPrivileged(
- new GetPropertyAction("java.rmi.server.codebase"));
+ private static volatile String codebaseProperty = null;
+
+ private static String getCodebaseProperty() {
+// String prop = (String) AccessController.doPrivileged(
+// new GetPropertyAction("java.rmi.server.codebase"));
+ if (codebaseProperty != null) return codebaseProperty;
+ String prop = null;
+ try{
+ prop = (String) AccessController.doPrivileged(
+ new PrivilegedAction() {
+ public Object run() {
+ String value = Security.getProperty("java.rmi.server.codebase");
+ return value;
+ }
+ });
+ } catch (SecurityException ex){
+ logger.log(Level.FINE, "unable to retrieve property:" +
+ " java.rmi.server.codebase", ex);
+ }
if (prop != null && prop.trim().length() > 0) {
+ // Don't care about atomic operation, if intervening thread
+ // updates, it just get's updated again.
codebaseProperty = prop;
+ return prop;
}
+ return codebaseProperty;
}
/** table of "local" class loaders */
private static final Map localLoaders =
Collections.synchronizedMap(new WeakHashMap());
- static {
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- for (ClassLoader loader = ClassLoader.getSystemClassLoader();
- loader != null;
- loader = loader.getParent())
- {
- localLoaders.put(loader, null);
- }
- return null;
- }
- });
+
+ /**
+ * Return true if the given loader is the system class loader or
+ * its parent (i.e. the loader for installed extensions) or the null
+ * class loader
+ */
+ private static boolean isLocalLoader(ClassLoader loader) {
+ if (localLoaders.isEmpty()) {
+ try{
+ AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ for (ClassLoader loader = ClassLoader.getSystemClassLoader();
+ loader != null;
+ loader = loader.getParent())
+ {
+ localLoaders.put(loader, null);
+ }
+ return null;
+ }
+ });
+ }catch (SecurityException ex) {
+ logger.logp(Level.FINE, "net.jini.loader.pref.PreferredClassProvider",
+ "isLocalLoader(ClassLoader loader)" ,"unable to retrieve" +
+ " System ClassLoader", ex);
+ }
+ }
+ return (loader == null || localLoaders.containsKey(loader));
}
/**
@@ -324,9 +356,9 @@ public class PreferredClassProvider exte
**/
protected PreferredClassProvider(boolean requireDlPerm) {
SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkCreateClassLoader();
- }
+ if (sm != null) {
+ sm.checkCreateClassLoader();
+ }
this.requireDlPerm = requireDlPerm;
initialized = true;
}
@@ -765,7 +797,7 @@ public class PreferredClassProvider exte
**/
protected String getClassAnnotation(ClassLoader loader) {
checkInitialized();
- return codebaseProperty;
+ return getCodebaseProperty();
}
/**
@@ -801,7 +833,7 @@ public class PreferredClassProvider exte
if (check) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
- Permissions perms = new Permissions();
+ PermissionCollection perms = new Permissions();
for (int i = 0; i < urls.length; i++) {
Permission p =
urls[i].openConnection().getPermission();
@@ -838,14 +870,7 @@ public class PreferredClassProvider exte
}
}
- /**
- * Return true if the given loader is the system class loader or
- * its parent (i.e. the loader for installed extensions) or the null
- * class loader
- */
- private static boolean isLocalLoader(ClassLoader loader) {
- return (loader == null || localLoaders.containsKey(loader));
- }
+
/**
* Provides the implementation for {@link
Modified: incubator/river/jtsk/trunk/src/net/jini/security/GrantPermission.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/net/jini/security/GrantPermission.java?rev=928394&r1=928393&r2=928394&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/net/jini/security/GrantPermission.java (original)
+++ incubator/river/jtsk/trunk/src/net/jini/security/GrantPermission.java Sun Mar 28 12:57:03 2010
@@ -41,7 +41,6 @@ import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
-import net.jini.security.policy.DynamicPolicy;
/**
* Permission required to dynamically grant permissions by security policy
@@ -676,7 +675,7 @@ public final class GrantPermission exten
private static class Implier {
private final PermissionCollection perms = new Permissions();
- private final ArrayList unresolved = new ArrayList();
+ private final List unresolved =new ArrayList();
void add(GrantPermission gp) {
for (int i = 0; i < gp.grants.length; i++) {
@@ -753,7 +752,8 @@ public final class GrantPermission exten
* @serial include
*/
static class GrantPermissionCollection extends PermissionCollection {
-
+ // All access is synchronized through GrantPermissionCollection
+ // Nothing within should use synchronization
private static final long serialVersionUID = 8227621799817733985L;
/**