cvs server: Diffing . Index: BytecodeLoader.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/BytecodeLoader.java,v retrieving revision 2.10 diff -u -5 -r2.10 BytecodeLoader.java --- BytecodeLoader.java 2000/12/17 19:46:26 2.10 +++ BytecodeLoader.java 2000/12/28 14:28:38 @@ -3,10 +3,11 @@ package org.python.core; import java.io.*; import java.util.StringTokenizer; import java.util.Hashtable; import java.util.Vector; +import java.security.*; public class BytecodeLoader { static Vector init() { Vector parents = new Vector(); @@ -53,15 +54,22 @@ } } else loaderClass = BytecodeLoader1.class; } } - try { - return (Loader) loaderClass.newInstance(); - } catch (Exception e) { - return new BytecodeLoader1(); - } + Loader loader = (Loader) AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + try { + return (Loader) loaderClass.newInstance(); + } catch (Exception e) { + return new BytecodeLoader1(); + } + } + } + ); + return loader; } public static Class makeClass(String name, Vector referents, byte[] data) { Loader loader = makeLoader(); Index: Py.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/Py.java,v retrieving revision 2.29 diff -u -5 -r2.29 Py.java --- Py.java 2000/12/17 15:11:27 2.29 +++ Py.java 2000/12/28 14:29:05 @@ -592,16 +592,16 @@ } if(!secEnv) { try { classLoader = imp.getSyspathJavaLoader(); + writeDebug("import", "trying " + name + " as " + reason + " in syspath loader"); + return classLoader.loadClass(name); } catch(SecurityException e) { secEnv=true; } - writeDebug("import", "trying " + name + " as " + reason + " in syspath loader"); - return classLoader.loadClass(name); } writeDebug("import", "trying " + name + " as " + reason + " in Class.forName"); return Class.forName(name); } @@ -701,18 +701,18 @@ { // System.out.println("initProxy"); // frozen = false; initProperties(null, packages, props, frozenPackage, modules, proxy.getClass().getClassLoader()); - + ThreadState ts = getThreadState(); if (ts.getInitializingProxy() != null) { proxy._setPyInstance(ts.getInitializingProxy()); proxy._setPySystemState(ts.systemState); return; } - + //System.out.println("path: "+sys.path.__str__()); PyObject mod; Class modClass = Py.findClass(module+"$_PyInner"); // ??pending: findClass or should avoid sys.path loading? if (modClass != null) { Index: PyCode.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyCode.java,v retrieving revision 2.2 diff -u -5 -r2.2 PyCode.java --- PyCode.java 1999/10/26 22:52:58 2.2 +++ PyCode.java 2000/12/28 14:29:05 @@ -2,10 +2,11 @@ package org.python.core; public abstract class PyCode extends PyObject { public String co_name; + Object co_context; abstract public PyObject call(PyFrame frame); abstract public PyObject call(PyObject args[], String keywords[], PyObject globals, PyObject[] defaults); Index: PySystemState.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PySystemState.java,v retrieving revision 2.39 diff -u -5 -r2.39 PySystemState.java --- PySystemState.java 2000/12/25 11:04:13 2.39 +++ PySystemState.java 2000/12/28 14:29:11 @@ -291,11 +291,11 @@ Properties postProperties, String[] argv) { initialize(preProperties, postProperties, argv, null); } - + public static synchronized void initialize(Properties preProperties, Properties postProperties, String[] argv, ClassLoader classLoader) { Index: PyTableCode.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyTableCode.java,v retrieving revision 2.7 diff -u -5 -r2.7 PyTableCode.java --- PyTableCode.java 2000/10/11 10:12:24 2.7 +++ PyTableCode.java 2000/12/28 14:29:13 @@ -1,8 +1,10 @@ // Copyright © Corporation for National Research Initiatives package org.python.core; +import java.security.*; + public class PyTableCode extends PyCode { public int co_argcount; int nargs; public int co_firstlineno = -1; @@ -34,10 +36,12 @@ co_argcount -= 1; co_flags |= 0x08; } this.funcs = funcs; this.func_id = func_id; + this.co_context = AccessController.getContext(); + } private static final String[] __members__ = { "co_name", "co_argcount", "co_varnames", "co_filename", "co_firstlineno", @@ -78,11 +82,11 @@ return new PyTuple(varnames); } return super.__findattr__(name); } - public PyObject call(PyFrame frame) { + public PyObject call(final PyFrame frame) { // System.err.println("tablecode call: "+co_name); ThreadState ts = Py.getThreadState(); if (ts.systemState == null) { ts.systemState = Py.defaultSystemState; } @@ -150,11 +154,19 @@ ss.profilefunc.traceCall(frame); } PyObject ret; try { - ret = funcs.call_function(func_id, frame); + if (co_context == null) + ret = funcs.call_function(func_id, frame); + else { + ret = (PyObject) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return funcs.call_function(func_id, frame); + } + }, (AccessControlContext ) co_context); + } } catch (Throwable t) { //t.printStackTrace(); //Convert exceptions that occured in Java code to PyExceptions PyException e = Py.JavaError(t);