package com.baasbox.security;
import java.io.FileDescriptor;
import java.net.InetAddress;
import java.security.Permission;
/**
* Created by eto on 24/09/14.
*/
public class ScriptingSandboxSecutrityManager extends SecurityManager {
private SecurityManager mDelegated;
public static void init() {
SecurityManager sm = System.getSecurityManager();
System.setSecurityManager(new ScriptingSandboxSecutrityManager(sm));
}
private ScriptingSandboxSecutrityManager(SecurityManager sm) {
mDelegated = sm;
}
@Override
public Object getSecurityContext() {
return mDelegated.getSecurityContext();
}
@Override
public void checkPermission(Permission perm) {
if (perm == null) {
return;
}
if ("nashorn.JavaReflection".equals(perm.getName())) {
throw new SecurityException("Invalid reflective access in scripting code");
// } else if("baasbox.scripting".equals(perm.getName())){
// super.checkPermission(perm);
} else if (mDelegated != null) {
mDelegated.checkPermission(perm);
}
}
@Override
public void checkPermission(Permission perm, Object context) {
if (mDelegated != null)
mDelegated.checkPermission(perm, context);
}
@Override
public void checkCreateClassLoader() {
if (mDelegated != null)
mDelegated.checkCreateClassLoader();
}
@Override
public void checkAccess(Thread t) {
if (mDelegated != null)
mDelegated.checkAccess(t);
}
@Override
public void checkAccess(ThreadGroup g) {
if (mDelegated != null)
mDelegated.checkAccess(g);
}
@Override
public void checkExit(int status) {
if (mDelegated != null)
mDelegated.checkExit(status);
}
@Override
public void checkExec(String cmd) {
if (mDelegated != null)
mDelegated.checkExec(cmd);
}
@Override
public void checkLink(String lib) {
if (mDelegated != null)
mDelegated.checkLink(lib);
}
@Override
public void checkRead(FileDescriptor fd) {
if (mDelegated != null)
mDelegated.checkRead(fd);
}
@Override
public void checkRead(String file) {
if (mDelegated != null)
mDelegated.checkRead(file);
}
@Override
public void checkRead(String file, Object context) {
if (mDelegated != null)
mDelegated.checkRead(file, context);
}
@Override
public void checkWrite(FileDescriptor fd) {
if (mDelegated != null)
mDelegated.checkWrite(fd);
}
@Override
public void checkWrite(String file) {
if (mDelegated != null)
mDelegated.checkWrite(file);
}
@Override
public void checkDelete(String file) {
if (mDelegated != null)
mDelegated.checkDelete(file);
}
@Override
public void checkConnect(String host, int port) {
if (mDelegated != null)
mDelegated.checkConnect(host, port);
}
@Override
public void checkConnect(String host, int port, Object context) {
if (mDelegated != null)
mDelegated.checkConnect(host, port, context);
}
@Override
public void checkListen(int port) {
if (mDelegated != null)
mDelegated.checkListen(port);
}
@Override
public void checkAccept(String host, int port) {
if (mDelegated != null)
mDelegated.checkAccept(host, port);
}
@Override
public void checkMulticast(InetAddress maddr) {
if (mDelegated != null)
mDelegated.checkMulticast(maddr);
}
@Override
@Deprecated
public void checkMulticast(InetAddress maddr, byte ttl) {
if (mDelegated != null)
mDelegated.checkMulticast(maddr, ttl);
}
@Override
public void checkPropertiesAccess() {
if (mDelegated != null)
mDelegated.checkPropertiesAccess();
}
@Override
public void checkPropertyAccess(String key) {
if (mDelegated != null)
mDelegated.checkPropertyAccess(key);
}
@Override
public void checkPrintJobAccess() {
if (mDelegated != null)
mDelegated.checkPrintJobAccess();
}
@Override
public void checkPackageAccess(String pkg) {
if (mDelegated != null)
mDelegated.checkPackageAccess(pkg);
}
@Override
public void checkPackageDefinition(String pkg) {
if (mDelegated != null)
mDelegated.checkPackageDefinition(pkg);
}
@Override
public void checkSetFactory() {
if (mDelegated != null)
mDelegated.checkSetFactory();
}
@Override
public void checkSecurityAccess(String target) {
if (mDelegated != null)
mDelegated.checkSecurityAccess(target);
}
@Override
public ThreadGroup getThreadGroup() {
if (mDelegated != null)
return mDelegated.getThreadGroup();
return null;
}
}