decl.c (init_decl_processing): Add new class "protectionDomain" field.

gcc/java:

2001-04-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>

	* decl.c (init_decl_processing): Add new class "protectionDomain"
	field.
	* class.c (make_class_data): Set initial value for "protectionDomain".

libjava:

2001-04-25  Bryce McKinlay  <bryce@albatross.co.nz>

	java.security merge and ClassLoader compliance fixes.

	* java/lang/Class.h (Class): Include ProtectionDomain.h.
	New protectionDomain field.
	(forName): Add initialize parameter. Fixes declaration to comply with
	JDK spec.
	* java/lang/natClass.cc (forName): Correct declaration of the three-arg
	variant. Honour	"initialize" flag.
	(getProtectionDomain0): New method.
	* java/lang/Class.java: Fix forName() declaration.
	(getPackage): New method based on Classpath implementation.
	(getProtectionDomain0): New native method decl.
	(getProtectionDomain): New method.
	* java/lang/ClassLoader.java (getParent): Now final.
	(definedPackages): New field.
	(getPackage): New.
	(defineClass): New variant with protectionDomain argument.
	(definePackage): New.
	(getPackages): New.
	(findSystemClass): Now final.
	(getSystemResourceAsStream): Remove redundant "final" modifier.
	(getSystemResource): Remove redundant "final" modifier.
	(getResources): Now final.
	(protectionDomainPermission): New static field.
	(unknownProtectionDomain): Ditto.
	(defaultProtectionDomain): Ditto.
	(getSystemClassLoader): Now non-native.
	* java/util/ResourceBundle.java (tryGetSomeBundle): Use the correct
	arguments for Class.forName().
	* java/lang/Package.java: New file.
	* gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): Removed.
	(instance): Static initialize singleton.
	(findClass): Override this, not findSystemClass.
	* java/lang/natClassLoader.cc (defineClass0): Set class's
	protectionDomain field as specified.
	(getSystemClassLoader): Removed.
	(findClass): Renamed from findSystemClass. Call the interpreter via
	URLClassLoader.findClass if loading class via dlopen fails.

	* java/security/*.java: java.security import/merge with Classpath.
	* java/security/acl/*.java: Likewise.
	* java/security/interfaces/*.java: Likewise.
	* java/security/spec/*.java: Likewise.
	* java/net/NetPermission.java: Likewise.
	* java/net/SocketPermission.java: Likewise.
	* gnu/java/security/provider/DefaultPolicy.java: Likewise.

	* Makefile.am: Add new classes.
	* Makefile.in: Rebuilt.
	* gcj/javaprims.h: CNI namespace rebuild.

From-SVN: r41543
This commit is contained in:
Bryce McKinlay
2001-04-25 16:45:15 +01:00
parent 744cfa53c3
commit 28f7d9d05a
115 changed files with 11887 additions and 1549 deletions
+138
View File
@@ -0,0 +1,138 @@
/* Acl.java -- An access control list
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.security.acl;
import java.security.Principal;
import java.util.Enumeration;
/**
* A Java access control list (ACL) is a group of individual ACL entries.
* These entries consist of a <code>Principal</code> and a list of
* permissions this <code>Principal</code> is either granted or denied.
* A given <code>Principal</code> can have at most one positive ACL entry
* (i.e., one that grants permissions) and one negative ACL entry (i.e., one
* that denies permissions). If a given permission is both granted and
* denied, the ACL treats it as if it were never granted or denied. If
* both a <code>Principal</code> and a <code>Group</code> to which the
* <code>Principal</code> belongs have an ACL entry, the permissions for
* the individual <code>Principal</code> take precedence over the
* permissions of the <code>Group</code> if there is a conflict.
* <p
* Additionally, the ACL interface extends the <code>Owner</code> interface
* and so an ACL has owners. Actions which modify the ACL are restricted
* to owners.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface Acl extends Owner
{
/**
* This method returns the name of this ACL.
*
* @return The name of this ACL
*/
public abstract String getName();
/**
* This method sets the name of the ACL
*
* @param caller The <code>Principal</code> requesting the action.
* @param name The new name for this ACL.
*
* @exception NotOwnerException If the caller is not an owner of this ACL.
*/
public abstract void setName(Principal caller, String name)
throws NotOwnerException;
/**
* This method adds the specified entry to the ACL
*
* @param caller The <code>Principal</code> requesting the addition
* @param entry The ACL entry to add
*
* @return <code>true</code> if the entry was added, <code>false</code> if there is already an entry of the same type for the <code>Principal</code>.
*
* @exception NotOwnerException If the caller is not an owner of this ACL.
*/
public abstract boolean addEntry(Principal caller, AclEntry entry)
throws NotOwnerException;
/**
* This method delets the specified entry from the ACL
*
* @param caller The <code>Principal</code> requesting the deletion.
* @param entry The ACL entry to delete
*
* @return <code>true</code> if the entry was deleted, or <code>false</code> if this entry was not part of the ACL to begin with
*
* @exception NotOwnerException If the caller is not an owner of this ACL.
*/
public abstract boolean removeEntry(Principal caller, AclEntry entry)
throws NotOwnerException;
/**
* This method returns a list of all the entries in the ACL as an
* <code>Enumeration</code>.
*
* @return An enumeration of the ACL entries
*/
public abstract Enumeration entries();
/**
* This method tests whether or not the specified <code>Principal</code>
* has the specified <code>Permission</code>
*
* @param user The <code>Principal</code> to test
* @param perm The <code>Permission</code> to test for
*
* @return <code>true</code> if the user has been granted the permission, <code>false</code> otherwise
*/
public abstract boolean checkPermission(Principal user, Permission perm);
/**
* This method returns a list of <code>Permission</code>'s that are granted
* to a particular <code>Principal</code>. This includes any permissions
* that are granted to <code>Group</code>'s to which the <code>Principal</code>
* belongs unless they are overridden by a negative ACL. This permission
* list is returned as an <code>Enumeration</code>.
*
* @param user The <code>Principal</code> to retrieve permissions for.
*
* @return A list of permissions for the <code>Principal</code>.
*/
public abstract Enumeration getPermissions(Principal user);
/**
* This method returns the ACL as a <code>String</code>
*
* @return A <code>String</code> representation of this ACL
*/
public abstract String toString();
}
+132
View File
@@ -0,0 +1,132 @@
/* AclEntry.java -- An entry in an ACL list.
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.security.acl;
import java.security.Principal;
import java.util.Enumeration;
/**
* This interface models an entry in an access control list (ACL). Java
* ACL's consist of a list of entries, where each consists of a
* <code>Principal</code> and a list of <code>Permission</code>'s which
* have been granted to that <code>Principal</code>. An ACL can also
* be <em>negative</em>, which indicates that the list of
* <code>Permission</code>'s is a list of permissions that are <em>not</em>
* granted to the <code>Principal</code>. A <code>Principal</code> can
* have at most one regular (or positive) ACL entry and one negative
* ACL entry.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface AclEntry extends Cloneable
{
/**
* This method returns the <code>Principal</code> associated with this
* ACL entry.
*
* @return The <code>Principal</code> for this ACL entry
*/
public abstract Principal getPrincipal();
/**
* This method sets ths <code>Principal</code> associated with this
* ACL entry. This operation will only succeed if there is not already
* a <code>Principal</code> assigned.
*
* @param user The <code>Principal</code> for this ACL entry
*
* @return <code>true</code> if the <code>Principal</code> was successfully set or <code>false</code> if this entry already has a <code>Principal</code>.
*/
public abstract boolean setPrincipal(Principal user);
/**
* This method sets this ACL entry to be a <em>negative</em> entry, indicating
* that it contains a list of permissions that are <em>not</em> granted
* to the entry's <code>Principal</code>. Note that there is no way to
* undo this operation.
*/
public abstract void setNegativePermissions();
/**
* This method tests whether or not this ACL entry is a negative entry or not.
*
* @return <code>true</code> if this ACL entry is negative, <code>false</code> otherwise
*/
public abstract boolean isNegative();
/**
* This method adds the specified permission to this ACL entry.
*
* @param perm The <code>Permission</code> to add
*
* @return <code>true</code> if the permission was added or <code>false</code> if it was already set for this entry
*/
public abstract boolean addPermission(Permission permission);
/**
* This method deletes the specified permission to this ACL entry.
*
* @param perm The <code>Permission</code> to delete from this ACL entry.
*
* @return <code>true</code> if the permission was successfully deleted or <code>false</code> if the permission was not part of this ACL to begin with
*/
public abstract boolean removePermission(Permission perm);
/**
* This method tests whether or not the specified permission is associated
* with this ACL entry.
*
* @param perm The <code>Permission</code> to test
*
* @return <code>true</code> if this permission is associated with this entry or <code>false</code> otherwise
*/
public abstract boolean checkPermission(Permission permission);
/**
* This method returns a list of all <code>Permission</code> objects
* associated with this ACL entry as an <code>Enumeration</code>.
*
* @return A list of permissions for this ACL entry
*/
public abstract Enumeration permissions();
/**
* This method returns this object as a <code>String</code>.
*
* @return A <code>String</code> representation of this object
*/
public abstract String toString();
/**
* This method returns a clone of this ACL entry
*
* @return A clone of this ACL entry
*/
public abstract Object clone();
}
@@ -0,0 +1,46 @@
/* AclNotFoundException.java -- What it says
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.security.acl;
/**
* This exception is thrown when a requested access control list (ACL) is
* not found.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class AclNotFoundException extends Exception
{
/**
* Initializes a new instance of this class with no descriptive message
*/
public AclNotFoundException()
{
super();
}
}
+79
View File
@@ -0,0 +1,79 @@
/* Group.java -- Represents a group of Principals
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.security.acl;
import java.security.Principal;
import java.util.Enumeration;
/**
* This interface represents a group of <code>Principals</code>. Note that
* since this interface extends <code>Principal</code>, a <code>Group</code>
* can be used where ever a <code>Principal</code> is requested. This
* includes arguments to the methods in this interface.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface Group
{
/**
* This method adds a new <code>Principal</code> to this group.
*
* @param user The new <code>Principal</code> to add
*
* @return <code>true</code> if the user was successfully added or <code>false</code> if the user is already a member
*/
public abstract boolean addMember(Principal user);
/**
* This method deletes a member from the group.
*
* @param user The <code>Principal</code> to delete
*
* @return <code>true</code> if the user was successfully deleted or <code>false</code> if the user is not a member of the group
*/
public abstract boolean removeMember(Principal user);
/**
* This method tests whether or not a given <code>Principal</code> is a
* member of this group.
*
* @param user The <code>Principal</code> to test for membership
*
* @return <code>true</code> if the user is member, <code>false</code> otherwise
*/
public abstract boolean isMember();
/**
* This method returns a list of all members of the group as an
* <code>Enumeration</code>.
*
* @return The list of all members of the group
*/
public abstract Enumeration members();
}
@@ -0,0 +1,47 @@
/* LastOwnerException.java -- User attempted to delete last ACL owner
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.security.acl;
/**
* This exception is thrown when an attempt is made to delete the last owner
* of an access control list (ACL)
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class LastOwnerException extends java.lang.Exception
{
/**
* Initialize a new instance of <code>LastOwnerException</code> that does
* not have a log message.
*/
public LastOwnerException()
{
super();
}
}
@@ -0,0 +1,49 @@
/* NotOwnerException.java -- Attempt to modify an unowned ACL
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.security.acl;
/**
* This exception is thrown whenever an operation is attempted that requires
* the caller to be the owner of the access control list (ACL) when the caller
* is in fact not the owner of the ACL.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class NotOwnerException extends java.lang.Exception
{
/**
* Initializes a new instance of <code>NotOwnerException</code> that does
* not have a descriptive message.
*/
public NotOwnerException()
{
super();
}
}
+84
View File
@@ -0,0 +1,84 @@
/* Owner.java -- ACL owner
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.security.acl;
import java.security.Principal;
/**
* This interface provides a mechanism for maintaining a list of owners
* of an access control list (ACL). Since a <code>Principal</code> must
* be an owner in order to modify the owner list, a mechanism must be
* provided to specify the initial owner of the ACL. The proper way to do
* this is for the implementing class to specify the initial owner in
* the contructor for that class.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface Owner
{
/**
* This method adds an owner to the access control list (ACL). Only a
* <code>Principal</code> who is already an owner can perform this operation.
*
* @param caller The <code>Principal</code> who is requesting that an owner be added
* @param owner The <code>Principal</code> to add as a new owner
*
* @param <code>true</code> if the new owner was successfully added or <code>false</code> if the specified new owner is already an owner
*
* @exception NotOwnerException If the caller is not already an owner of this ACL
*/
public abstract boolean addOwner(Principal caller, Principal owner)
throws NotOwnerException;
/**
* This method delets an owner from the access control list (ACL). Only a
* <code>Principal</code> who is an owner can perform this operation. An
* owner can delete itself from the list. If there is only one
* owner remaining on this list, any attempt to delete it will throw an
* exception.
*
* @param caller The <code>Principal</code> who is requesting that an owner be deleted
* @param owner The <code>Principal</code> to delete as an owner
*
* @param <code>true</code> if the new owner was successfully deleted or <code>false</code> if the specified owner is not currently an owner
*
* @exception NotOwnerException If the caller is not already an owner of this ACL
* @exception LastOwnerException If completing the operation would delete the last ACL owner
*/
public abstract boolean deleteOwner(Principal caller, Principal owner)
throws NotOwnerException, LastOwnerException;
/**
* This method tests whether or not a given <code>Principal</code> is an
* owner of this access control list (ACL).
*
* @return <code>true</code> if the <code>Principal</code> is an owner, <code>false</code> otherwise
*/
public abstract boolean isOwner(Principal owner);
}
+56
View File
@@ -0,0 +1,56 @@
/* Permission.java -- Information about an ACL permission
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.security.acl;
/**
* This interface provides information about a permission that can be
* granted. Note that this is <em>not</em> the same as the class
* <code>java.security.Permission</code>.
*
* @version 0.0
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface Permission
{
/**
* This method tests whether or not a specified <code>Permission</code>
* (passed as an <code>Object</code>) is the same as this permission.
*
* @param perm The permission to check for equality
*
* @return <code>true</code> if the specified permission is the same as this one, <code>false</code> otherwise
*/
public abstract boolean equals(Object perm);
/**
* This method returns this <code>Permission</code> as a <code>String</code>.
*
* @return A <code>String</code> representing this permission.
*/
public String toString();
}