org.mozilla.javascript.tools.shell.JavaPolicySecurity Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rhino Show documentation
Show all versions of rhino Show documentation
Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically
embedded into Java applications to provide scripting to end users.
The newest version!
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript.tools.shell;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.AccessControlContext;
import java.security.AccessControlException;
import java.security.AccessController;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.Policy;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
import java.util.Enumeration;
import org.mozilla.javascript.Callable;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.GeneratedClassLoader;
import org.mozilla.javascript.Scriptable;
public class JavaPolicySecurity extends SecurityProxy {
@Override
public Class> getStaticSecurityDomainClassInternal() {
return ProtectionDomain.class;
}
private static class Loader extends ClassLoader implements GeneratedClassLoader {
private ProtectionDomain domain;
Loader(ClassLoader parent, ProtectionDomain domain) {
super(parent != null ? parent : getSystemClassLoader());
this.domain = domain;
}
@Override
public Class> defineClass(String name, byte[] data) {
return super.defineClass(name, data, 0, data.length, domain);
}
@Override
public void linkClass(Class> cl) {
resolveClass(cl);
}
}
private static class ContextPermissions extends PermissionCollection {
static final long serialVersionUID = -1721494496320750721L;
// Construct PermissionCollection that permits an action only
// if it is permitted by staticDomain and by security context of Java stack on
// the moment of constructor invocation
ContextPermissions(ProtectionDomain staticDomain) {
_context = AccessController.getContext();
if (staticDomain != null) {
_statisPermissions = staticDomain.getPermissions();
}
setReadOnly();
}
@Override
public void add(Permission permission) {
throw new RuntimeException("NOT IMPLEMENTED");
}
@Override
public boolean implies(Permission permission) {
if (_statisPermissions != null) {
if (!_statisPermissions.implies(permission)) {
return false;
}
}
try {
_context.checkPermission(permission);
return true;
} catch (AccessControlException ex) {
return false;
}
}
@Override
public Enumeration elements() {
return new Enumeration() {
@Override
public boolean hasMoreElements() {
return false;
}
@Override
public Permission nextElement() {
return null;
}
};
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getName());
sb.append('@');
sb.append(Integer.toHexString(System.identityHashCode(this)));
sb.append(" (context=");
sb.append(_context);
sb.append(", static_permitions=");
sb.append(_statisPermissions);
sb.append(')');
return sb.toString();
}
AccessControlContext _context;
PermissionCollection _statisPermissions;
}
public JavaPolicySecurity() {
// To trigger error on jdk-1.1 with lazy load
new CodeSource(null, (java.security.cert.Certificate[]) null);
}
@Override
protected void callProcessFileSecure(
final Context cx, final Scriptable scope, final String filename) {
AccessController.doPrivileged(
new PrivilegedAction
© 2015 - 2024 Weber Informatics LLC | Privacy Policy