-
Notifications
You must be signed in to change notification settings - Fork 629
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ISPN-3931 Use a SecurityManager to track security from internal classes
- Loading branch information
1 parent
a39af35
commit d46c658
Showing
51 changed files
with
1,602 additions
and
280 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
81 changes: 81 additions & 0 deletions
81
cli/cli-server/src/main/java/org/infinispan/cli/interpreter/SecurityActions.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
package org.infinispan.cli.interpreter; | ||
|
||
import java.security.AccessController; | ||
import java.security.PrivilegedAction; | ||
|
||
/** | ||
* SecurityActions for package org.infinispan.cli.interpreter | ||
* | ||
* Do not move. Do not change class and method visibility to avoid being called from other | ||
* {@link java.security.CodeSource}s, thus granting privilege escalation to external code. | ||
* | ||
* @author Tristan Tarrant | ||
* @since 7.0 | ||
*/ | ||
final class SecurityActions { | ||
interface SetThreadContextClassLoaderAction { | ||
|
||
ClassLoader setThreadContextClassLoader(Class cl); | ||
|
||
ClassLoader setThreadContextClassLoader(ClassLoader cl); | ||
|
||
SetThreadContextClassLoaderAction NON_PRIVILEGED = new SetThreadContextClassLoaderAction() { | ||
@Override | ||
public ClassLoader setThreadContextClassLoader(Class cl) { | ||
ClassLoader old = Thread.currentThread().getContextClassLoader(); | ||
Thread.currentThread().setContextClassLoader(cl.getClassLoader()); | ||
return old; | ||
} | ||
|
||
@Override | ||
public ClassLoader setThreadContextClassLoader(ClassLoader cl) { | ||
ClassLoader old = Thread.currentThread().getContextClassLoader(); | ||
Thread.currentThread().setContextClassLoader(cl); | ||
return old; | ||
} | ||
}; | ||
|
||
SetThreadContextClassLoaderAction PRIVILEGED = new SetThreadContextClassLoaderAction() { | ||
|
||
@Override | ||
public ClassLoader setThreadContextClassLoader(final Class cl) { | ||
return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { | ||
@Override | ||
public ClassLoader run() { | ||
ClassLoader old = Thread.currentThread().getContextClassLoader(); | ||
Thread.currentThread().setContextClassLoader(cl.getClassLoader()); | ||
return old; | ||
} | ||
}); | ||
} | ||
|
||
@Override | ||
public ClassLoader setThreadContextClassLoader(final ClassLoader cl) { | ||
return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { | ||
@Override | ||
public ClassLoader run() { | ||
ClassLoader old = Thread.currentThread().getContextClassLoader(); | ||
Thread.currentThread().setContextClassLoader(cl); | ||
return old; | ||
} | ||
}); | ||
} | ||
}; | ||
} | ||
|
||
public static ClassLoader setThreadContextClassLoader(Class cl) { | ||
if (System.getSecurityManager() == null) { | ||
return SetThreadContextClassLoaderAction.NON_PRIVILEGED.setThreadContextClassLoader(cl); | ||
} else { | ||
return SetThreadContextClassLoaderAction.PRIVILEGED.setThreadContextClassLoader(cl); | ||
} | ||
} | ||
|
||
public static ClassLoader setThreadContextClassLoader(ClassLoader cl) { | ||
if (System.getSecurityManager() == null) { | ||
return SetThreadContextClassLoaderAction.NON_PRIVILEGED.setThreadContextClassLoader(cl); | ||
} else { | ||
return SetThreadContextClassLoaderAction.PRIVILEGED.setThreadContextClassLoader(cl); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 changes: 100 additions & 0 deletions
100
client/hotrod-client/src/main/java/org/infinispan/client/hotrod/SecurityActions.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
package org.infinispan.client.hotrod; | ||
|
||
import java.security.AccessController; | ||
import java.security.PrivilegedAction; | ||
|
||
/** | ||
* Privileged actions for package org.infinispan.client.hotrod | ||
* | ||
* Do not move. Do not change class and method visibility to avoid being called from other | ||
* {@link java.security.CodeSource}s, thus granting privilege escalation to external code. | ||
* | ||
* @author Scott.Stark@jboss.org | ||
* @since 4.2 | ||
*/ | ||
final class SecurityActions { | ||
|
||
interface SysProps { | ||
|
||
SysProps NON_PRIVILEGED = new SysProps() { | ||
@Override | ||
public String getProperty(final String name, final String defaultValue) { | ||
return System.getProperty(name, defaultValue); | ||
} | ||
|
||
@Override | ||
public String getProperty(final String name) { | ||
return System.getProperty(name); | ||
} | ||
|
||
@Override | ||
public String setProperty(String name, String value) { | ||
return System.setProperty(name, value); | ||
} | ||
}; | ||
|
||
SysProps PRIVILEGED = new SysProps() { | ||
@Override | ||
public String getProperty(final String name, final String defaultValue) { | ||
PrivilegedAction<String> action = new PrivilegedAction<String>() { | ||
@Override | ||
public String run() { | ||
return System.getProperty(name, defaultValue); | ||
} | ||
}; | ||
return AccessController.doPrivileged(action); | ||
} | ||
|
||
@Override | ||
public String getProperty(final String name) { | ||
PrivilegedAction<String> action = new PrivilegedAction<String>() { | ||
@Override | ||
public String run() { | ||
return System.getProperty(name); | ||
} | ||
}; | ||
return AccessController.doPrivileged(action); | ||
} | ||
|
||
@Override | ||
public String setProperty(final String name, final String value) { | ||
PrivilegedAction<String> action = new PrivilegedAction<String>() { | ||
@Override | ||
public String run() { | ||
return System.setProperty(name, value); | ||
} | ||
}; | ||
return AccessController.doPrivileged(action); | ||
} | ||
}; | ||
|
||
String getProperty(String name, String defaultValue); | ||
|
||
String getProperty(String name); | ||
|
||
String setProperty(String name, String value); | ||
} | ||
|
||
static String getProperty(String name, String defaultValue) { | ||
if (System.getSecurityManager() == null) | ||
return SysProps.NON_PRIVILEGED.getProperty(name, defaultValue); | ||
|
||
return SysProps.PRIVILEGED.getProperty(name, defaultValue); | ||
} | ||
|
||
static String getProperty(String name) { | ||
if (System.getSecurityManager() == null) | ||
return SysProps.NON_PRIVILEGED.getProperty(name); | ||
|
||
return SysProps.PRIVILEGED.getProperty(name); | ||
} | ||
|
||
static String setProperty(String name, String value) { | ||
if (System.getSecurityManager() == null) { | ||
return SysProps.NON_PRIVILEGED.setProperty(name, value); | ||
} else { | ||
return SysProps.PRIVILEGED.setProperty(name, value); | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.