mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-28 20:18:48 +00:00
Co-authored-by: Sean Mullan <mullan@openjdk.org> Co-authored-by: Alan Bateman <alanb@openjdk.org> Co-authored-by: Weijun Wang <weijun@openjdk.org> Co-authored-by: Aleksei Efimov <aefimov@openjdk.org> Co-authored-by: Brian Burkhalter <bpb@openjdk.org> Co-authored-by: Daniel Fuchs <dfuchs@openjdk.org> Co-authored-by: Harshitha Onkar <honkar@openjdk.org> Co-authored-by: Joe Wang <joehw@openjdk.org> Co-authored-by: Jorn Vernee <jvernee@openjdk.org> Co-authored-by: Justin Lu <jlu@openjdk.org> Co-authored-by: Kevin Walls <kevinw@openjdk.org> Co-authored-by: Lance Andersen <lancea@openjdk.org> Co-authored-by: Naoto Sato <naoto@openjdk.org> Co-authored-by: Roger Riggs <rriggs@openjdk.org> Co-authored-by: Brent Christian <bchristi@openjdk.org> Co-authored-by: Stuart Marks <smarks@openjdk.org> Co-authored-by: Ian Graves <igraves@openjdk.org> Co-authored-by: Phil Race <prr@openjdk.org> Co-authored-by: Erik Gahlin <egahlin@openjdk.org> Co-authored-by: Jaikiran Pai <jpai@openjdk.org> Reviewed-by: kevinw, aivanov, rriggs, lancea, coffeys, dfuchs, ihse, erikj, cjplummer, coleenp, naoto, mchung, prr, weijun, joehw, azvegint, psadhukhan, bchristi, sundar, attila
388 lines
11 KiB
Java
388 lines
11 KiB
Java
/*
|
|
* Copyright (c) 1995, 2024, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle in the LICENSE file that accompanied this code.
|
|
*
|
|
* This code 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
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
package java.lang;
|
|
|
|
import java.io.FileDescriptor;
|
|
import java.net.InetAddress;
|
|
import java.security.AccessController;
|
|
import java.security.Permission;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* SecurityManager was originally specified to allow an application implement
|
|
* a security policy. It allowed an application to determine, before performing
|
|
* a possibly unsafe or security sensitive operation, whether the operation was
|
|
* being attempted in a security context that allowed the operation.
|
|
* This feature no longer exists.
|
|
*
|
|
* @since 1.0
|
|
* @deprecated There is no replacement for this class.
|
|
*/
|
|
@Deprecated(since="17", forRemoval=true)
|
|
public class SecurityManager {
|
|
|
|
/**
|
|
* Constructs a new {@code SecurityManager}. Setting a security manager with
|
|
* {@link System#setSecurityManager(SecurityManager)} is not supported.
|
|
*/
|
|
public SecurityManager() { }
|
|
|
|
/**
|
|
* Returns the current execution stack as an array of classes.
|
|
* <p>
|
|
* The length of the array is the number of methods on the execution
|
|
* stack. The element at index {@code 0} is the class of the
|
|
* currently executing method, the element at index {@code 1} is
|
|
* the class of that method's caller, and so on.
|
|
*
|
|
* @apiNote The {@code StackWalker} class can be used as a replacement
|
|
* for this method.
|
|
*
|
|
* @return the execution stack.
|
|
*/
|
|
protected Class<?>[] getClassContext() {
|
|
return StackWalkerHolder.STACK_WALKER
|
|
.walk(s -> s.map(StackWalker.StackFrame::getDeclaringClass)
|
|
.skip(1L)
|
|
.toArray(Class[]::new));
|
|
}
|
|
|
|
private static class StackWalkerHolder {
|
|
static final StackWalker STACK_WALKER =
|
|
StackWalker.getInstance(
|
|
Set.of(StackWalker.Option.RETAIN_CLASS_REFERENCE,
|
|
StackWalker.Option.DROP_METHOD_INFO));
|
|
}
|
|
|
|
/**
|
|
* Returns an {@code AccessControlContext} where the {@code checkPermission}
|
|
* method always throws an {@code AccessControlException} and the
|
|
* {@code getDomainCombiner} method always returns {@code null}.
|
|
*
|
|
* @return an {@code AccessControlContext} as specified above
|
|
* @see java.security.AccessControlContext AccessControlContext
|
|
* @apiNote This method originally returned a snapshot of the current
|
|
* calling context, which included the current thread's access
|
|
* control context and any limited privilege scope. This method has
|
|
* been changed to always return an innocuous
|
|
* {@code AccessControlContext} that fails all permission checks.
|
|
* {@linkplain SecurityManager The Security Manager} is no longer
|
|
* supported. There is no replacement for the Security Manager or
|
|
* this method.
|
|
*/
|
|
@SuppressWarnings("removal")
|
|
public Object getSecurityContext() {
|
|
return AccessController.getContext();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param perm ignored
|
|
* @throws SecurityException always
|
|
* @since 1.2
|
|
*/
|
|
public void checkPermission(Permission perm) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param perm ignored
|
|
* @param context ignored
|
|
* @throws SecurityException always
|
|
* @since 1.2
|
|
*/
|
|
public void checkPermission(Permission perm, Object context) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkCreateClassLoader() {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param t ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkAccess(Thread t) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param g ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkAccess(ThreadGroup g) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param status ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkExit(int status) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param cmd ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkExec(String cmd) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param lib ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkLink(String lib) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param fd the system-dependent file descriptor
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkRead(FileDescriptor fd) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param file ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkRead(String file) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param file ignored
|
|
* @param context ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkRead(String file, Object context) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param fd ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkWrite(FileDescriptor fd) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param file ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkWrite(String file) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param file ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkDelete(String file) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param host ignored
|
|
* @param port ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkConnect(String host, int port) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param host ignored
|
|
* @param port ignored
|
|
* @param context ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkConnect(String host, int port, Object context) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param port ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkListen(int port) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param host ignored
|
|
* @param port ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkAccept(String host, int port) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param maddr ignored
|
|
* @throws SecurityException always
|
|
* @since 1.1
|
|
*/
|
|
public void checkMulticast(InetAddress maddr) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param maddr ignored
|
|
* @param ttl ignored
|
|
* @throws SecurityException always
|
|
* @since 1.1
|
|
*/
|
|
public void checkMulticast(InetAddress maddr, byte ttl) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkPropertiesAccess() {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param key ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkPropertyAccess(String key) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @throws SecurityException always
|
|
* @since 1.1
|
|
*/
|
|
public void checkPrintJobAccess() {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param pkg ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkPackageAccess(String pkg) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param pkg ignored
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkPackageDefinition(String pkg) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @throws SecurityException always
|
|
*/
|
|
public void checkSetFactory() {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* Throws {@code SecurityException}.
|
|
*
|
|
* @param target ignored
|
|
* @throws SecurityException always
|
|
* @since 1.1
|
|
*/
|
|
public void checkSecurityAccess(String target) {
|
|
throw new SecurityException();
|
|
}
|
|
|
|
/**
|
|
* {@return the current Thread's {@code ThreadGroup}}
|
|
* @since 1.1
|
|
*/
|
|
public ThreadGroup getThreadGroup() {
|
|
return Thread.currentThread().getThreadGroup();
|
|
}
|
|
}
|