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:
committed by
Andrew Haley
parent
d2638db653
commit
019dac3214
@@ -45,6 +45,7 @@ import java.lang.reflect.Constructor;
|
||||
import java.rmi.NoSuchObjectException;
|
||||
import java.rmi.Remote;
|
||||
import java.rmi.UnmarshalException;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
public abstract class RemoteObject
|
||||
implements Remote, Serializable {
|
||||
@@ -53,6 +54,8 @@ public static final long serialVersionUID = -3215090123894869218l;
|
||||
|
||||
protected transient RemoteRef ref;
|
||||
|
||||
private static final WeakHashMap stubs = new WeakHashMap();
|
||||
|
||||
protected RemoteObject() {
|
||||
this(null);
|
||||
}
|
||||
@@ -65,21 +68,24 @@ public RemoteRef getRef() {
|
||||
return (ref);
|
||||
}
|
||||
|
||||
synchronized static void addStub(Remote obj, Remote stub)
|
||||
{
|
||||
stubs.put(obj, stub);
|
||||
}
|
||||
|
||||
synchronized static void deleteStub(Remote obj)
|
||||
{
|
||||
stubs.remove(obj);
|
||||
}
|
||||
|
||||
public static Remote toStub(Remote obj) throws NoSuchObjectException
|
||||
{
|
||||
Class cls = obj.getClass();
|
||||
String classname = cls.getName();
|
||||
ClassLoader cl = cls.getClassLoader();
|
||||
try
|
||||
{
|
||||
Class scls = cl.loadClass(classname + "_Stub");
|
||||
// JDK 1.2 stubs
|
||||
Class[] stubprototype = new Class[] { RemoteRef.class };
|
||||
Constructor con = scls.getConstructor(stubprototype);
|
||||
return (Remote)(con.newInstance(new Object[]{obj}));
|
||||
}
|
||||
catch (Exception e) {}
|
||||
throw new NoSuchObjectException(obj.getClass().getName());
|
||||
Remote stub = (Remote)stubs.get(obj);
|
||||
|
||||
if (stub == null)
|
||||
throw new NoSuchObjectException(obj.getClass().getName());
|
||||
|
||||
return stub;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
|
||||
@@ -98,7 +98,9 @@ public static RemoteStub exportObject(Remote obj) throws RemoteException {
|
||||
{
|
||||
sref = new UnicastServerRef(new ObjID (), port, ssf);
|
||||
}
|
||||
return (sref.exportObject (obj));
|
||||
Remote stub = sref.exportObject (obj);
|
||||
addStub(obj, stub);
|
||||
return stub;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,12 +118,15 @@ public static RemoteStub exportObject(Remote obj) throws RemoteException {
|
||||
{
|
||||
if (obj instanceof RemoteObject)
|
||||
{
|
||||
deleteStub(obj);
|
||||
UnicastServerRef sref = (UnicastServerRef)((RemoteObject)obj).getRef();
|
||||
return sref.unexportObject(obj, force);
|
||||
}
|
||||
else
|
||||
//FIX ME
|
||||
;
|
||||
{
|
||||
//FIX ME
|
||||
;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user