Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (102)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (322)
Collections:
Other Resources:
Rhino JavaScript Java Library Source Code
Rhino JavaScript Java Library is an open-source implementation of JavaScript
written entirely in Java.
Rhino JavaScript Java Library Source Code files are provided in binary package (rhino-1.7.14.zip).
You can also browse the source code below:
✍: FYIcenter.com
⏎ org/mozilla/javascript/tools/shell/JavaPolicySecurity.java
/* -*- 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;
}
public Class<?> defineClass(String name, byte[] data) {
return super.defineClass(name, data, 0, data.length, domain);
}
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<Permission> elements()
{
return new Enumeration<Permission>() {
public boolean hasMoreElements() { return false; }
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<Object>() {
public Object run() {
URL url = getUrlObj(filename);
ProtectionDomain staticDomain = getUrlDomain(url);
try {
Main.processFileSecure(cx, scope, url.toExternalForm(),
staticDomain);
} catch (IOException ioex) {
throw new RuntimeException(ioex);
}
return null;
}
});
}
private URL getUrlObj(String url)
{
URL urlObj;
try {
urlObj = new URL(url);
} catch (MalformedURLException ex) {
// Assume as Main.processFileSecure it is file, need to build its
// URL
String curDir = System.getProperty("user.dir");
curDir = curDir.replace('\\', '/');
if (!curDir.endsWith("/")) {
curDir = curDir+'/';
}
try {
URL curDirURL = new URL("file:"+curDir);
urlObj = new URL(curDirURL, url);
} catch (MalformedURLException ex2) {
throw new RuntimeException
("Can not construct file URL for '"+url+"':"
+ex2.getMessage());
}
}
return urlObj;
}
private ProtectionDomain getUrlDomain(URL url)
{
CodeSource cs;
cs = new CodeSource(url, (java.security.cert.Certificate[])null);
PermissionCollection pc = Policy.getPolicy().getPermissions(cs);
return new ProtectionDomain(cs, pc);
}
@Override
public GeneratedClassLoader
createClassLoader(final ClassLoader parentLoader, Object securityDomain)
{
final ProtectionDomain domain = (ProtectionDomain)securityDomain;
return AccessController.doPrivileged(new PrivilegedAction<Loader>() {
public Loader run() {
return new Loader(parentLoader, domain);
}
});
}
@Override
public Object getDynamicSecurityDomain(Object securityDomain)
{
ProtectionDomain staticDomain = (ProtectionDomain)securityDomain;
return getDynamicDomain(staticDomain);
}
private ProtectionDomain getDynamicDomain(ProtectionDomain staticDomain) {
ContextPermissions p = new ContextPermissions(staticDomain);
ProtectionDomain contextDomain = new ProtectionDomain(null, p);
return contextDomain;
}
@Override
public Object callWithDomain(Object securityDomain,
final Context cx,
final Callable callable,
final Scriptable scope,
final Scriptable thisObj,
final Object[] args)
{
ProtectionDomain staticDomain = (ProtectionDomain)securityDomain;
// There is no direct way in Java to intersect permissions according
// stack context with additional domain.
// The following implementation first constructs ProtectionDomain
// that allows actions only allowed by both staticDomain and current
// stack context, and then constructs AccessController for this dynamic
// domain.
// If this is too slow, alternative solution would be to generate
// class per domain with a proxy method to call to infect
// java stack.
// Another optimization in case of scripts coming from "world" domain,
// that is having minimal default privileges is to construct
// one AccessControlContext based on ProtectionDomain
// with least possible privileges and simply call
// AccessController.doPrivileged with this untrusted context
ProtectionDomain dynamicDomain = getDynamicDomain(staticDomain);
ProtectionDomain[] tmp = { dynamicDomain };
AccessControlContext restricted = new AccessControlContext(tmp);
PrivilegedAction<Object> action = new PrivilegedAction<Object>() {
public Object run() {
return callable.call(cx, scope, thisObj, args);
}
};
return AccessController.doPrivileged(action, restricted);
}
}
⏎ org/mozilla/javascript/tools/shell/JavaPolicySecurity.java
Or download all of them as a single archive file:
File name: rhino-1.7.14-sources.jar File size: 1029165 bytes Release date: 2022-01-06 Download
⇒ Example code to Test rhino-runtime-1.7.14.jar
⇐ Download Rhino JavaScript Binary Package
2022-05-03, ≈208🔥, 1💬
Popular Posts:
SLF4J API is a simple API that allows to plug in any desired logging library at deployment time. Her...
Apache Log4j Core Implementation provides the functional components of the logging system. Users are...
JDK 17 jdk.jdi.jmod is the JMOD file for JDK 17 JDI (Java Debug Interface) tool. JDK 17 JDI tool com...
jTDS JDBC Driver Source Code Files are provided in the source package file, jtds-1.3.1-fyi.zip. You ...
maven-model-builder-3.8. 6.jaris the JAR file for Apache Maven 3.8.6 Model Builder module. Apache Ma...