test.StrictSecurityManager15 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Quaqua Show documentation
Show all versions of Quaqua Show documentation
A Mavenisation of the Quaqua Mac OSX Swing Look and Feel (Java library)
Quaqua Look and Feel (C) 2003-2010, Werner Randelshofer.
Mavenisation by Matt Gumbley, DevZendo.org - for problems with
Mavenisation, see Matt; for issues with Quaqua, see the Quaqua home page.
For full license details, see http://randelshofer.ch/quaqua/license.html
The newest version!
/*
* @(#)StrictSecurityManager15.java 1.0 February 10, 2007
*
* Copyright (c) 2006 Werner Randelshofer, Immensee, Switzerland.
* All rights reserved.
*
* You may not use, copy or modify this file, except in compliance with the
* license agreement you entered into with Werner Randelshofer.
* For details see accompanying license terms.
*/
package test;
import java.awt.AWTPermission;
import java.io.FilePermission;
import java.lang.reflect.ReflectPermission;
import java.net.*;
import java.security.*;
import java.util.*;
import java.util.logging.LoggingPermission;
/**
* StrictSecurityManager15 that disallows almost everything.
* This is used to test Quaqua in security restricted environments.
*
* @author Werner Randelshofer
* @version 1.0 February 10, 2007 Created.
*/
public class StrictSecurityManager15 extends SecurityManager {
private static final List ALLOWED_HOSTNAMES = Arrays.asList(new String[]{
"localhost", "127.0.0.1",
});
private static final List ALLOWED_PERMISSIONS = Arrays.asList(new Permission[] {
new AWTPermission("accessClipboard"),
new AWTPermission("showWindowWithoutWarningBanner"),
//new AWTPermission("listenToAllAWTEvents"),
//new AWTPermission("accessEventQueue"),
new FilePermission("/-","read"),
new LoggingPermission("control",null),
new PropertyPermission("*","read"),
new PropertyPermission("apple.laf.useScreenMenuBar","write"),
new PropertyPermission("com.apple.macos.useScreenMenuBar","write"),
new PropertyPermission("swing.aatext","write"),
new PropertyPermission("sun.awt.exception.handler","write"),
new PropertyPermission("user.timezone","write"),
new ReflectPermission("suppressAccessChecks"),
new RuntimePermission("accessClassInPackage.*"),
new RuntimePermission("accessDeclaredMembers"),
new RuntimePermission("createClassLoader"),
new RuntimePermission("exitVM"),
new RuntimePermission("loadLibrary.*"),
new RuntimePermission("modifyThread"),
new RuntimePermission("modifyThreadGroup"),
new RuntimePermission("setContextClassLoader"),
new RuntimePermission("canProcessApplicationEvents"),
new RuntimePermission("setFactory"),
new SecurityPermission("getProperty.networkaddress.cache.*"),
});
/** Creates a new instance. */
public StrictSecurityManager15() {
}
public void checkConnect(String host, int port, Object context) {
checkConnect(host, port);
}
public void checkConnect(String host, int port) {
if (host == null) {
throw new NullPointerException("host can't be null");
}
if (!host.startsWith("[") && host.indexOf(':') != -1) {
host = "[" + host + "]";
}
if (ALLOWED_HOSTNAMES.contains(host)) {
return;
}
String hostPort;
if (port == -1) {
hostPort = host;
} else {
hostPort = host + ":" + port;
}
String message = "Opening a socket connection to " + hostPort + " is restricted.";
throw new AccessControlException(message, new SocketPermission(hostPort, "connect"));
}
private boolean isImplied(Permission perm) {
for (Permission p : ALLOWED_PERMISSIONS) {
if (p.implies(perm)) {
return true;
}
}
return false;
}
public void checkPermission(Permission perm) {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
boolean needsRestriction = false;
String restrictor = "";
for (int i=3; i < stack.length; i++) {
String clazz = stack[i].getClassName();
String method = stack[i].getMethodName();
if (clazz.equals("java.security.AccessController") &&
method.equals("doPrivileged")) {
break;
}
if (clazz.startsWith("java.") ||
clazz.startsWith("apple.") ||
clazz.startsWith("javax.") ||
clazz.startsWith("sun.")) {
} else {
needsRestriction = true;
restrictor = stack[i].toString();
break;
}
}
/*
if (! needsRestriction) {
System.out.println("NO RESTRICTION "+Arrays.asList(cc));
}*/
// Allow all other actions
if (needsRestriction && ! isImplied(perm)) {
System.err.println("StrictSecurityManager.checkPermision("+perm+")");
System.err.println(" "+Arrays.asList(stack));
System.err.println(" "+restrictor);
throw new AccessControlException("Not allowed "+perm, perm);
}
}
public void checkPermission(Permission perm, Object context) {
// Allow all other actions
throw new AccessControlException("Not allowed context ", perm);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy