PR libgcj/46774: Create dynamic ProtectionDomain instances which check the system policy.

2010-12-13  Andrew John Hughes  <ahughes@redhat.com>

	PR libgcj/46774
	* libjava/java/security/VMAccessController.java:
	(DEFAULT_CONTEXT): Create ProtectionDomain with
	four argument constructor (arguments are the same
	as those implied by the two argument constructor).
	(getContext()): Create ProtectionDomain instances
	with four argument constructor using a null Principal
	array (as before) but including the classloader, which
	was always null before.

From-SVN: r167952
This commit is contained in:
Andrew John Hughes 2010-12-16 19:48:07 +00:00 committed by Andrew John Hughes
parent ef875e12c7
commit ffafe01a87
3 changed files with 21 additions and 7 deletions

View File

@ -1,3 +1,15 @@
2010-12-13 Andrew John Hughes <ahughes@redhat.com>
PR libgcj/46774
* libjava/java/security/VMAccessController.java:
(DEFAULT_CONTEXT): Create ProtectionDomain with
four argument constructor (arguments are the same
as those implied by the two argument constructor).
(getContext()): Create ProtectionDomain instances
with four argument constructor using a null Principal
array (as before) but including the classloader, which
was always null before.
2010-12-06 Dave Korn <dave.korn.cygwin@gmail.com>
PR target/40125

View File

@ -56,7 +56,7 @@ final class VMAccessController
Permissions permissions = new Permissions();
permissions.add(new AllPermission());
ProtectionDomain[] domain = new ProtectionDomain[] {
new ProtectionDomain(source, permissions)
new ProtectionDomain(source, permissions, null, null)
};
DEFAULT_CONTEXT = new AccessControlContext(domain);
}
@ -121,7 +121,7 @@ final class VMAccessController
LinkedList stack = state.getContexts();
if (!stack.isEmpty())
{
stack.removeFirst();
stack.removeFirst();
}
else if (DEBUG)
{
@ -178,26 +178,27 @@ final class VMAccessController
for (int i = 3; i < classes.length; i++)
{
Class clazz = classes[i];
ClassLoader loader = clazz.getClassLoader();
if (DEBUG)
{
debug("checking " + clazz);
// subject to getClassLoader RuntimePermission
debug("loader = " + clazz.getClassLoader());
debug("loader = " + loader);
}
if (privileged && i == classes.length - 2)
{
// If there was a call to doPrivileged with a supplied context,
// return that context. If using JAAS doAs*, it should be
// a context with a SubjectDomainCombiner
// return that context. If using JAAS doAs*, it should be
// a context with a SubjectDomainCombiner
LinkedList l = state.getContexts();
if (!l.isEmpty())
context = (AccessControlContext) l.getFirst();
}
// subject to getProtectionDomain RuntimePermission
ProtectionDomain domain = clazz.getProtectionDomain();
ProtectionDomain domain = clazz.getProtectionDomain();
if (domain == null)
continue;
@ -208,7 +209,8 @@ final class VMAccessController
// Create a static snapshot of this domain, which may change over time
// if the current policy changes.
domains.add(new ProtectionDomain(domain.getCodeSource(),
domain.getPermissions()));
domain.getPermissions(),
loader, null));
}
if (DEBUG)