summaryrefslogtreecommitdiff
path: root/libjava/java/security
diff options
context:
space:
mode:
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2005-02-16 18:51:25 +0000
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2005-02-16 18:51:25 +0000
commita0134f4f9a316a9d8e34ea25238187c047ecce1f (patch)
tree72b158fdd213cd3c9d1c1c7c1c11b22e22998ca2 /libjava/java/security
parent96793571f3db37e64efb866a2264400239fd3459 (diff)
downloadgcc-a0134f4f9a316a9d8e34ea25238187c047ecce1f.tar.gz
2005-02-08 Andrew Haley <aph@redhat.com>
* javax/security/auth/Subject.java (doAsPrivileged): If acc is null, create a new AccessControlContext. * java/security/SecureClassLoader.java (protectionDomainCache): new field. (defineClass): Create a new protection domain and add it to our cache. * java/rmi/server/UnicastRemoteObject.java (exportObject): Call addStub() to keep track of the stub we've exported. (unexportObject): Call deleteStub(). * java/rmi/server/RemoteObject.java (stubs): New field. (addStub): New method. (deleteStub): New method. (toStub): Rewrite. * java/lang/VMCompiler.java (loadSharedLibrary): Pass true to findHelper (tryParents). * gnu/gcj/runtime/SharedLibLoader.java (SharedLibLoader): Likewise. * java/net/URLClassLoader.java (SoURLLoader): Likewise. * gnu/gcj/runtime/SharedLibHelper.java (SharedLibHelper): Pass ProtectionDomain. If tryParents is false, don't scan parent class loaders. * java/security/Permissions.java (PermissionsHash.implies): Iterate over the collection and invoke implies() on each element. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95111 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/security')
-rw-r--r--libjava/java/security/Permissions.java11
-rw-r--r--libjava/java/security/SecureClassLoader.java26
2 files changed, 33 insertions, 4 deletions
diff --git a/libjava/java/security/Permissions.java b/libjava/java/security/Permissions.java
index d44341c947a..ce63cc2cca2 100644
--- a/libjava/java/security/Permissions.java
+++ b/libjava/java/security/Permissions.java
@@ -228,9 +228,18 @@ class PermissionsHash extends PermissionCollection
* @param perm the permission to check
* @return true if it is implied
*/
+ // FIXME: Should this method be synchronized?
public boolean implies(Permission perm)
{
- return perms.get(perm) != null;
+ Enumeration elements = elements();
+
+ while (elements.hasMoreElements())
+ {
+ Permission p = (Permission)elements.nextElement();
+ if (p.implies(perm))
+ return true;
+ }
+ return false;
}
/**
diff --git a/libjava/java/security/SecureClassLoader.java b/libjava/java/security/SecureClassLoader.java
index 7546edc85e5..89b5e4effce 100644
--- a/libjava/java/security/SecureClassLoader.java
+++ b/libjava/java/security/SecureClassLoader.java
@@ -48,6 +48,8 @@ package java.security;
*/
public class SecureClassLoader extends ClassLoader
{
+ java.util.WeakHashMap protectionDomainCache = new java.util.WeakHashMap();
+
protected SecureClassLoader(ClassLoader parent)
{
super(parent);
@@ -80,11 +82,29 @@ public class SecureClassLoader extends ClassLoader
protected final Class defineClass(String name, byte[] b, int off, int len,
CodeSource cs)
{
- // FIXME: Need to cache ProtectionDomains according to 1.3 docs.
if (cs != null)
{
- ProtectionDomain protectionDomain
- = new ProtectionDomain(cs, getPermissions(cs), this, null);
+ ProtectionDomain protectionDomain;
+
+ synchronized (protectionDomainCache)
+ {
+ protectionDomain = (ProtectionDomain)protectionDomainCache.get(cs);
+ }
+
+ if (protectionDomain == null)
+ {
+ protectionDomain
+ = new ProtectionDomain(cs, getPermissions(cs), this, null);
+ synchronized (protectionDomainCache)
+ {
+ ProtectionDomain domain
+ = (ProtectionDomain)protectionDomainCache.get(cs);
+ if (domain == null)
+ protectionDomainCache.put(cs, protectionDomain);
+ else
+ protectionDomain = domain;
+ }
+ }
return super.defineClass(name, b, off, len, protectionDomain);
}
else