提交 28e4321a 编写于 作者: C chegar

Merge

...@@ -26,6 +26,10 @@ ...@@ -26,6 +26,10 @@
package javax.security.auth; package javax.security.auth;
import java.security.Security; import java.security.Security;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;
import java.util.Objects;
import sun.security.util.Debug; import sun.security.util.Debug;
/** /**
...@@ -155,22 +159,15 @@ import sun.security.util.Debug; ...@@ -155,22 +159,15 @@ import sun.security.util.Debug;
public abstract class Policy { public abstract class Policy {
private static Policy policy; private static Policy policy;
private static ClassLoader contextClassLoader;
private final static String AUTH_POLICY = private final static String AUTH_POLICY =
"sun.security.provider.AuthPolicyFile"; "sun.security.provider.AuthPolicyFile";
private final java.security.AccessControlContext acc =
java.security.AccessController.getContext();
// true if a custom (not AUTH_POLICY) system-wide policy object is set // true if a custom (not AUTH_POLICY) system-wide policy object is set
private static boolean isCustomPolicy; private static boolean isCustomPolicy;
static {
contextClassLoader = java.security.AccessController.doPrivileged
(new java.security.PrivilegedAction<ClassLoader>() {
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
});
};
/** /**
* Sole constructor. (For invocation by subclass constructors, typically * Sole constructor. (For invocation by subclass constructors, typically
* implicit.) * implicit.)
...@@ -213,8 +210,8 @@ public abstract class Policy { ...@@ -213,8 +210,8 @@ public abstract class Policy {
if (policy == null) { if (policy == null) {
String policy_class = null; String policy_class = null;
policy_class = java.security.AccessController.doPrivileged policy_class = AccessController.doPrivileged
(new java.security.PrivilegedAction<String>() { (new PrivilegedAction<String>() {
public String run() { public String run() {
return java.security.Security.getProperty return java.security.Security.getProperty
("auth.policy.provider"); ("auth.policy.provider");
...@@ -226,18 +223,28 @@ public abstract class Policy { ...@@ -226,18 +223,28 @@ public abstract class Policy {
try { try {
final String finalClass = policy_class; final String finalClass = policy_class;
policy = java.security.AccessController.doPrivileged
(new java.security.PrivilegedExceptionAction<Policy>() { Policy untrustedImpl = AccessController.doPrivileged(
public Policy run() throws ClassNotFoundException, new PrivilegedExceptionAction<Policy>() {
InstantiationException, public Policy run() throws ClassNotFoundException,
IllegalAccessException { InstantiationException,
return (Policy) Class.forName IllegalAccessException {
(finalClass, Class<? extends Policy> implClass = Class.forName(
true, finalClass, false,
contextClassLoader).newInstance(); Thread.currentThread().getContextClassLoader()
} ).asSubclass(Policy.class);
}); return implClass.newInstance();
isCustomPolicy = !finalClass.equals(AUTH_POLICY); }
});
AccessController.doPrivileged(
new PrivilegedExceptionAction<Void>() {
public Void run() {
setPolicy(untrustedImpl);
isCustomPolicy = !finalClass.equals(AUTH_POLICY);
return null;
}
}, Objects.requireNonNull(untrustedImpl.acc)
);
} catch (Exception e) { } catch (Exception e) {
throw new SecurityException throw new SecurityException
(sun.security.util.ResourcesMgr.getString (sun.security.util.ResourcesMgr.getString
......
...@@ -27,9 +27,6 @@ package javax.security.auth.login; ...@@ -27,9 +27,6 @@ package javax.security.auth.login;
import javax.security.auth.AuthPermission; import javax.security.auth.AuthPermission;
import java.io.*;
import java.util.*;
import java.net.URI;
import java.security.AccessController; import java.security.AccessController;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction; import java.security.PrivilegedExceptionAction;
...@@ -38,7 +35,7 @@ import java.security.NoSuchAlgorithmException; ...@@ -38,7 +35,7 @@ import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException; import java.security.NoSuchProviderException;
import java.security.Provider; import java.security.Provider;
import java.security.Security; import java.security.Security;
import java.security.SecurityPermission; import java.util.Objects;
import sun.security.jca.GetInstance; import sun.security.jca.GetInstance;
...@@ -191,16 +188,9 @@ import sun.security.jca.GetInstance; ...@@ -191,16 +188,9 @@ import sun.security.jca.GetInstance;
public abstract class Configuration { public abstract class Configuration {
private static Configuration configuration; private static Configuration configuration;
private static ClassLoader contextClassLoader;
static { private final java.security.AccessControlContext acc =
contextClassLoader = AccessController.doPrivileged java.security.AccessController.getContext();
(new PrivilegedAction<ClassLoader>() {
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
});
};
private static void checkPermission(String type) { private static void checkPermission(String type) {
SecurityManager sm = System.getSecurityManager(); SecurityManager sm = System.getSecurityManager();
...@@ -253,17 +243,26 @@ public abstract class Configuration { ...@@ -253,17 +243,26 @@ public abstract class Configuration {
try { try {
final String finalClass = config_class; final String finalClass = config_class;
configuration = AccessController.doPrivileged Configuration untrustedImpl = AccessController.doPrivileged(
(new PrivilegedExceptionAction<Configuration>() { new PrivilegedExceptionAction<Configuration>() {
public Configuration run() throws ClassNotFoundException, public Configuration run() throws ClassNotFoundException,
InstantiationException, InstantiationException,
IllegalAccessException { IllegalAccessException {
return (Configuration)Class.forName Class<? extends Configuration> implClass = Class.forName(
(finalClass, finalClass, false,
true, Thread.currentThread().getContextClassLoader()
contextClassLoader).newInstance(); ).asSubclass(Configuration.class);
} return implClass.newInstance();
}); }
});
AccessController.doPrivileged(
new PrivilegedExceptionAction<Void>() {
public Void run() {
setConfiguration(untrustedImpl);
return null;
}
}, Objects.requireNonNull(untrustedImpl.acc)
);
} catch (PrivilegedActionException e) { } catch (PrivilegedActionException e) {
Exception ee = e.getException(); Exception ee = e.getException();
if (ee instanceof InstantiationException) { if (ee instanceof InstantiationException) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册