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
+15 -6
View File
@@ -28,13 +28,15 @@ public class SharedLibHelper
* @parem flags passed to dlopen
*/
SharedLibHelper(String libname, ClassLoader parent, CodeSource source,
int flags)
ProtectionDomain domain, int flags)
{
// FIXME: ask security manager first.
loader = parent;
baseName = libname;
domain = new ProtectionDomain(source,
Policy.getPolicy().getPermissions(source));
if (domain == null)
domain = new ProtectionDomain(source,
Policy.getPolicy().getPermissions(source));
this.domain = domain;
this.flags = flags;
}
@@ -65,7 +67,14 @@ public class SharedLibHelper
}
public static SharedLibHelper findHelper (ClassLoader loader, String libname,
CodeSource source)
CodeSource source, boolean tryParents)
{
return findHelper (loader, libname, source, null, tryParents);
}
public static SharedLibHelper findHelper (ClassLoader loader, String libname,
CodeSource source, ProtectionDomain domain,
boolean tryParents)
{
synchronized (map)
{
@@ -95,7 +104,7 @@ public class SharedLibHelper
return result;
l = l.getParent();
}
while (l != null);
while (tryParents && l != null);
}
}
}
@@ -116,7 +125,7 @@ public class SharedLibHelper
return null;
}
}
result = new SharedLibHelper(libname, loader, source, 0);
result = new SharedLibHelper(libname, loader, source, domain, 0);
s.add(new WeakReference(result));
return result;
}