summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-27 04:07:48 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-27 04:07:48 +0000
commit63fd4522bbcb6d04a5263ad9c2b36ea14f59eb12 (patch)
tree55d0346a0f02ec766a2f9727307c6ef34124d6ac
parent40000b13d53cd26333206c29a058da6227a6df03 (diff)
downloadgcc-63fd4522bbcb6d04a5263ad9c2b36ea14f59eb12.tar.gz
* Makefile.in: Rebuilt.
* Makefile.am (core_java_source_files): Added RuntimePermission.java. * java/lang/RuntimePermission.java: Imported from Classpath. * java/lang/Thread.java (getContextClassLoader): Now synchronized. Added security code. (setContextClassLoader): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37772 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libjava/ChangeLog8
-rw-r--r--libjava/Makefile.am4
-rw-r--r--libjava/Makefile.in82
-rw-r--r--libjava/gcj/Makefile.in1
-rw-r--r--libjava/include/Makefile.in1
-rw-r--r--libjava/java/lang/ClassLoader.java1
-rw-r--r--libjava/java/lang/RuntimePermission.java153
-rw-r--r--libjava/java/lang/Thread.java28
8 files changed, 241 insertions, 37 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 5c645632735..27a30154729 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,13 @@
2000-11-26 Tom Tromey <tromey@cygnus.com>
+ * Makefile.in: Rebuilt.
+ * Makefile.am (core_java_source_files): Added
+ RuntimePermission.java.
+ * java/lang/RuntimePermission.java: Imported from Classpath.
+ * java/lang/Thread.java (getContextClassLoader): Now
+ synchronized. Added security code.
+ (setContextClassLoader): Likewise.
+
* prims.cc (_Jv_NewObjectArray): Use const_cast to initialize
length field of array.
(_Jv_NewPrimArray): Likewise.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index da50e04f140..70fe6e00ca5 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -816,6 +816,7 @@ java/lang/Process.java \
java/lang/Runnable.java \
java/lang/Runtime.java \
java/lang/RuntimeException.java \
+java/lang/RuntimePermission.java \
java/lang/SecurityException.java \
java/lang/SecurityManager.java \
java/lang/Short.java \
@@ -941,6 +942,7 @@ java/util/EventListener.java \
java/util/EventObject.java \
java/util/GregorianCalendar.java \
java/util/HashMap.java \
+java/util/HashSet.java \
java/util/Hashtable.java \
java/util/Iterator.java \
java/util/LinkedList.java \
@@ -968,6 +970,8 @@ java/util/TimeZone.java \
java/util/Timer.java \
java/util/TimerTask.java \
java/util/TooManyListenersException.java \
+java/util/TreeMap.java \
+java/util/TreeSet.java \
java/util/Vector.java
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 206be6579e6..f325ee75dbf 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -120,29 +120,43 @@ here = @here@
libgcj_basedir = @libgcj_basedir@
AUTOMAKE_OPTIONS = foreign no-installinfo
-@TESTSUBDIR_TRUE@SUBDIRS = @TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
-@TESTSUBDIR_FALSE@SUBDIRS = @TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
-@USE_LIBDIR_TRUE@toolexeclibdir = @USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexeclibdir = @USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexecdir = @USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
-@NO_X_TRUE@cond_x_ltlibrary =
-@NO_X_FALSE@cond_x_ltlibrary = @NO_X_FALSE@libgcjx.la
+@TESTSUBDIR_TRUE@SUBDIRS = \
+@TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
+@TESTSUBDIR_FALSE@SUBDIRS = \
+@TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
+@USE_LIBDIR_TRUE@toolexeclibdir = \
+@USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexeclibdir = \
+@USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexecdir = \
+@USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
+@NO_X_TRUE@cond_x_ltlibrary = \
+@NO_X_FALSE@cond_x_ltlibrary = \
+@NO_X_FALSE@libgcjx.la
toolexeclib_LTLIBRARIES = libgcj.la $(cond_x_ltlibrary)
toolexeclib_DATA = libgcj.spec
data_DATA = libgcj.zip
-@NEEDS_DATA_START_TRUE@toolexeclib_LIBRARIES = @NEEDS_DATA_START_TRUE@libgcjdata.a
-@NEEDS_DATA_START_TRUE@libgcjdata_a_SOURCES = @NEEDS_DATA_START_TRUE@libgcjdata.c
+@NEEDS_DATA_START_TRUE@toolexeclib_LIBRARIES = \
+@NEEDS_DATA_START_TRUE@libgcjdata.a
+@NEEDS_DATA_START_TRUE@libgcjdata_a_SOURCES = \
+@NEEDS_DATA_START_TRUE@libgcjdata.c
-@NATIVE_TRUE@bin_PROGRAMS = @NATIVE_TRUE@jv-convert gij
+@NATIVE_TRUE@bin_PROGRAMS = \
+@NATIVE_TRUE@jv-convert gij
bin_SCRIPTS = addr2name.awk
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_FALSE@zip
-@CANADIAN_FALSE@ZIP = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
-@CANADIAN_TRUE@GCJH = @CANADIAN_TRUE@gcjh
-@CANADIAN_FALSE@GCJH = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = \
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = \
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@zip
+@CANADIAN_FALSE@ZIP = \
+@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/zip/zip$(EXEEXT)
+@CANADIAN_TRUE@GCJH = \
+@CANADIAN_TRUE@gcjh
+@CANADIAN_FALSE@GCJH = \
+@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ) -fassume-compiled -fclasspath=$(here) -L$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c
GCJLINK = $(LIBTOOL) --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
@@ -157,8 +171,10 @@ AM_CXXFLAGS = -fno-rtti -fvtable-thunks -fasynchronous-exceptions \
-fdollars-in-identifiers \
@LIBGCJ_CXXFLAGS@ @EXCEPTIONSPEC@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE
-@USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
-@USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@
+@USING_GCC_TRUE@AM_CFLAGS = \
+@USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
+@USING_GCC_FALSE@AM_CFLAGS = \
+@USING_GCC_FALSE@@LIBGCJ_CFLAGS@
JCFLAGS = -g
JC1FLAGS = -g @LIBGCJ_JAVAFLAGS@
@@ -225,7 +241,8 @@ extra_headers = java/lang/Object.h java/lang/Class.h
NM = nm
-@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
+@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = \
+@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
CONVERT_DIR = gnu/gcj/convert
@@ -567,6 +584,7 @@ java/lang/Process.java \
java/lang/Runnable.java \
java/lang/Runtime.java \
java/lang/RuntimeException.java \
+java/lang/RuntimePermission.java \
java/lang/SecurityException.java \
java/lang/SecurityManager.java \
java/lang/Short.java \
@@ -692,6 +710,7 @@ java/util/EventListener.java \
java/util/EventObject.java \
java/util/GregorianCalendar.java \
java/util/HashMap.java \
+java/util/HashSet.java \
java/util/Hashtable.java \
java/util/Iterator.java \
java/util/LinkedList.java \
@@ -719,6 +738,8 @@ java/util/TimeZone.java \
java/util/Timer.java \
java/util/TimerTask.java \
java/util/TooManyListenersException.java \
+java/util/TreeMap.java \
+java/util/TreeSet.java \
java/util/Vector.java
@@ -1167,7 +1188,7 @@ libgcj-test.spec.in libgcj.spec.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
DIST_SUBDIRS = @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include
DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
@@ -1497,10 +1518,10 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/lang/NumberFormatException.P .deps/java/lang/Object.P \
.deps/java/lang/OutOfMemoryError.P .deps/java/lang/Process.P \
.deps/java/lang/Runnable.P .deps/java/lang/Runtime.P \
-.deps/java/lang/RuntimeException.P .deps/java/lang/SecurityException.P \
-.deps/java/lang/SecurityManager.P .deps/java/lang/Short.P \
-.deps/java/lang/StackOverflowError.P .deps/java/lang/String.P \
-.deps/java/lang/StringBuffer.P \
+.deps/java/lang/RuntimeException.P .deps/java/lang/RuntimePermission.P \
+.deps/java/lang/SecurityException.P .deps/java/lang/SecurityManager.P \
+.deps/java/lang/Short.P .deps/java/lang/StackOverflowError.P \
+.deps/java/lang/String.P .deps/java/lang/StringBuffer.P \
.deps/java/lang/StringIndexOutOfBoundsException.P \
.deps/java/lang/System.P .deps/java/lang/Thread.P \
.deps/java/lang/ThreadDeath.P .deps/java/lang/ThreadGroup.P \
@@ -1647,11 +1668,11 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/util/EmptyStackException.P .deps/java/util/Enumeration.P \
.deps/java/util/EventListener.P .deps/java/util/EventObject.P \
.deps/java/util/GregorianCalendar.P .deps/java/util/HashMap.P \
-.deps/java/util/Hashtable.P .deps/java/util/Iterator.P \
-.deps/java/util/LinkedList.P .deps/java/util/List.P \
-.deps/java/util/ListIterator.P .deps/java/util/ListResourceBundle.P \
-.deps/java/util/Locale.P .deps/java/util/Map.P \
-.deps/java/util/MissingResourceException.P \
+.deps/java/util/HashSet.P .deps/java/util/Hashtable.P \
+.deps/java/util/Iterator.P .deps/java/util/LinkedList.P \
+.deps/java/util/List.P .deps/java/util/ListIterator.P \
+.deps/java/util/ListResourceBundle.P .deps/java/util/Locale.P \
+.deps/java/util/Map.P .deps/java/util/MissingResourceException.P \
.deps/java/util/NoSuchElementException.P .deps/java/util/Observable.P \
.deps/java/util/Observer.P .deps/java/util/Properties.P \
.deps/java/util/PropertyPermission.P \
@@ -1661,7 +1682,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/util/SortedSet.P .deps/java/util/Stack.P \
.deps/java/util/StringTokenizer.P .deps/java/util/TimeZone.P \
.deps/java/util/Timer.P .deps/java/util/TimerTask.P \
-.deps/java/util/TooManyListenersException.P .deps/java/util/Vector.P \
+.deps/java/util/TooManyListenersException.P .deps/java/util/TreeMap.P \
+.deps/java/util/TreeSet.P .deps/java/util/Vector.P \
.deps/java/util/jar/Attributes.P .deps/java/util/jar/JarEntry.P \
.deps/java/util/jar/JarException.P .deps/java/util/jar/JarFile.P \
.deps/java/util/jar/JarInputStream.P \
@@ -2058,7 +2080,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
- cp -pr $$d/$$file $(distdir)/$$file; \
+ cp -pr $$/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
index 3849f8c15f0..b2ffae0594d 100644
--- a/libjava/gcj/Makefile.in
+++ b/libjava/gcj/Makefile.in
@@ -88,6 +88,7 @@ GCTESTSPEC = @GCTESTSPEC@
INCLTDL = @INCLTDL@
JC1GCSPEC = @JC1GCSPEC@
LIBDATASTARTSPEC = @LIBDATASTARTSPEC@
+LIBGCJDEBUG = @LIBGCJDEBUG@
LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
index b5a8cbcf171..021c1efa632 100644
--- a/libjava/include/Makefile.in
+++ b/libjava/include/Makefile.in
@@ -88,6 +88,7 @@ GCTESTSPEC = @GCTESTSPEC@
INCLTDL = @INCLTDL@
JC1GCSPEC = @JC1GCSPEC@
LIBDATASTARTSPEC = @LIBDATASTARTSPEC@
+LIBGCJDEBUG = @LIBGCJDEBUG@
LIBGCJTESTSPEC = @LIBGCJTESTSPEC@
LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@
LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@
diff --git a/libjava/java/lang/ClassLoader.java b/libjava/java/lang/ClassLoader.java
index de9560317a2..402e8124864 100644
--- a/libjava/java/lang/ClassLoader.java
+++ b/libjava/java/lang/ClassLoader.java
@@ -426,4 +426,3 @@ public abstract class ClassLoader {
return null;
}
}
-
diff --git a/libjava/java/lang/RuntimePermission.java b/libjava/java/lang/RuntimePermission.java
new file mode 100644
index 00000000000..40b3da2c3c2
--- /dev/null
+++ b/libjava/java/lang/RuntimePermission.java
@@ -0,0 +1,153 @@
+/* RuntimePermission.java
+ Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.lang;
+
+import java.security.*;
+
+/**
+ * A <code>RuntimePermission</code> contains a permission name, but no
+ * actions list. This means you either have the permission or you don't.
+ *
+ * Permission names have the follow the hierarchial property naming
+ * convention. In addition, an asterisk may appear at the end of a
+ * name if following a period or by itself.
+ *
+ * <table border=1>
+ * <tr><th>Valid names</th><th>Invalid names</th></tr>
+ * <tr><td>"accessClassInPackage.*","*"</td>
+ * <td>"**", "*x", "*.a"</td></tr>
+ * </table>
+ * <br>
+ *
+ * The following table provides a list of all the possible RuntimePermission
+ * permission names with a description of what that permission allows.
+ * <br>
+ * <table border=1>
+ * <tr><th>Permission Name</th><th>Permission Allows</th></tr>
+ * <tr>
+ * <td><code>createClassLoader</code></td>
+ * <td>creation of a class loader</td></tr>
+ * <tr>
+ * <td><code>getClassLoader</code></td>
+ * <td>retrieval of the class loader for the calling class</td></tr>
+ * <tr>
+ * <td><code>setContextClassLoader</code></td>
+ * <td>allows the setting of the context class loader used by a
+ * thread including system threads</td></tr>
+ * <tr>
+ * <td><code>setSecurityManager</code></td>
+ * <td>allows the application to replace the security manager with
+ * another, possibly less restrictive one.</td></tr>
+ * <tr>
+ * <td><code>createSecurityManager</code></td>
+ * <td>allows the application to create a new security manager</td></tr>
+ * <tr>
+ * <td><code>exitVM</code></td>
+ * <td>allows the application to halt the virtual machine</td></tr>
+ * <tr>
+ * <td><code>setFactory</code></td>
+ * <td>allows the application to set the socket factory for socket,
+ * server socket, stream handler, or RMI socket factory.</td></tr>
+ * <tr>
+ * <td><code>setIO</code></td>
+ * <td>allows the application to set System.out, System.in, and
+ * System.err</td></tr>
+ * <tr>
+ * <td><code>modifyThread</code></td>
+ * <td>allows the application to modify any thread in the virtual machine
+ * using any of the methods <code>stop</code>, <code>resume</code>,
+ * <code>suspend</code>, <code>setPriority</code>, and
+ * <code>setName</code> of classs <code>Thread</code></td></tr>
+ * <tr>
+ * <td><code>stopThread</code></td>
+ * <td>allows the application to <code>stop</code> any thread it has
+ * access to in the system</td></tr>
+ * <tr>
+ * <td><code>modifyThreadGroup</td>
+ * <td>allows the application to modify thread groups using any of the
+ * methods <code>destroy</code>, <code>resume</code>,
+ * <code>setDaemon</code>, <code>setMaxPriority</code>,
+ * <code>stop</code>, and <code>suspend</code> of the class
+ * <code>ThreadGroup</code></td></tr>
+ * <tr>
+ * <td><code>getProtectionDomain</code></td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>readFileDescriptor</code></td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>writeFileDescriptor</code</td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>loadLibrary.{library name}</code></td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>accessClassInPackage.{package name}</code></td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>defineClassInPackage.{package name}</code></td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>accessDeclaredMembers</code></td>
+ * <td></td></tr>
+ * <tr>
+ * <td><code>queuePrintJob</code></td>
+ * <td></td></tr>
+ * </table>
+ *
+ * @since JDK 1.2
+ *
+ * @author Brian Jones
+ */
+public class RuntimePermission extends java.security.BasicPermission
+{
+ /**
+ *
+ * @param permissionName the name of the granted permission
+ *
+ * @throws IllegalArgumentException thrown if the name contains an invalid
+ * wildcard character
+ */
+ public RuntimePermission(String permissionName)
+ {
+ this(permissionName, null);
+ }
+
+ /**
+ *
+ * @param permissionName the name of the granted permission
+ * @param actions this should always be null
+ *
+ * @throws IllegalArgumentException throw if the name contains an invalid
+ * wildcard character
+ */
+ public RuntimePermission(String permissionName, String actions)
+ {
+ super(permissionName, actions);
+ }
+}
diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java
index 33fabf4b5ac..12c7eb6cb45 100644
--- a/libjava/java/lang/Thread.java
+++ b/libjava/java/lang/Thread.java
@@ -145,21 +145,37 @@ public class Thread implements Runnable
daemon_flag = status;
}
- public ClassLoader getContextClassLoader()
+ public synchronized ClassLoader getContextClassLoader()
{
if (context_class_loader == null)
+ context_class_loader = ClassLoader.getSystemClassLoader ();
+
+ SecurityManager s = System.getSecurityManager();
+ // FIXME: we can't currently find the caller's class loader.
+ ClassLoader callers = null;
+ if (s != null && callers != null)
{
- context_class_loader = ClassLoader.getSystemClassLoader ();
- return context_class_loader;
+ // See if the caller's class loader is the same as or an
+ // ancestor of this thread's class loader.
+ while (callers != null && callers != context_class_loader)
+ {
+ // FIXME: should use some internal version of getParent
+ // that avoids security checks.
+ callers = callers.getParent ();
+ }
+
+ if (callers != context_class_loader)
+ s.checkPermission (new RuntimePermission ("getClassLoader"));
}
- // FIXME: Add security manager stuff here.
return context_class_loader;
}
- public void setContextClassLoader(ClassLoader cl)
+ public synchronized void setContextClassLoader(ClassLoader cl)
{
- // FIXME: Add security manager stuff here.
+ SecurityManager s = System.getSecurityManager ();
+ if (s != null)
+ s.checkPermission (new RuntimePermission ("setContextClassLoader"));
context_class_loader = cl;
}