vhardy 02/05/02 05:40:59
Modified: sources/org/apache/batik/bridge
BaseScriptingEnvironment.java
Added: sources/org/apache/batik/bridge DocumentJarClassLoader.java
Log:
Made linked jar security consistent with ECMA script security. Jar scripts can only
connect back to the document server, never to the script/jar server in case the
jar/script server is different from that of the document
Revision Changes Path
1.8 +4 -3
xml-batik/sources/org/apache/batik/bridge/BaseScriptingEnvironment.java
Index: BaseScriptingEnvironment.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/bridge/BaseScriptingEnvironment.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- BaseScriptingEnvironment.java 30 Apr 2002 08:45:14 -0000 1.7
+++ BaseScriptingEnvironment.java 2 May 2002 12:40:59 -0000 1.8
@@ -14,7 +14,6 @@
import java.io.StringReader;
import java.net.URL;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashSet;
@@ -56,7 +55,7 @@
* This class is the base class for SVG scripting.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: BaseScriptingEnvironment.java,v 1.7 2002/04/30 08:45:14 vhardy Exp
$
+ * @version $Id: BaseScriptingEnvironment.java,v 1.8 2002/05/02 12:40:59 vhardy Exp
$
*/
public class BaseScriptingEnvironment {
/**
@@ -247,8 +246,10 @@
url = new URL(url, href);
checkCompatibleScriptURL(type, url);
+ URL docURL = ((SVGOMDocument)document).getURLObject();
- URLClassLoader cll = new URLClassLoader(new URL[] { url });
+ DocumentJarClassLoader cll
+ = new DocumentJarClassLoader(url, docURL);
// Get the 'Script-Handler' entry in the manifest.
url = cll.findResource("META-INF/MANIFEST.MF");
1.1
xml-batik/sources/org/apache/batik/bridge/DocumentJarClassLoader.java
Index: DocumentJarClassLoader.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 java.io.File;
import java.io.FilePermission;
import java.net.SocketPermission;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.Permission;
import java.security.Policy;
import java.security.SecureClassLoader;
import java.security.CodeSource;
import java.security.PermissionCollection;
import java.security.PrivilegedAction;
import java.util.Enumeration;
/**
* This <tt>ClassLoader</tt> implementation only grants permission to
* connect back to the server from where the document referencing the
* jar file was loaded.
*
* A <tt>URLClassLoader</tt> extension is needed in case the user
* allows linked jar files to come from a different origin than
* the document referencing them.
*
* @author <a mailto="[EMAIL PROTECTED]">Vincent Hardy</a>
* @version $Id: DocumentJarClassLoader.java,v 1.1 2002/05/02 12:40:59 vhardy Exp $
*/
public class DocumentJarClassLoader extends URLClassLoader {
/**
* CodeSource for the Document which referenced the Jar file
* @see #getPermissions
*/
protected CodeSource documentCodeSource = null;
/**
* Constructor
*/
public DocumentJarClassLoader(URL jarURL,
URL documentURL){
super(new URL[]{jarURL});
if (documentURL != null) {
documentCodeSource = new CodeSource(documentURL, null);
}
}
/**
* Returns the permissions for the given codesource object.
* The implementation of this method first gets the permissions
* granted by the policy, and then adds additional permissions
* based on the URL of the codesource.
* <p>
* Then, if the documentURL passed at construction time is
* not null, the permissions granted to that URL are added.
*
* As a result, the jar file code will only be able to
* connect to the server which served the document.
*
* @param codesource the codesource
* @return the permissions granted to the codesource
*/
protected PermissionCollection getPermissions(CodeSource codesource)
{
// First, get the permissions which may be granted
// through the policy file(s)
Policy p = Policy.getPolicy();
PermissionCollection pc = null;
if (p != null) {
pc = p.getPermissions(codesource);
}
// Now, add permissions if the documentCodeSource is not null
if (documentCodeSource != null){
PermissionCollection urlPC
= super.getPermissions(documentCodeSource);
if (pc != null) {
Enumeration items = urlPC.elements();
while (items.hasMoreElements()) {
pc.add((Permission)(items.nextElement()));
}
} else {
pc = urlPC;
}
}
return pc;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]