提交 2aedf226 编写于 作者: I igerasim

8147771: Construction of static protection domains under Javax custom policy

Summary: Changed SubjectDomainCombiner to combine static PD as is even when custom policy is enabled.
Reviewed-by: valeriep
上级 71323e8a
...@@ -475,6 +475,11 @@ public class ProtectionDomain { ...@@ -475,6 +475,11 @@ public class ProtectionDomain {
} }
}; };
} }
@Override
public boolean getStaticPermissionsField(ProtectionDomain pd) {
return pd.staticPermissions;
}
}); });
} }
} }
/* /*
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -37,6 +37,8 @@ import java.security.Security; ...@@ -37,6 +37,8 @@ import java.security.Security;
import java.util.Set; import java.util.Set;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import sun.misc.SharedSecrets;
import sun.misc.JavaSecurityProtectionDomainAccess;
/** /**
* A {@code SubjectDomainCombiner} updates ProtectionDomains * A {@code SubjectDomainCombiner} updates ProtectionDomains
...@@ -65,6 +67,9 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner { ...@@ -65,6 +67,9 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
private static final boolean allowCaching = private static final boolean allowCaching =
(useJavaxPolicy && cachePolicy()); (useJavaxPolicy && cachePolicy());
private static final JavaSecurityProtectionDomainAccess pdAccess =
SharedSecrets.getJavaSecurityProtectionDomainAccess();
/** /**
* Associate the provided {@code Subject} with this * Associate the provided {@code Subject} with this
* {@code SubjectDomainCombiner}. * {@code SubjectDomainCombiner}.
...@@ -239,10 +244,16 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner { ...@@ -239,10 +244,16 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
subjectPd = cachedPDs.getValue(pd); subjectPd = cachedPDs.getValue(pd);
if (subjectPd == null) { if (subjectPd == null) {
if (pdAccess.getStaticPermissionsField(pd)) {
// Need to keep static ProtectionDomain objects static
subjectPd = new ProtectionDomain(pd.getCodeSource(),
pd.getPermissions());
} else {
subjectPd = new ProtectionDomain(pd.getCodeSource(), subjectPd = new ProtectionDomain(pd.getCodeSource(),
pd.getPermissions(), pd.getPermissions(),
pd.getClassLoader(), pd.getClassLoader(),
principals); principals);
}
cachedPDs.putValue(pd, subjectPd); cachedPDs.putValue(pd, subjectPd);
} else { } else {
allNew = false; allNew = false;
...@@ -341,7 +352,11 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner { ...@@ -341,7 +352,11 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
ProtectionDomain subjectPd = cachedPDs.getValue(pd); ProtectionDomain subjectPd = cachedPDs.getValue(pd);
if (subjectPd == null) { if (subjectPd == null) {
if (pdAccess.getStaticPermissionsField(pd)) {
// keep static ProtectionDomain objects static
subjectPd = new ProtectionDomain(pd.getCodeSource(),
pd.getPermissions());
} else {
// XXX // XXX
// we must first add the original permissions. // we must first add the original permissions.
// that way when we later add the new JAAS permissions, // that way when we later add the new JAAS permissions,
...@@ -364,7 +379,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner { ...@@ -364,7 +379,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
} }
// get perms from the policy // get perms from the policy
final java.security.CodeSource finalCs = pd.getCodeSource(); final java.security.CodeSource finalCs = pd.getCodeSource();
final Subject finalS = subject; final Subject finalS = subject;
PermissionCollection newPerms = PermissionCollection newPerms =
...@@ -394,7 +408,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner { ...@@ -394,7 +408,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
} }
subjectPd = new ProtectionDomain subjectPd = new ProtectionDomain
(finalCs, perms, pd.getClassLoader(), principals); (finalCs, perms, pd.getClassLoader(), principals);
}
if (allowCaching) if (allowCaching)
cachedPDs.putValue(pd, subjectPd); cachedPDs.putValue(pd, subjectPd);
} }
......
...@@ -36,4 +36,9 @@ public interface JavaSecurityProtectionDomainAccess { ...@@ -36,4 +36,9 @@ public interface JavaSecurityProtectionDomainAccess {
* Returns the ProtectionDomainCache. * Returns the ProtectionDomainCache.
*/ */
ProtectionDomainCache getProtectionDomainCache(); ProtectionDomainCache getProtectionDomainCache();
/**
* Returns the staticPermissions field of the specified object
*/
boolean getStaticPermissionsField(ProtectionDomain pd);
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册