aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>2000-11-27 04:07:48 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-11-27 04:07:48 +0000
commit0cf17a80513e9b637e07a9fadc6717e67750ea53 (patch)
tree55d0346a0f02ec766a2f9727307c6ef34124d6ac /libjava/java
parent2721806e9811dee451f847eba2e9655979ad4065 (diff)
downloadgcc-0cf17a80513e9b637e07a9fadc6717e67750ea53.zip
gcc-0cf17a80513e9b637e07a9fadc6717e67750ea53.tar.gz
gcc-0cf17a80513e9b637e07a9fadc6717e67750ea53.tar.bz2
Makefile.in: Rebuilt.
* 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. From-SVN: r37772
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/ClassLoader.java1
-rw-r--r--libjava/java/lang/RuntimePermission.java153
-rw-r--r--libjava/java/lang/Thread.java28
3 files changed, 175 insertions, 7 deletions
diff --git a/libjava/java/lang/ClassLoader.java b/libjava/java/lang/ClassLoader.java
index de95603..402e812 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 0000000..40b3da2
--- /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 33fabf4..12c7eb6 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;
}