vhardy 02/05/07 02:00:07
Modified: sources/org/apache/batik/util
ApplicationSecurityEnforcer.java
sources/org/apache/batik/script/rhino
BatikSecuritySupport.java
Added: sources/org/apache/batik/util BatikSecurityManager.java
Log:
Added implementation for the getClassContext method in BatikSecuritySupport for Rhino
Revision Changes Path
1.4 +7 -3
xml-batik/sources/org/apache/batik/util/ApplicationSecurityEnforcer.java
Index: ApplicationSecurityEnforcer.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/util/ApplicationSecurityEnforcer.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ApplicationSecurityEnforcer.java 7 May 2002 07:17:11 -0000 1.3
+++ ApplicationSecurityEnforcer.java 7 May 2002 09:00:06 -0000 1.4
@@ -25,7 +25,7 @@
* <br />
*
* @author <a mailto="[EMAIL PROTECTED]">Vincent Hardy</a>
- * @version $Id: ApplicationSecurityEnforcer.java,v 1.3 2002/05/07 07:17:11 hillion
Exp $
+ * @version $Id: ApplicationSecurityEnforcer.java,v 1.4 2002/05/07 09:00:06 vhardy
Exp $
*/
public class ApplicationSecurityEnforcer {
/**
@@ -104,7 +104,7 @@
/**
* Keeps track of the last SecurityManager installed
*/
- protected SecurityManager lastSecurityManagerInstalled;
+ protected BatikSecurityManager lastSecurityManagerInstalled;
/**
* @param appClass class of the applications's main entry point
@@ -148,11 +148,13 @@
// We want to install a SecurityManager.
if (sm == null) {
installSecurityManager();
+ System.err.println("installed SecurityManager");
}
} else {
if (sm != null) {
System.setSecurityManager(null);
lastSecurityManagerInstalled = null;
+ System.err.println("Removed SecurityManager");
}
}
}
@@ -162,7 +164,7 @@
*/
public void installSecurityManager(){
Policy policy = Policy.getPolicy();
- SecurityManager securityManager = new SecurityManager();
+ BatikSecurityManager securityManager = new BatikSecurityManager();
// Specify app's security policy in the
// system property.
@@ -209,6 +211,8 @@
// Forces re-loading of the security policy
policy.refresh();
+
+ System.out.println("Enforcing secure script execution");
}
private void setJarBase(String expandedMainClassName){
1.1
xml-batik/sources/org/apache/batik/util/BatikSecurityManager.java
Index: BatikSecurityManager.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.util;
/**
* This <tt>SecurityManager</tt> extension exposes the <tt>getClassContext</tt>
* method so that it can be used by the <tt>BatikSecuritySupport</tt> or other
* security related class.
*
* @author <a mailto="[EMAIL PROTECTED]">Vincent Hardy</a>
* @version $Id: BatikSecurityManager.java,v 1.1 2002/05/07 09:00:06 vhardy Exp $
*/
public class BatikSecurityManager extends SecurityManager {
/**
* Returns the current execution stack as an array of classes.
* <p>
* The length of the array is the number of methods on the execution
* stack. The element at index <code>0</code> is the class of the
* currently executing method, the element at index <code>1</code> is
* the class of that method's caller, and so on.
*
* @return the execution stack.
*/
public Class[] getClassContext(){
return super.getClassContext();
}
}
1.2 +87 -72
xml-batik/sources/org/apache/batik/script/rhino/BatikSecuritySupport.java
Index: BatikSecuritySupport.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/script/rhino/BatikSecuritySupport.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- BatikSecuritySupport.java 30 Apr 2002 15:05:18 -0000 1.1
+++ BatikSecuritySupport.java 7 May 2002 09:00:07 -0000 1.2
@@ -1,72 +1,87 @@
-/*****************************************************************************
- * 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.script.rhino;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import org.mozilla.javascript.SecuritySupport;
-
-/**
- * This implementation of the Rhino <tt>SecuritySupport</tt> interface is
- * meant for use within the context of Batik only. It is a partial
- * implementation of the interface that does what is needed by Batik and
- * no more.
- *
- * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a>
- * @version $Id: BatikSecuritySupport.java,v 1.1 2002/04/30 15:05:18 vhardy Exp $
- */
-public class BatikSecuritySupport implements SecuritySupport {
- /**
- * Default constructor
- */
- public BatikSecuritySupport(){
- }
-
- /**
- * Define and load a Java class
- */
- public Class defineClass(String name,
- byte[] data,
- Object securityDomain){
- RhinoClassLoader rcl = (RhinoClassLoader)securityDomain;
- return rcl.defineClass(name, data);
- }
-
- /**
- * Get the current class Context.
- * This implementation always returns null.
- */
- public Class[] getClassContext(){
- return null;
- }
-
- /**
- * Return teh security context associated with the
- * given class.
- * In this implementation, we return the <tt>ClassLoader</tt>
- * which created the input class.
- */
- public Object getSecurityDomain(Class cl){
- return cl.getClassLoader();
- }
-
- /**
- * Return true if the Java class with the given name should
- * be exposed to scripts.
- *
- * In this implementation, this always return true, as
- * security is enforced by the SecurityManager's policy
- * and the Permissions granted by the URLClassLoader
- * used to load classes.
- */
- public boolean visibleToScripts(String fullClassName){
- return true;
- }
-}
+/*****************************************************************************
+ * 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.script.rhino;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.apache.batik.util.BatikSecurityManager;
+import org.mozilla.javascript.SecuritySupport;
+
+/**
+ * This implementation of the Rhino <tt>SecuritySupport</tt> interface is
+ * meant for use within the context of Batik only. It is a partial
+ * implementation of the interface that does what is needed by Batik and
+ * no more.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a>
+ * @version $Id: BatikSecuritySupport.java,v 1.2 2002/05/07 09:00:07 vhardy Exp $
+ */
+public class BatikSecuritySupport implements SecuritySupport {
+ /**
+ * Default constructor
+ */
+ public BatikSecuritySupport(){
+ }
+
+ /**
+ * Define and load a Java class
+ */
+ public Class defineClass(String name,
+ byte[] data,
+ Object securityDomain){
+ RhinoClassLoader rcl = (RhinoClassLoader)securityDomain;
+ return rcl.defineClass(name, data);
+ }
+
+ /**
+ * Get the current class Context.
+ * This relies on the <tt>BatikSecurityManager</tt> class.
+ */
+ public Class[] getClassContext(){
+ SecurityManager sm = System.getSecurityManager();
+ if (sm == null
+ ||
+ !(sm instanceof BatikSecurityManager)){
+ return null;
+ } else {
+ BatikSecurityManager bsm = (BatikSecurityManager)sm;
+ Class[] cc = bsm.getClassContext();
+ Class[] result = cc;
+ if (cc != null && cc.length > 0){
+ result = new Class[cc.length -1];
+ System.arraycopy(cc, 1, result, 0, cc.length - 1);
+ }
+ return result;
+ }
+ }
+
+ /**
+ * Return teh security context associated with the
+ * given class.
+ * In this implementation, we return the <tt>ClassLoader</tt>
+ * which created the input class.
+ */
+ public Object getSecurityDomain(Class cl){
+ return cl.getClassLoader();
+ }
+
+ /**
+ * Return true if the Java class with the given name should
+ * be exposed to scripts.
+ *
+ * In this implementation, this always return true, as
+ * security is enforced by the SecurityManager's policy
+ * and the Permissions granted by the URLClassLoader
+ * used to load classes.
+ */
+ public boolean visibleToScripts(String fullClassName){
+ return true;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]