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
This commit is contained in:
Andrew Haley
2005-02-16 18:51:25 +00:00
committed by Andrew Haley
parent d2638db653
commit 019dac3214
10 changed files with 115 additions and 30 deletions
+10 -1
View File
@@ -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;
}
/**
+23 -3
View File
@@ -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