diff options
author | Andrew Haley <aph@redhat.com> | 2005-02-16 18:51:25 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2005-02-16 18:51:25 +0000 |
commit | 019dac321407d9048889e41e400cdb6381924b77 (patch) | |
tree | 72b158fdd213cd3c9d1c1c7c1c11b22e22998ca2 /libjava/java/security/SecureClassLoader.java | |
parent | d2638db6537096c72a93d820748b2b9d3bba88ab (diff) | |
download | gcc-019dac321407d9048889e41e400cdb6381924b77.zip gcc-019dac321407d9048889e41e400cdb6381924b77.tar.gz gcc-019dac321407d9048889e41e400cdb6381924b77.tar.bz2 |
Subject.java (doAsPrivileged): If acc is null, create a new AccessControlContext.
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.
From-SVN: r95111
Diffstat (limited to 'libjava/java/security/SecureClassLoader.java')
-rw-r--r-- | libjava/java/security/SecureClassLoader.java | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/libjava/java/security/SecureClassLoader.java b/libjava/java/security/SecureClassLoader.java index 7546edc..89b5e4e 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 |