mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			766 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			766 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* java.lang.SecurityManager
 | |
|    Copyright (C) 1998, 1999, 2001 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.net.*;
 | |
| import java.util.*;
 | |
| import java.io.*;
 | |
| 
 | |
| /**
 | |
|  ** SecurityManager is a class you can extend to create
 | |
|  ** your own Java security policy.  By default, there is
 | |
|  ** no SecurityManager installed in 1.1, which means that
 | |
|  ** all things are permitted to all people.<P>
 | |
|  **
 | |
|  ** The default methods in this class deny all
 | |
|  ** things to all people.
 | |
|  **
 | |
|  ** @author  John Keiser
 | |
|  ** @version 1.1.0, 31 May 1998
 | |
|  ** @since JDK1.0
 | |
|  **/
 | |
| public class SecurityManager {
 | |
| 	/** Tells whether or not the SecurityManager is currently
 | |
| 	 ** performing a security check.
 | |
| 	 **/
 | |
| 	protected boolean inCheck;
 | |
| 
 | |
| 	/** Tells whether or not the SecurityManager is currently
 | |
| 	 ** performing a security check.
 | |
| 	 **
 | |
| 	 ** @return whether or not the SecurityManager is
 | |
| 	 **         currently performing a security check.
 | |
| 	 **/
 | |
| 	public boolean getInCheck() {
 | |
| 		return inCheck;
 | |
| 	}
 | |
| 
 | |
| 	/** Get a list of all the classes currently executing
 | |
| 	 ** methods on the Java stack.  getClassContext()[0] is
 | |
| 	 ** the currently executing method
 | |
| 	 ** <STRONG>Spec Note:</STRONG> does not say whether
 | |
| 	 ** the stack will include the getClassContext() call or
 | |
| 	 ** the one just before it.
 | |
| 	 **
 | |
| 	 ** @return an array containing all the methods on classes
 | |
| 	 **         on the Java execution stack.
 | |
| 	 **/
 | |
| 	protected Class[] getClassContext() {
 | |
| 		return VMSecurityManager.getClassContext();
 | |
| 	}
 | |
| 
 | |
| 	/** Find the ClassLoader for the most recent class on the
 | |
| 	 ** stack that was loaded by an explicit ClassLoader.  If
 | |
| 	 ** everything on the stack was loaded by the system
 | |
| 	 ** classloader, null is returned.
 | |
| 	 **
 | |
| 	 ** @return the most recent ClassLoader on the execution
 | |
| 	 **         stack.
 | |
| 	 **/
 | |
| 	protected ClassLoader currentClassLoader() {
 | |
| 		return VMSecurityManager.currentClassLoader();
 | |
| 	}
 | |
| 
 | |
| 	/** Find the most recent class on the stack that was
 | |
| 	 ** loaded by an explicit ClassLoader.  If everything on
 | |
| 	 ** the stack was loaded by the system classloader, null
 | |
| 	 ** is returned.
 | |
| 	 **
 | |
| 	 ** @return the most recent loaded Class on the execution
 | |
| 	 **         stack.
 | |
| 	 **/
 | |
| 	protected Class currentLoadedClass() {
 | |
| 		Class[] c = getClassContext();
 | |
| 		for(int i=0;i<c.length;i++) {
 | |
| 			if(c[i].getClassLoader() != null) {
 | |
| 				return c[i];
 | |
| 			}
 | |
| 		}
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| 	/** Get the depth on the execution stack of the most
 | |
| 	 ** recent class that was loaded by an explicit
 | |
| 	 ** ClassLoader.  This can be used as an index into
 | |
| 	 ** getClassContext().
 | |
| 	 **
 | |
| 	 ** @return the index of the most recent loaded Class on
 | |
| 	 **         the execution stack.
 | |
| 	 **/
 | |
| 	protected int classLoaderDepth() {
 | |
| 		Class[] c = getClassContext();
 | |
| 		for(int i=0;i<c.length;i++) {
 | |
| 			if(c[i].getClassLoader() != null) {
 | |
| 				return i;
 | |
| 			}
 | |
| 		}
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	/** Tell whether there is a class loaded with an explicit
 | |
| 	 ** ClassLoader on the stack.
 | |
| 	 **
 | |
| 	 ** @return whether there is a class loaded with an
 | |
| 	 **         explicit ClassLoader on the stack.
 | |
| 	 **/
 | |
| 	protected boolean inClassLoader() {
 | |
| 		return classLoaderDepth() != -1;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/** Get the depth of a particular class on the execution
 | |
| 	 ** stack.
 | |
| 	 **
 | |
| 	 ** @param className the fully-qualified name of the class
 | |
| 	 **        to search for on the stack.
 | |
| 	 ** @return the index of the class on the stack, or -1 if
 | |
| 	 **         the class is not on the stack.
 | |
| 	 **/
 | |
| 	protected int classDepth(String className) {
 | |
| 		Class[] c = getClassContext();
 | |
| 		for(int i=0;i<c.length;i++) {
 | |
| 			if(className.equals(c[i].getName())) {
 | |
| 				return i;
 | |
| 			}
 | |
| 		}
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	/** Tell whether the specified class is on the execution
 | |
| 	 ** stack.
 | |
| 	 **
 | |
| 	 ** @param className the fully-qualified name of the class
 | |
| 	 **        to search for on the stack.
 | |
| 	 ** @return whether the specified class is on the
 | |
| 	 **         execution stack.
 | |
| 	 **/
 | |
| 	protected boolean inClass(String className) {
 | |
| 		return classDepth(className) != -1;
 | |
| 	}
 | |
| 
 | |
| 	/** Get an implementation-dependent Object that contains
 | |
| 	 ** enough information about the current environment to be
 | |
| 	 ** able to perform standard security checks later.  This
 | |
| 	 ** is used by trusted methods that need to verify that
 | |
| 	 ** their callers have sufficient access to perform
 | |
| 	 ** certain operations.<P>
 | |
| 	 **
 | |
| 	 ** Currently the only methods that use this are checkRead()
 | |
| 	 ** and checkConnect().
 | |
| 	 **
 | |
| 	 ** @see checkConnect(java.lang.String,int,java.lang.Object)
 | |
| 	 ** @see checkRead(java.lang.String,java.lang.Object)
 | |
| 	 **/
 | |
| 	public Object getSecurityContext() {
 | |
| 		return new SecurityContext(getClassContext());
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to create a
 | |
| 	 ** ClassLoader.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from ClassLoader.ClassLoader(),
 | |
| 	 ** in other words, whenever a ClassLoader is created.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.ClassLoader#ClassLoader()
 | |
| 	 **/
 | |
| 	public void checkCreateClassLoader() {
 | |
| 		throw new SecurityException("Cannot create new ClassLoaders.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to modify this
 | |
| 	 ** other Thread.<P>
 | |
| 	 **
 | |
| 	 ** Called by Thread.stop(), suspend(), resume(), and
 | |
| 	 ** interrupt(), destroy(), setPriority(), setName() and
 | |
| 	 ** setDaemon().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param g the Thread to check against
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.Thread#stop()
 | |
| 	 ** @see java.lang.Thread#suspend()
 | |
| 	 ** @see java.lang.Thread#resume()
 | |
| 	 ** @see java.lang.Thread#interrupt()
 | |
| 	 ** @see java.lang.Thread#destroy()
 | |
| 	 ** @see java.lang.Thread#setPriority(int)
 | |
| 	 ** @see java.lang.Thread#setName(java.lang.String)
 | |
| 	 ** @see java.lang.Thread#setDaemon(boolean)
 | |
| 	 **/
 | |
| 	public void checkAccess(Thread t) {
 | |
| 		throw new SecurityException("Cannot modify Threads.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to modify this
 | |
| 	 ** ThreadGroup.<P>
 | |
| 	 **
 | |
| 	 ** Called by Thread.Thread() (to add a thread to the
 | |
| 	 ** ThreadGroup), ThreadGroup.ThreadGroup() (to add this
 | |
| 	 ** ThreadGroup to a parent), ThreadGroup.stop(),
 | |
| 	 ** suspend(), resume(), interrupt(), destroy(),
 | |
| 	 ** setDaemon(), and setMaxPriority().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param g the ThreadGroup to check against
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.Thread#Thread()
 | |
| 	 ** @see java.lang.ThreadGroup#ThreadGroup()
 | |
| 	 ** @see java.lang.ThreadGroup#stop()
 | |
| 	 ** @see java.lang.ThreadGroup#suspend()
 | |
| 	 ** @see java.lang.ThreadGroup#resume()
 | |
| 	 ** @see java.lang.ThreadGroup#interrupt()
 | |
| 	 ** @see java.lang.ThreadGroup#setDaemon(boolean)
 | |
| 	 ** @see java.lang.ThreadGroup#setMaxPriority(int)
 | |
| 	 **/
 | |
| 	public void checkAccess(ThreadGroup g) {
 | |
| 		throw new SecurityException("Cannot modify ThreadGroups.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to exit the
 | |
| 	 ** JVM with the given status.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from Runtime.exit().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param status the status to exit with
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.Runtime#exit()
 | |
| 	 ** @see java.lang.Runtime#exit(int)
 | |
| 	 **/
 | |
| 	public void checkExit(int status) {
 | |
| 		throw new SecurityException("Cannot exit JVM.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to execute the
 | |
| 	 ** given program.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from Runtime.exec().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param program the name of the program to exec
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.Runtime#exec(java.lang.String[],java.lang.String[])
 | |
| 	 **/
 | |
| 	public void checkExec(String program) {
 | |
| 		throw new SecurityException("Cannot execute programs.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to link in the
 | |
| 	 ** given native library.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from Runtime.load() (and hence,
 | |
| 	 ** by loadLibrary() as well).<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param filename the full name of the library to load
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.Runtime#load(java.lang.String)
 | |
| 	 **/
 | |
| 	public void checkLink(String filename) {
 | |
| 		throw new SecurityException("Cannot link native libraries.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read the
 | |
| 	 ** given file using the FileDescriptor.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from
 | |
| 	 ** FileInputStream.FileInputStream().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param desc the FileDescriptor representing the file
 | |
| 	 **        to access
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.io.FileInputStream#FileInputStream(java.io.FileDescriptor)
 | |
| 	 **/
 | |
| 	public void checkRead(FileDescriptor desc) {
 | |
| 		throw new SecurityException("Cannot read files via file descriptors.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read the
 | |
| 	 ** given file.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from
 | |
| 	 ** FileInputStream.FileInputStream(),
 | |
| 	 ** RandomAccessFile.RandomAccessFile(), File.exists(),
 | |
| 	 ** canRead(), isFile(), isDirectory(), lastModified(),
 | |
| 	 ** length() and list().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param filename the full name of the file to access
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.io.File
 | |
| 	 ** @see java.io.FileInputStream#FileInputStream(java.lang.String)
 | |
| 	 ** @see java.io.RandomAccessFile#RandomAccessFile(java.lang.String)
 | |
| 	 **/
 | |
| 	public void checkRead(String filename) {
 | |
| 		throw new SecurityException("Cannot read files via file names.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read the
 | |
| 	 ** given file. using the given SecurityContext.<P>
 | |
| 	 **
 | |
| 	 ** I know of no core class that calls this method.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param filename the full name of the file to access
 | |
| 	 ** @param securityContext the Security Context to
 | |
| 	 **        determine access for.
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 **/
 | |
| 	public void checkRead(String filename, Object securityContext) {
 | |
| 		throw new SecurityException("Cannot read files via file names.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to write to the
 | |
| 	 ** given file using the FileDescriptor.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from
 | |
| 	 ** FileOutputStream.FileOutputStream().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param desc the FileDescriptor representing the file
 | |
| 	 **        to access
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.io.FileOutputStream#FileOutputStream(java.io.FileDescriptor)
 | |
| 	 **/
 | |
| 	public void checkWrite(FileDescriptor desc) {
 | |
| 		throw new SecurityException("Cannot write files via file descriptors.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to write to the
 | |
| 	 ** given file.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from
 | |
| 	 ** FileOutputStream.FileOutputStream(),
 | |
| 	 ** RandomAccessFile.RandomAccessFile(),
 | |
| 	 ** File.canWrite(), mkdir(), and renameTo().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param filename the full name of the file to access
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.io.File#canWrite()
 | |
| 	 ** @see java.io.File#mkdir()
 | |
| 	 ** @see java.io.File#renameTo()
 | |
| 	 ** @see java.io.FileOutputStream#FileOutputStream(java.lang.String)
 | |
| 	 ** @see java.io.RandomAccessFile#RandomAccessFile(java.lang.String)
 | |
| 	 **/
 | |
| 	public void checkWrite(String filename) {
 | |
| 		throw new SecurityException("Cannot write files via file names.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to delete the
 | |
| 	 ** given file.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from File.delete().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param filename the full name of the file to delete
 | |
| 	 ** @exception SecurityException if th operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.io.File#delete()
 | |
| 	 **/
 | |
| 	public void checkDelete(String filename) {
 | |
| 		throw new SecurityException("Cannot delete files.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to connect to a
 | |
| 	 ** given host on a given port.<P>
 | |
| 	 **
 | |
| 	 ** This method is called from Socket.Socket().
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param host the host to connect to
 | |
| 	 ** @param port the port to connect on
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted
 | |
| 	 ** @see java.net.Socket#Socket()
 | |
| 	 **/
 | |
| 	public void checkConnect(String host, int port) {
 | |
| 		throw new SecurityException("Cannot make network connections.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to connect to a
 | |
| 	 ** given host on a given port using a specific security
 | |
| 	 ** context to determine access.<P>
 | |
| 	 **
 | |
| 	 ** This method is not called in the 1.1 core classes.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param host the host to connect to
 | |
| 	 ** @param port the port to connect on
 | |
| 	 ** @param securityContext the security context to
 | |
| 	 **        determine access with
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted
 | |
| 	 **/
 | |
| 	public void checkConnect(String host, int port, Object securityContext) {
 | |
| 		throw new SecurityException("Cannot make network connections.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to listen to a
 | |
| 	 ** specific port for data.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by ServerSocket.ServerSocket().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param port the port to listen on
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted
 | |
| 	 ** @see java.net.ServerSocket#ServerSocket(int)
 | |
| 	 **/
 | |
| 	public void checkListen(int port) {
 | |
| 		throw new SecurityException("Cannot listen for connections.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to accept a
 | |
| 	 ** connection from a particular host on a particular
 | |
| 	 ** port.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by ServerSocket.implAccept().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param host the host which wishes to connect
 | |
| 	 ** @param port the port the connection will be on
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted
 | |
| 	 ** @see java.net.ServerSocket#accept()
 | |
| 	 **/
 | |
| 	public void checkAccept(String host, int port) {
 | |
| 		throw new SecurityException("Cannot accept connections.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read and
 | |
| 	 ** write multicast to a particular address.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @XXX where is it called?
 | |
| 	 **
 | |
| 	 ** @param addr the address to multicast to.
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 **/
 | |
| 	public void checkMulticast(InetAddress addr) {
 | |
| 		throw new SecurityException("Cannot read or write multicast.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read and
 | |
| 	 ** write multicast to a particular address with a
 | |
| 	 ** particular ttl value.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.<P>
 | |
| 	 **
 | |
| 	 ** @XXX where is it called?
 | |
| 	 **
 | |
| 	 ** @XXX what the hell is ttl?  Expand abbreviation.
 | |
| 	 **
 | |
| 	 ** @param addr the address to multicast to.
 | |
| 	 ** @param ttl the ttl value to use
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 **/
 | |
| 	public void checkMulticast(InetAddress addr, byte ttl) {
 | |
| 		throw new SecurityException("Cannot read or write multicast.");
 | |
| 	}
 | |
| 
 | |
|         /**
 | |
|          ** Check if the current thread is allowed to perform an
 | |
|          ** operation that requires the specified <code>Permission</code>.
 | |
|          **
 | |
|          ** @param perm The <code>Permission</code> required.
 | |
|          ** @exception SecurityException If the operation is not allowed.
 | |
|          **/
 | |
|          public void checkPermission(java.security.Permission perm) {
 | |
| 		throw new SecurityException("Operation not allowed");
 | |
| 	}
 | |
| 
 | |
|         /**
 | |
|          ** Check if the current thread is allowed to perform an
 | |
|          ** operation that requires the specified <code>Permission</code>.
 | |
|          **
 | |
|          ** @param perm The <code>Permission</code> required.
 | |
| 	 ** @param context A security context
 | |
|          ** @exception SecurityException If the operation is not allowed.
 | |
| 	 ** @since 1.2
 | |
|          **/
 | |
|          public void checkPermission(java.security.Permission perm,
 | |
| 				     Object context) {
 | |
| 		throw new SecurityException("Operation not allowed");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read or
 | |
| 	 ** write all the system properties at once.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by System.getProperties()
 | |
| 	 ** and setProperties().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.System#getProperties()
 | |
| 	 ** @see java.lang.System#setProperties(java.util.Properties)
 | |
| 	 **/
 | |
| 	public void checkPropertiesAccess() {
 | |
| 		throw new SecurityException("Cannot access all system properties at once.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to read or
 | |
| 	 ** write a particular system property.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by System.getProperty() and
 | |
| 	 ** setProperty().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException is the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.System#getProperty(java.lang.String)
 | |
| 	 ** @see java.lang.System#setProperty(java.lang.String,java.lang.String)
 | |
| 	 **/
 | |
| 	public void checkPropertyAccess(String name) {
 | |
| 		throw new SecurityException("Cannot access individual system properties.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to create a
 | |
| 	 ** top-level window.  If it is not, the operation should
 | |
| 	 ** still go through, but some sort of nonremovable
 | |
| 	 ** warning should be placed on the window to show that it
 | |
| 	 ** is untrusted.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by Window.Window().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param window the window to create
 | |
| 	 ** @see java.awt.Window#Window(java.awt.Frame)
 | |
| 	 **/
 | |
| 	public boolean checkTopLevelWindow(Object window) {
 | |
| 	  return false;
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to create a
 | |
| 	 ** print job.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by Toolkit.getPrintJob().  (I
 | |
| 	 ** assume so, at least, it just don't say nothing about
 | |
| 	 ** it in the spec.)<P>
 | |
| 	 ** 
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.awt.Toolkit.getPrintJob(java.awt.Frame,java.lang.String,java.util.Properties)
 | |
| 	 **/
 | |
| 	public void checkPrintJobAccess() {
 | |
| 		throw new SecurityException("Cannot create print jobs.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to use the
 | |
| 	 ** system clipboard.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by Toolkit.getSystemClipboard().
 | |
| 	 ** (I assume.)<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.awt.Toolkit#getSystemClipboard()
 | |
| 	 **/
 | |
| 	public void checkSystemClipboardAccess() {
 | |
| 		throw new SecurityException("Cannot access the system clipboard.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to use the AWT
 | |
| 	 ** event queue.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by Toolkit.getSystemEventQueue().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.awt.Toolkit#getSystemEventQueue()
 | |
| 	 **/
 | |
| 	public void checkAwtEventQueueAccess() {
 | |
| 		throw new SecurityException("Cannot access the AWT event queue.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to access the
 | |
| 	 ** specified package at all.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by ClassLoader.loadClass() in
 | |
| 	 ** user-created ClassLoaders.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param packageName the package name to check access to
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.ClassLoader#loadClass(java.lang.String,boolean)
 | |
| 	 **/
 | |
| 	public void checkPackageAccess(String packageName) {
 | |
| 		throw new SecurityException("Cannot access packages via the ClassLoader.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to define
 | |
| 	 ** classes the specified package.  If the class already
 | |
| 	 ** created, though, ClassLoader.loadClass() can still
 | |
| 	 ** return the Class if checkPackageAccess() checks out.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by ClassLoader.loadClass() in
 | |
| 	 ** user-created ClassLoaders.<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param packageName the package name to check access to
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.ClassLoader#loadClass(java.lang.String,boolean)
 | |
| 	 **/
 | |
| 	public void checkPackageDefinition(String packageName) {
 | |
| 		throw new SecurityException("Cannot load classes into any packages via the ClassLoader.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to set the
 | |
| 	 ** current socket factory.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by Socket.setSocketImplFactory(),
 | |
| 	 ** ServerSocket.setSocketFactory(), and
 | |
| 	 ** URL.setURLStreamHandlerFactory().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
 | |
| 	 ** @see java.net.ServerSocket#setSocketFactory(java.net.SocketImplFactory)
 | |
| 	 ** @see java.net.URL#setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory)
 | |
| 	 **/
 | |
| 	public void checkSetFactory() {
 | |
| 		throw new SecurityException("Cannot set the socket factory.");
 | |
| 	}
 | |
| 
 | |
| 	/** Check if the current thread is allowed to get certain
 | |
| 	 ** types of Methods, Fields and Constructors from a Class
 | |
| 	 ** object.<P>
 | |
| 	 **
 | |
| 	 ** This method is called by Class.getMethod[s](),
 | |
| 	 ** Class.getField[s](), Class.getConstructor[s],
 | |
| 	 ** Class.getDeclaredMethod[s](),
 | |
| 	 ** Class.getDeclaredField[s](), and
 | |
| 	 ** Class.getDeclaredConstructor[s]().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation always denies access.
 | |
| 	 **
 | |
| 	 ** @param c the Class to check
 | |
| 	 ** @param memberType the type of members to check
 | |
| 	 **        against, either Member.DECLARED or
 | |
| 	 **        Member.PUBLIC.
 | |
| 	 ** @exception SecurityException if the operation is not
 | |
| 	 **            permitted.
 | |
| 	 ** @see java.lang.Class
 | |
| 	 ** @see java.lang.reflect.Member#DECLARED
 | |
| 	 ** @see java.lang.reflect.Member#PUBLIC
 | |
| 	 **/
 | |
| 	public void checkMemberAccess(Class c, int memberType) {
 | |
| 		throw new SecurityException("Cannot access members of classes.");
 | |
| 	}
 | |
| 
 | |
| 	/** Test whether a particular security action may be
 | |
| 	 ** taken.
 | |
| 	 ** @param action the desired action to take
 | |
| 	 ** @exception SecurityException if the action is denied.
 | |
| 	 ** @XXX I have no idea what actions must be tested
 | |
| 	 **      or where.
 | |
| 	 **/
 | |
| 	public void checkSecurityAccess(String action) {
 | |
| 		checkPermission (new java.security.SecurityPermission (action));
 | |
| 	}
 | |
| 
 | |
| 	/** Get the ThreadGroup that a new Thread should belong
 | |
| 	 ** to by default.<P>
 | |
| 	 **
 | |
| 	 ** Called by Thread.Thread().<P>
 | |
| 	 **
 | |
| 	 ** SecurityManager's implementation just uses the
 | |
| 	 ** ThreadGroup of the current Thread.<P>
 | |
| 	 **
 | |
| 	 ** <STRONG>Spec Note:</STRONG> it is not clear whether
 | |
| 	 ** the new Thread is guaranteed to pass the
 | |
| 	 ** checkAccessThreadGroup() test when using this
 | |
| 	 ** ThreadGroup.  I presume so.
 | |
| 	 **
 | |
| 	 ** @return the ThreadGroup to put the new Thread into.
 | |
| 	 **/
 | |
| 	public ThreadGroup getThreadGroup() {
 | |
| 		return Thread.currentThread().getThreadGroup();
 | |
| 	}
 | |
| 
 | |
| 	public SecurityManager () {
 | |
| 		if (System.getSecurityManager () != null)
 | |
| 			throw new SecurityException ();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| class SecurityContext {
 | |
| 	Class[] classes;
 | |
| 	SecurityContext(Class[] classes) {
 | |
| 		this.classes = classes;
 | |
| 	}
 | |
| }
 |