/*
* Freeplane - mind map editor
* Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
*
* This file author is Christian Foltin
* It is modified by Dimitry Polivaev in 2008.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.main.application;
import java.io.FileDescriptor;
import java.net.InetAddress;
import java.security.Permission;
/**
* By default, everything is allowed. But you can install a different security
* controller once, until you install it again. Thus, the code executed in
* between is securely controlled by that different security manager. Moreover,
* only by double registering the manager is removed. So, no malicious code can
* remove the active security manager.
*
* @author foltin
*/
public final class FreeplaneSecurityManager extends SecurityManager {
private SecurityManager mFinalSecurityManager = null;
public FreeplaneSecurityManager() {
}
@Override
public void checkAccept(final String pHost, final int pPort) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkAccept(pHost, pPort);
}
@Override
public void checkAccess(final Thread pT) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkAccess(pT);
}
@Override
public void checkAccess(final ThreadGroup pG) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkAccess(pG);
}
@Override
public void checkAwtEventQueueAccess() {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkAwtEventQueueAccess();
}
@Override
public void checkConnect(final String pHost, final int pPort) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkConnect(pHost, pPort);
}
@Override
public void checkConnect(final String pHost, final int pPort, final Object pContext) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkConnect(pHost, pPort, pContext);
}
@Override
public void checkCreateClassLoader() {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkCreateClassLoader();
}
@Override
public void checkDelete(final String pFile) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkDelete(pFile);
}
@Override
public void checkExec(final String pCmd) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkExec(pCmd);
}
@Override
public void checkExit(final int pStatus) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkExit(pStatus);
}
@Override
public void checkLink(final String pLib) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkLink(pLib);
}
@Override
public void checkListen(final int pPort) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkListen(pPort);
}
@Override
public void checkMemberAccess(final Class<?> clazz, final int which) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkMemberAccess(clazz, which);
}
@Override
public void checkMulticast(final InetAddress pMaddr) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkMulticast(pMaddr);
}
@SuppressWarnings("deprecation")// we have to override it in case it's used by anyone
@Override
public void checkMulticast(final InetAddress pMaddr, final byte pTtl) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkMulticast(pMaddr, pTtl);
}
@Override
public void checkPackageAccess(final String pPkg) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPackageAccess(pPkg);
}
@Override
public void checkPackageDefinition(final String pPkg) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPackageDefinition(pPkg);
}
@Override
public void checkPermission(final Permission pPerm) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPermission(pPerm);
}
@Override
public void checkPermission(final Permission pPerm, final Object pContext) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPermission(pPerm, pContext);
}
@Override
public void checkPrintJobAccess() {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPrintJobAccess();
}
@Override
public void checkPropertiesAccess() {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPropertiesAccess();
}
@Override
public void checkPropertyAccess(final String pKey) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkPropertyAccess(pKey);
}
@Override
public void checkRead(final FileDescriptor pFd) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkRead(pFd);
}
@Override
public void checkRead(final String pFile) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkRead(pFile);
}
@Override
public void checkRead(final String pFile, final Object pContext) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkRead(pFile, pContext);
}
@Override
public void checkSecurityAccess(final String pTarget) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkSecurityAccess(pTarget);
}
@Override
public void checkSetFactory() {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkSetFactory();
}
@Override
public void checkSystemClipboardAccess() {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkSystemClipboardAccess();
}
@Override
public boolean checkTopLevelWindow(final Object pWindow) {
if (mFinalSecurityManager == null) {
return true;
}
return mFinalSecurityManager.checkTopLevelWindow(pWindow);
}
@Override
public void checkWrite(final FileDescriptor pFd) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkWrite(pFd);
}
@Override
public void checkWrite(final String pFile) {
if (mFinalSecurityManager == null) {
return;
}
mFinalSecurityManager.checkWrite(pFile);
}
@Override
public Object getSecurityContext() {
if (mFinalSecurityManager == null) {
return super.getSecurityContext();
}
return mFinalSecurityManager.getSecurityContext();
}
public void setFinalSecurityManager(final SecurityManager finalSecurityManager) {
if (mFinalSecurityManager != null) {
throw new SecurityException("There is a SecurityManager installed already.");
}
mFinalSecurityManager = finalSecurityManager;
}
public void removeFinalSecurityManager(final SecurityManager finalSecurityManager) {
if (finalSecurityManager == mFinalSecurityManager) {
mFinalSecurityManager = null;
return;
}
else {
throw new SecurityException("Wrong SecurityManager to remove.");
}
}
/** needed since scripts may be invoked recursively and the security manager may only be set replaced. */
public boolean needsFinalSecurityManager() {
return mFinalSecurityManager == null
&& ! Boolean.valueOf(System.getProperty("org.freeplane.main.application.FreeplaneSecurityManager.disable", "false"));
}
}