diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-11-27 04:07:48 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-11-27 04:07:48 +0000 |
commit | 63fd4522bbcb6d04a5263ad9c2b36ea14f59eb12 (patch) | |
tree | 55d0346a0f02ec766a2f9727307c6ef34124d6ac | |
parent | 40000b13d53cd26333206c29a058da6227a6df03 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | libjava/Makefile.am | 4 | ||||
-rw-r--r-- | libjava/Makefile.in | 82 | ||||
-rw-r--r-- | libjava/gcj/Makefile.in | 1 | ||||
-rw-r--r-- | libjava/include/Makefile.in | 1 | ||||
-rw-r--r-- | libjava/java/lang/ClassLoader.java | 1 | ||||
-rw-r--r-- | libjava/java/lang/RuntimePermission.java | 153 | ||||
-rw-r--r-- | libjava/java/lang/Thread.java | 28 |
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; } |