vhardy 02/05/03 09:42:58 Modified: . build.xml test-resources/org/apache/batik/bridge IWasLoaded.jar IWasLoadedToo.jar unitTesting.xml Added: test-resources/org/apache/batik/bridge IWasLoaded.java IWasLoaded.mf IWasLoadedToo.java IWasLoadedToo.mf JarCheckPermissionsDenied.jar JarCheckPermissionsDenied.java JarCheckPermissionsDenied.mf JarCheckPermissionsGranted.jar JarCheckPermissionsGranted.java JarCheckPermissionsGranted.mf jarCheckConstrain.svg jarCheckLoad.svg jarCheckNoConstrain.svg jarCheckNoLoad.svg jarCheckPermissionsDenied.svg jarCheckPermissionsGranted.svg Log: Added jar security unit testing Revision Changes Path 1.111 +58 -8 xml-batik/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/xml-batik/build.xml,v retrieving revision 1.110 retrieving revision 1.111 diff -u -r1.110 -r1.111 --- build.xml 3 May 2002 06:52:58 -0000 1.110 +++ build.xml 3 May 2002 16:42:58 -0000 1.111 @@ -47,7 +47,7 @@ [win32] .\build.bat help - $Id: build.xml,v 1.110 2002/05/03 06:52:58 vhardy Exp $ + $Id: build.xml,v 1.111 2002/05/03 16:42:58 vhardy Exp $ --> @@ -248,13 +248,17 @@ </javac> </target> - <!-- Builds Jar Files needed for test purposes. This is done in the samples directory --> - <target name="testjar" depends="security2.jar" /> + <!-- Builds Jar Files needed for test purposes. Note that compilation of jars is done --> + <!-- in a different directory than the usual 'classes' directory ({$dest}). --> + <!-- Note that this is needed to avoid having the class files in the classes --> + <!-- subdirectory, which interferes with the tests, because classes in that directory --> + <!-- are loaded first in the development version. --> + <target name="testjars" depends="security2.jar, IWasLoaded.jar, IWasLoadedToo.jar, JarCheckPermissionsGranted.jar, JarCheckPermissionsDenied.jar" /> - <target name ="compilesamples" + <target name ="compiletestjars" depends ="compile" - description="Compiles the source files for the samples scripts"> - <mkdir dir="${dest}/tmp"/> + description="Compiles the source files for the samples scripts and the test-resources"> + <mkdir dir="${testresources}/classes"/> <echo message="debug ${debug}, optimize ${optimize}, deprecation ${deprecation}"/> @@ -267,9 +271,19 @@ <path refid="libs-build-classpath"/> </classpath> </javac> + + <javac srcdir="${testresources}" destdir="${testresources}/classes" deprecation="${deprecation}" + debug="${debug}" optimize="${optimize}" > + <classpath> + <pathelement location="${dest}" /> + <pathelement location="${testresources}/classes" /> + <path refid="libs-classpath"/> + <path refid="libs-build-classpath"/> + </classpath> + </javac> </target> - <target name="security2.jar" depends="compilesamples" > + <target name="security2.jar" depends="compiletestjars" > <jar manifest="${samples}/tests/resources/java/resources/com/untrusted/script/security2.mf" jarfile="samples/tests/spec/scripting/security2.jar"> <fileset dir="${samples}/tests/resources/java/classes"> @@ -278,6 +292,42 @@ </jar> </target> + <target name="IWasLoaded.jar" depends="compiletestjars" > + <jar manifest="${testresources}/org/apache/batik/bridge/IWasLoaded.mf" + jarfile="${testresources}/org/apache/batik/bridge/IWasLoaded.jar"> + <fileset dir="${testresources}/classes"> + <include name="org/apache/batik/bridge/IWasLoaded*.class"/> + </fileset> + </jar> + </target> + + <target name="IWasLoadedToo.jar" depends="compiletestjars" > + <jar manifest="${testresources}/org/apache/batik/bridge/IWasLoadedToo.mf" + jarfile="${testresources}/org/apache/batik/bridge/IWasLoadedToo.jar"> + <fileset dir="${testresources}/classes"> + <include name="org/apache/batik/bridge/IWasLoadedToo*.class"/> + </fileset> + </jar> + </target> + + <target name="JarCheckPermissionsDenied.jar" depends="compiletestjars" > + <jar manifest="${testresources}/org/apache/batik/bridge/JarCheckPermissionsDenied.mf" + jarfile="${testresources}/org/apache/batik/bridge/JarCheckPermissionsDenied.jar"> + <fileset dir="${testresources}/classes"> + <include name="org/apache/batik/bridge/JarCheckPermissionsDenied*.class"/> + </fileset> + </jar> + </target> + + <target name="JarCheckPermissionsGranted.jar" depends="compiletestjars" > + <jar manifest="${testresources}/org/apache/batik/bridge/JarCheckPermissionsGranted.mf" + jarfile="${testresources}/org/apache/batik/bridge/JarCheckPermissionsGranted.jar"> + <fileset dir="${testresources}/classes"> + <include name="org/apache/batik/bridge/JarCheckPermissionsGranted*.class"/> + </fileset> + </jar> + </target> + <target name ="compile" depends ="init" @@ -872,7 +922,7 @@ </target> <target name="regard" - depends="compiletest, testdirs" + depends="compiletest, testdirs, testjars" description="Runs test suite whose file or uri is passed as an input"> <java fork="yes" classname="${class-prefix}.test.xml.XMLTestSuiteRunner"> 1.2 +15 -11 xml-batik/test-resources/org/apache/batik/bridge/IWasLoaded.jar <<Binary file>> 1.2 +10 -10 xml-batik/test-resources/org/apache/batik/bridge/IWasLoadedToo.jar <<Binary file>> 1.2 +29 -1 xml-batik/test-resources/org/apache/batik/bridge/unitTesting.xml Index: unitTesting.xml =================================================================== RCS file: /home/cvs/xml-batik/test-resources/org/apache/batik/bridge/unitTesting.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- unitTesting.xml 3 May 2002 12:28:53 -0000 1.1 +++ unitTesting.xml 3 May 2002 16:42:58 -0000 1.2 @@ -8,7 +8,7 @@ <!-- ========================================================================= --> <!-- @author [EMAIL PROTECTED] --> -<!-- @version $Id: unitTesting.xml,v 1.1 2002/05/03 12:28:53 vhardy Exp $ --> +<!-- @version $Id: unitTesting.xml,v 1.2 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <testSuite id="bridge.unitTesting" name="org.apache.batik.bridge package - Unit Testing"> @@ -42,6 +42,34 @@ </test> <test id="ecmaCheckNoConstrain"> + <property name="Constrain" class="java.lang.Boolean" + value="false" /> + </test> + + <test id="jarCheckPermissionsDenied"> + <property name="Secure" class="java.lang.Boolean" value="true" /> + </test> + + <test id="jarCheckPermissionsGranted"> + <property name="Secure" class="java.lang.Boolean" value="false" /> + </test> + + <test id="jarCheckNoLoad"> + <property name="Scripts" class="java.lang.String" + value="text/ecmascript" /> + </test> + + <test id="jarCheckLoad"> + <property name="Scripts" class="java.lang.String" + value="application/java-archive" /> + </test> + + <test id="jarCheckConstrain"> + <property name="Constrain" class="java.lang.Boolean" + value="true" /> + </test> + + <test id="jarCheckNoConstrain"> <property name="Constrain" class="java.lang.Boolean" value="false" /> </test> 1.1 xml-batik/test-resources/org/apache/batik/bridge/IWasLoaded.java Index: IWasLoaded.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.batik.bridge; import org.w3c.dom.*; import org.apache.batik.script.ScriptHandler; import org.apache.batik.script.Window; /** * If this script is loaded by jarCheckNoLoad.svg, it will mark * the test result as failed. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> * @version $Id: IWasLoaded.java,v 1.1 2002/05/03 16:42:58 vhardy Exp $ */ public class IWasLoaded implements ScriptHandler { public void run(final Document document, final Window win){ Element result = document.getElementById("testResult"); result.setAttributeNS(null, "result", "failed"); result.setAttributeNS(null, "errorCode", "IWasLoaded.jar should not have been loaded"); } } 1.1 xml-batik/test-resources/org/apache/batik/bridge/IWasLoaded.mf Index: IWasLoaded.mf =================================================================== Manifest-Version: 1.0 Script-Handler: org.apache.batik.bridge.IWasLoaded 1.1 xml-batik/test-resources/org/apache/batik/bridge/IWasLoadedToo.java Index: IWasLoadedToo.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.batik.bridge; import org.w3c.dom.*; import org.apache.batik.script.ScriptHandler; import org.apache.batik.script.Window; /** * If this script is loaded by jarCheckLoad.svg, it will mark * the test result as passed. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> * @version $Id: IWasLoadedToo.java,v 1.1 2002/05/03 16:42:58 vhardy Exp $ */ public class IWasLoadedToo implements ScriptHandler { public void run(final Document document, final Window win){ Element result = document.getElementById("testResult"); result.setAttributeNS(null, "result", "passed"); } } 1.1 xml-batik/test-resources/org/apache/batik/bridge/IWasLoadedToo.mf Index: IWasLoadedToo.mf =================================================================== Manifest-Version: 1.0 Script-Handler: org.apache.batik.bridge.IWasLoadedToo 1.1 xml-batik/test-resources/org/apache/batik/bridge/JarCheckPermissionsDenied.jar <<Binary file>> 1.1 xml-batik/test-resources/org/apache/batik/bridge/JarCheckPermissionsDenied.java Index: JarCheckPermissionsDenied.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.batik.bridge; import org.apache.batik.script.ScriptHandler; import org.apache.batik.script.Window; import org.apache.batik.dom.svg.SVGOMDocument; import org.w3c.dom.*; import org.w3c.dom.events.*; import java.awt.AWTPermission; import java.io.FilePermission; import java.io.SerializablePermission; import java.lang.reflect.ReflectPermission; import java.net.NetPermission; import java.net.SocketPermission; import java.net.URL; import java.security.AllPermission; import java.security.Permission; import java.security.SecurityPermission; import java.sql.SQLPermission; import java.util.PropertyPermission; import java.util.Vector; import javax.sound.sampled.AudioPermission; /** * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> * @version $Id: JarCheckPermissionsDenied.java,v 1.1 2002/05/03 16:42:58 vhardy Exp $ */ public class JarCheckPermissionsDenied implements ScriptHandler { public static final String svgNS = "http://www.w3.org/2000/svg"; public static final String testNS = "http://xml.apache.org/batik/test"; /** * Path for the file tested with FilePermission */ public static final String testedPath = "build.sh"; /** * Host which is used for testing */ public static final String testedHost = "nagoya.apache.org:8080"; /** * Table of Permissions which will be tested. */ protected static Object[][] basePermissions = { {"AllPermission", new AllPermission()}, {"FilePermission read", new FilePermission(testedPath, "read")}, {"FilePermission write", new FilePermission(testedPath, "write")}, {"FilePermission execute", new FilePermission(testedPath, "execute")}, {"FilePermission delete", new FilePermission(testedPath, "delete")}, // 1.4 {"ServicePermission", new ServicePermission("[EMAIL PROTECTED]", "initiate")}, {"SocketPermission accept", new SocketPermission(testedHost, "accept")}, {"SocketPermission connect", new SocketPermission(testedHost, "connect")}, {"SocketPermission listen", new SocketPermission(testedHost, "listen")}, {"SocketPermission resolve", new SocketPermission(testedHost, "resolve")}, {"AudioPermission play", new AudioPermission("play")}, {"AudioPermission record", new AudioPermission("record")}, {"AWTPermission accessClipboard", new AWTPermission("accessClipboard")}, {"AWTPermission accessEventQueue", new AWTPermission("accessEventQueue")}, {"AWTPermission listenToAllAWTEvents", new AWTPermission("listenToAllAWTEvents")}, {"AWTPermission showWindowWithoutWarningBanner", new AWTPermission("showWindowWithoutWarningBanner")}, {"AWTPermission readDisplayPixels", new AWTPermission("readDisplayPixels")}, {"AWTPermission createRobot", new AWTPermission("createRobot")}, {"AWTPermission fullScreenExclusive", new AWTPermission("fullScreenExclusive")}, // 1.4 {"DelegationPermission", new DelegationPermission()}, // 1.4 {"LoggingPermission", new LoggingPermission("control")}, {"NetPermission setDefaultAuthenticator", new NetPermission("setDefaultAuthenticator")}, {"NetPermission requestPasswordAuthentication", new NetPermission("requestPasswordAuthentication")}, {"NetPermission specifyStreamHandler", new NetPermission("specifyStreamHandler")}, {"PropertyPermission java.home read", new PropertyPermission("java.home", "read")}, {"PropertyPermission java.home write", new PropertyPermission("java.home", "write")}, {"ReflectPermission", new ReflectPermission("suppressAccessChecks")}, {"RuntimePermission createClassLoader", new RuntimePermission("createClassLoader")}, {"RuntimePermission getClassLoader", new RuntimePermission("getClassLoader")}, {"RuntimePermission setContextClassLoader", new RuntimePermission("setContextClassLoader")}, {"RuntimePermission setSecurityManager", new RuntimePermission("setSecurityManager")}, {"RuntimePermission createSecurityManager", new RuntimePermission("createSecurityManager")}, {"RuntimePermission exitVM", new RuntimePermission("exitVM")}, {"RuntimePermission shutdownHooks", new RuntimePermission("shutdownHooks")}, {"RuntimePermission setFactory", new RuntimePermission("setFactory")}, {"RuntimePermission setIO", new RuntimePermission("setIO")}, {"RuntimePermission modifyThread", new RuntimePermission("modifyThread")}, {"RuntimePermission stopThread", new RuntimePermission("stopThread")}, {"RuntimePermission modifyThreadGroup", new RuntimePermission("modifyThreadGroup")}, {"RuntimePermission getProtectionDomain", new RuntimePermission("getProtectionDomain")}, {"RuntimePermission readFileDescriptor", new RuntimePermission("readFileDescriptor")}, {"RuntimePermission writeFileDescriptor", new RuntimePermission("writeFileDescriptor")}, {"RuntimePermission loadLibrary.{library name}", new RuntimePermission("loadLibrary.{library name}")}, {"RuntimePermission accessClassInPackage.java.security", new RuntimePermission("accessClassInPackage.java.security")}, {"RuntimePermission defineClassInPackage.java.lang", new RuntimePermission("defineClassInPackage.java.lang")}, {"RuntimePermission accessDeclaredMembers", new RuntimePermission("accessDeclaredMembers")}, {"RuntimePermission queuePrintJob", new RuntimePermission("queuePrintJob")}, {"SecurityPermission createAccessControlContext", new SerializablePermission("createAccessControlContext")}, {"SecurityPermission getDomainCombiner", new SerializablePermission("getDomainCombiner")}, {"SecurityPermission getPolicy", new SerializablePermission("getPolicy")}, {"SecurityPermission setPolicy", new SerializablePermission("setPolicy")}, {"SecurityPermission setSystemScope", new SerializablePermission("setSystemScope")}, {"SecurityPermission setIdentityPublicKey", new SerializablePermission("setIdentityPublicKey")}, {"SecurityPermission setIdentityInfo", new SerializablePermission("setIdentityInfo")}, {"SecurityPermission addIdentityCertificate", new SerializablePermission("addIdentityCertificate")}, {"SecurityPermission removeIdentityCertificate", new SerializablePermission("removeIdentityCertificate")}, {"SecurityPermission printIdentity", new SerializablePermission("printIdentity")}, {"SecurityPermission getSignerPrivateKey", new SerializablePermission("getSignerPrivateKey")}, {"SecurityPermission setSignerKeyPair", new SerializablePermission("setSignerKeyPair")}, {"SerializablePermission enableSubclassImplementation", new SerializablePermission("enableSubclassImplementation")}, {"SerializablePermission enableSubstitution", new SerializablePermission("enableSubstitution")}, {"SQLPermission", new SQLPermission("setLog")}, // 1.4 {"SSLPermission setHostnameVerifier", new SSLPermission("setHostnameVerifier")} // 1.4{"SSLPermission getSSLSessionContext", new SSLPermission("getSSLSessionContext")} }; /** * Set of Permissions to test. One is added if the Document is loaded from a host */ private Object[][] permissions; /** * Reference to the rectangles which show the test status */ private Element[] statusRects; /** * Runs this handler. * @param doc The current document. * @param win An object which represents the current viewer. */ public void run(final Document document, final Window win){ int nGrantedTmp = 0; // // If the document is loaded over the network, check that the // class has permission to access the server // URL docURL = ((SVGOMDocument)document).getURLObject(); if (docURL != null && docURL.getHost() != null && !"".equals(docURL.getHost())) { permissions = new Object[basePermissions.length + 3][2]; System.arraycopy(basePermissions, 0, permissions, 3, basePermissions.length); String docHost = docURL.getHost(); if (docURL.getPort() != -1) { docHost += ":" + docURL.getPort(); } permissions[0][0] = "SocketPermission accept " + docHost; permissions[0][1] = new SocketPermission(docHost, "accept"); permissions[1][0] = "SocketPermission connect " + docHost; permissions[1][1] = new SocketPermission(docHost, "connect"); permissions[2][0] = "SocketPermission resolve " + docHost; permissions[2][1] = new SocketPermission(docHost, "resolve"); nGrantedTmp = 3; } else { permissions = basePermissions; } final int nGranted = nGrantedTmp; EventTarget root = (EventTarget)document.getDocumentElement(); root.addEventListener("SVGLoad", new EventListener() { public void handleEvent(Event evt){ SecurityManager sm = System.getSecurityManager(); int successCnt = 0; Vector unexpectedGrants = new Vector(); Vector unexpectedDenial = new Vector(); int unexpectedDenialCnt = 0; int unexpectedGrantsCnt = 0; if (sm == null){ for (int i=0; i<nGranted; i++) { successCnt++; } for (int i=nGranted; i<permissions.length; i++) { unexpectedGrants.add(permissions[i][0]); unexpectedGrantsCnt++; } } else { for (int i=0; i<nGranted; i++) { Permission p = (Permission)permissions[i][1]; try { sm.checkPermission(p); System.out.println(">>>> Permision : " + p + " was granted"); successCnt++; } catch (SecurityException se){ unexpectedDenial.add(permissions[i][0]); unexpectedDenialCnt++; } } for (int i=nGranted; i<permissions.length; i++) { Permission p = (Permission)permissions[i][1]; try { sm.checkPermission(p); System.out.println(">>>> Permision : " + p + " was granted"); unexpectedGrants.add(permissions[i][0]); unexpectedGrantsCnt++; } catch (SecurityException se){ successCnt++; } } } // Update the test's metadata Element result = document.getElementById("testResult"); if ( successCnt == permissions.length ) { result.setAttributeNS(null, "result", "passed"); } else { System.out.println("test failed: " + unexpectedGrantsCnt + " / " + unexpectedDenialCnt); result.setAttributeNS(null, "result", "failed"); result.setAttributeNS(null, "errorCode", "unexpected.grants.or.denials"); String unexpectedGrantsString = ""; String unexpectedDenialString = ""; for (int i=0; i<unexpectedGrantsCnt; i++) { unexpectedGrantsString += unexpectedGrants.elementAt(i).toString(); } for (int i=0; i<unexpectedDenialCnt; i++) { unexpectedDenialString += unexpectedDenial.elementAt(i).toString(); } System.out.println("unexpected.grants : " + unexpectedGrantsString); Element entry = null; entry = document.createElementNS(testNS, "errorDescriptiongEntry"); entry.setAttributeNS(null, "id", "unexpected.grants.count"); entry.setAttributeNS(null, "value", "" + unexpectedGrantsCnt); result.appendChild(entry); entry = document.createElementNS(testNS, "errorDescriptionEntry"); entry.setAttributeNS(null, "id", "unexpected.grants"); entry.setAttributeNS(null, "value", unexpectedGrantsString); result.appendChild(entry); entry = document.createElementNS(testNS, "errorDescriptiongEntry"); entry.setAttributeNS(null, "id", "unexpected.denials.count"); entry.setAttributeNS(null, "value", "" + unexpectedDenialCnt); result.appendChild(entry); System.out.println("unexpected.denials : " + unexpectedDenialString); entry = document.createElementNS(testNS, "errorDescriptionEntry"); entry.setAttributeNS(null, "id", "unexpected.denials"); entry.setAttributeNS(null, "value", unexpectedDenialString); result.appendChild(entry); } } }, false); } } 1.1 xml-batik/test-resources/org/apache/batik/bridge/JarCheckPermissionsDenied.mf Index: JarCheckPermissionsDenied.mf =================================================================== Manifest-Version: 1.0 Script-Handler: org.apache.batik.bridge.JarCheckPermissionsDenied 1.1 xml-batik/test-resources/org/apache/batik/bridge/JarCheckPermissionsGranted.jar <<Binary file>> 1.1 xml-batik/test-resources/org/apache/batik/bridge/JarCheckPermissionsGranted.java Index: JarCheckPermissionsGranted.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.batik.bridge; import org.apache.batik.script.ScriptHandler; import org.apache.batik.script.Window; import org.apache.batik.dom.svg.SVGOMDocument; import org.w3c.dom.*; import org.w3c.dom.events.*; import java.awt.AWTPermission; import java.io.FilePermission; import java.io.SerializablePermission; import java.lang.reflect.ReflectPermission; import java.net.NetPermission; import java.net.SocketPermission; import java.net.URL; import java.security.AllPermission; import java.security.Permission; import java.security.SecurityPermission; import java.sql.SQLPermission; import java.util.PropertyPermission; import java.util.Vector; import javax.sound.sampled.AudioPermission; /** * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> * @version $Id: JarCheckPermissionsGranted.java,v 1.1 2002/05/03 16:42:58 vhardy Exp $ */ public class JarCheckPermissionsGranted implements ScriptHandler { public static final String svgNS = "http://www.w3.org/2000/svg"; public static final String testNS = "http://xml.apache.org/batik/test"; /** * Path for the file tested with FilePermission */ public static final String testedPath = "build.sh"; /** * Host which is used for testing */ public static final String testedHost = "nagoya.apache.org:8080"; /** * Table of Permissions which will be tested. */ protected static Object[][] basePermissions = { {"AllPermission", new AllPermission()}, {"FilePermission read", new FilePermission(testedPath, "read")}, {"FilePermission write", new FilePermission(testedPath, "write")}, {"FilePermission execute", new FilePermission(testedPath, "execute")}, {"FilePermission delete", new FilePermission(testedPath, "delete")}, // 1.4 {"ServicePermission", new ServicePermission("[EMAIL PROTECTED]", "initiate")}, {"SocketPermission accept", new SocketPermission(testedHost, "accept")}, {"SocketPermission connect", new SocketPermission(testedHost, "connect")}, {"SocketPermission listen", new SocketPermission(testedHost, "listen")}, {"SocketPermission resolve", new SocketPermission(testedHost, "resolve")}, {"AudioPermission play", new AudioPermission("play")}, {"AudioPermission record", new AudioPermission("record")}, {"AWTPermission accessClipboard", new AWTPermission("accessClipboard")}, {"AWTPermission accessEventQueue", new AWTPermission("accessEventQueue")}, {"AWTPermission listenToAllAWTEvents", new AWTPermission("listenToAllAWTEvents")}, {"AWTPermission showWindowWithoutWarningBanner", new AWTPermission("showWindowWithoutWarningBanner")}, {"AWTPermission readDisplayPixels", new AWTPermission("readDisplayPixels")}, {"AWTPermission createRobot", new AWTPermission("createRobot")}, {"AWTPermission fullScreenExclusive", new AWTPermission("fullScreenExclusive")}, // 1.4 {"DelegationPermission", new DelegationPermission()}, // 1.4 {"LoggingPermission", new LoggingPermission("control")}, {"NetPermission setDefaultAuthenticator", new NetPermission("setDefaultAuthenticator")}, {"NetPermission requestPasswordAuthentication", new NetPermission("requestPasswordAuthentication")}, {"NetPermission specifyStreamHandler", new NetPermission("specifyStreamHandler")}, {"PropertyPermission java.home read", new PropertyPermission("java.home", "read")}, {"PropertyPermission java.home write", new PropertyPermission("java.home", "write")}, {"ReflectPermission", new ReflectPermission("suppressAccessChecks")}, {"RuntimePermission createClassLoader", new RuntimePermission("createClassLoader")}, {"RuntimePermission getClassLoader", new RuntimePermission("getClassLoader")}, {"RuntimePermission setContextClassLoader", new RuntimePermission("setContextClassLoader")}, {"RuntimePermission setSecurityManager", new RuntimePermission("setSecurityManager")}, {"RuntimePermission createSecurityManager", new RuntimePermission("createSecurityManager")}, {"RuntimePermission exitVM", new RuntimePermission("exitVM")}, {"RuntimePermission shutdownHooks", new RuntimePermission("shutdownHooks")}, {"RuntimePermission setFactory", new RuntimePermission("setFactory")}, {"RuntimePermission setIO", new RuntimePermission("setIO")}, {"RuntimePermission modifyThread", new RuntimePermission("modifyThread")}, {"RuntimePermission stopThread", new RuntimePermission("stopThread")}, {"RuntimePermission modifyThreadGroup", new RuntimePermission("modifyThreadGroup")}, {"RuntimePermission getProtectionDomain", new RuntimePermission("getProtectionDomain")}, {"RuntimePermission readFileDescriptor", new RuntimePermission("readFileDescriptor")}, {"RuntimePermission writeFileDescriptor", new RuntimePermission("writeFileDescriptor")}, {"RuntimePermission loadLibrary.{library name}", new RuntimePermission("loadLibrary.{library name}")}, {"RuntimePermission accessClassInPackage.java.security", new RuntimePermission("accessClassInPackage.java.security")}, {"RuntimePermission defineClassInPackage.java.lang", new RuntimePermission("defineClassInPackage.java.lang")}, {"RuntimePermission accessDeclaredMembers", new RuntimePermission("accessDeclaredMembers")}, {"RuntimePermission queuePrintJob", new RuntimePermission("queuePrintJob")}, {"SecurityPermission createAccessControlContext", new SerializablePermission("createAccessControlContext")}, {"SecurityPermission getDomainCombiner", new SerializablePermission("getDomainCombiner")}, {"SecurityPermission getPolicy", new SerializablePermission("getPolicy")}, {"SecurityPermission setPolicy", new SerializablePermission("setPolicy")}, {"SecurityPermission setSystemScope", new SerializablePermission("setSystemScope")}, {"SecurityPermission setIdentityPublicKey", new SerializablePermission("setIdentityPublicKey")}, {"SecurityPermission setIdentityInfo", new SerializablePermission("setIdentityInfo")}, {"SecurityPermission addIdentityCertificate", new SerializablePermission("addIdentityCertificate")}, {"SecurityPermission removeIdentityCertificate", new SerializablePermission("removeIdentityCertificate")}, {"SecurityPermission printIdentity", new SerializablePermission("printIdentity")}, {"SecurityPermission getSignerPrivateKey", new SerializablePermission("getSignerPrivateKey")}, {"SecurityPermission setSignerKeyPair", new SerializablePermission("setSignerKeyPair")}, {"SerializablePermission enableSubclassImplementation", new SerializablePermission("enableSubclassImplementation")}, {"SerializablePermission enableSubstitution", new SerializablePermission("enableSubstitution")}, {"SQLPermission", new SQLPermission("setLog")}, // 1.4 {"SSLPermission setHostnameVerifier", new SSLPermission("setHostnameVerifier")} // 1.4{"SSLPermission getSSLSessionContext", new SSLPermission("getSSLSessionContext")} }; /** * Set of Permissions to test. One is added if the Document is loaded from a host */ private Object[][] permissions; /** * Reference to the rectangles which show the test status */ private Element[] statusRects; /** * Runs this handler. * @param doc The current document. * @param win An object which represents the current viewer. */ public void run(final Document document, final Window win){ int nGrantedTmp = 0; // // If the document is loaded over the network, check that the // class has permission to access the server // URL docURL = ((SVGOMDocument)document).getURLObject(); if (docURL != null && docURL.getHost() != null && !"".equals(docURL.getHost())) { permissions = new Object[basePermissions.length + 3][2]; System.arraycopy(basePermissions, 0, permissions, 3, basePermissions.length); String docHost = docURL.getHost(); if (docURL.getPort() != -1) { docHost += ":" + docURL.getPort(); } permissions[0][0] = "SocketPermission accept " + docHost; permissions[0][1] = new SocketPermission(docHost, "accept"); permissions[1][0] = "SocketPermission connect " + docHost; permissions[1][1] = new SocketPermission(docHost, "connect"); permissions[2][0] = "SocketPermission resolve " + docHost; permissions[2][1] = new SocketPermission(docHost, "resolve"); nGrantedTmp = 3; } else { permissions = basePermissions; } final int nGranted = nGrantedTmp; EventTarget root = (EventTarget)document.getDocumentElement(); root.addEventListener("SVGLoad", new EventListener() { public void handleEvent(Event evt){ SecurityManager sm = System.getSecurityManager(); int successCnt = 0; Vector unexpectedGrants = new Vector(); Vector unexpectedDenial = new Vector(); int unexpectedDenialCnt = 0; int unexpectedGrantsCnt = 0; if (sm == null){ for (int i=0; i<permissions.length; i++) { successCnt++; } } else { for (int i=0; i<permissions.length; i++) { Permission p = (Permission)permissions[i][1]; try { sm.checkPermission(p); successCnt++; } catch (SecurityException se){ unexpectedDenial.add(permissions[i][0]); unexpectedDenialCnt++; } } } // Update the test's metadata Element result = document.getElementById("testResult"); if ( successCnt == permissions.length ) { result.setAttributeNS(null, "result", "passed"); } else { System.out.println("test failed: " + unexpectedGrantsCnt + " / " + unexpectedDenialCnt); result.setAttributeNS(null, "result", "failed"); result.setAttributeNS(null, "errorCode", "unexpected.grants.or.denials"); String unexpectedDenialString = ""; for (int i=0; i<unexpectedDenialCnt; i++) { unexpectedDenialString += unexpectedDenial.elementAt(i).toString(); } Element entry = null; entry = document.createElementNS(testNS, "errorDescriptiongEntry"); entry.setAttributeNS(null, "id", "unexpected.denials.count"); entry.setAttributeNS(null, "value", "" + unexpectedDenialCnt); result.appendChild(entry); System.out.println("unexpected.denials : " + unexpectedDenialString); entry = document.createElementNS(testNS, "errorDescriptionEntry"); entry.setAttributeNS(null, "id", "unexpected.denials"); entry.setAttributeNS(null, "value", unexpectedDenialString); result.appendChild(entry); } } }, false); } } 1.1 xml-batik/test-resources/org/apache/batik/bridge/JarCheckPermissionsGranted.mf Index: JarCheckPermissionsGranted.mf =================================================================== Manifest-Version: 1.0 Script-Handler: org.apache.batik.bridge.JarCheckPermissionsGranted 1.1 xml-batik/test-resources/org/apache/batik/bridge/jarCheckConstrain.svg Index: jarCheckConstrain.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: jarCheckConstrain.svg,v 1.1 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:test="http://xml.apache.org/batik/test" width="450" height="500" viewBox="0 0 450 500"> <test:testResult id="testResult" result="passed" /> <script type="application/java-archive" xlink:href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-batik/test-resources/org/apache/batik/bridge/IWasLoaded.jar" /> </svg> 1.1 xml-batik/test-resources/org/apache/batik/bridge/jarCheckLoad.svg Index: jarCheckLoad.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: jarCheckLoad.svg,v 1.1 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:test="http://xml.apache.org/batik/test" width="450" height="500" viewBox="0 0 450 500"> <test:testResult id="testResult" result="failed" errorCode="IWasLoadedToo.jar should have been loaded"/> <script type="application/java-archive" xlink:href="IWasLoadedToo.jar" /> </svg> 1.1 xml-batik/test-resources/org/apache/batik/bridge/jarCheckNoConstrain.svg Index: jarCheckNoConstrain.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: jarCheckNoConstrain.svg,v 1.1 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:test="http://xml.apache.org/batik/test" width="450" height="500" viewBox="0 0 450 500"> <test:testResult id="testResult" result="failed" errorCode="IWasLoadedToo.jar should have been loaded"/> <script type="application/java-archive" xlink:href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-batik/test-resources/org/apache/batik/bridge/IWasLoadedToo.jar" /> </svg> 1.1 xml-batik/test-resources/org/apache/batik/bridge/jarCheckNoLoad.svg Index: jarCheckNoLoad.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: jarCheckNoLoad.svg,v 1.1 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:test="http://xml.apache.org/batik/test" width="450" height="500" viewBox="0 0 450 500" > <test:testResult id="testResult" result="passed"/> <script type="application/java-archive" xlink:href="IWasLoaded.jar" /> </svg> 1.1 xml-batik/test-resources/org/apache/batik/bridge/jarCheckPermissionsDenied.svg Index: jarCheckPermissionsDenied.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- Checks that access to critical functions is not allowed. --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: jarCheckPermissionsDenied.svg,v 1.1 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:test="http://xml.apache.org/batik/test" width="450" height="500" viewBox="0 0 450 500"> <test:testResult id="testResult" /> <script type="application/java-archive" xlink:href="jarCheckPermissionsDenied.jar" /> </svg> 1.1 xml-batik/test-resources/org/apache/batik/bridge/jarCheckPermissionsGranted.svg Index: jarCheckPermissionsGranted.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: jarCheckPermissionsGranted.svg,v 1.1 2002/05/03 16:42:58 vhardy Exp $ --> <!-- ========================================================================= --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:test="http://xml.apache.org/batik/test" width="450" height="500" viewBox="0 0 450 500"> <test:testResult id="testResult" result="failure"/> <script type="application/java-archive" xlink:href="jarCheckPermissionsGranted.jar" /> </svg>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]