LinkagePermission.java 4.1 KB
Newer Older
1
/*
2
 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
3 4 5 6
 * 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
7
 * published by the Free Software Foundation.  Oracle designates this
8
 * particular file as subject to the "Classpath" exception as provided
9
 * by Oracle in the LICENSE file that accompanied this code.
10 11 12 13 14 15 16 17 18 19 20
 *
 * 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.
 *
21 22 23
 * 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.
24 25 26 27 28 29 30 31 32 33
 */

package java.dyn;

import java.security.*;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.StringTokenizer;

/**
34 35 36 37
 * This class is for managing runtime permission checking for
 * operations performed by methods in the {@link Linkage} class.
 * Like a {@link RuntimePermission}, on which it is modeled,
 * a {@code LinkagePermission} contains a target name but
38 39
 * no actions list; you either have the named permission
 * or you don't.
40 41
 * <p>
 * The following table lists all the possible {@code LinkagePermission} target names,
42 43
 * and for each provides a description of what the permission allows
 * and a discussion of the risks of granting code the permission.
44
 * <p>
45 46 47 48 49 50 51 52 53 54 55
 *
 * <table border=1 cellpadding=5 summary="permission target name,
 *  what the target allows,and associated risks">
 * <tr>
 * <th>Permission Target Name</th>
 * <th>What the Permission Allows</th>
 * <th>Risks of Allowing this Permission</th>
 * </tr>
 *
 * <tr>
 *   <td>registerBootstrapMethod.{class name}</td>
56
 *   <td>Specifying a bootstrap method for {@code invokedynamic} instructions within a class of the given name</td>
57
 *   <td>An attacker could attempt to attach a bootstrap method to a class which
58
 *       has just been loaded, thus gaining control of its {@code invokedynamic} calls.</td>
59 60 61 62 63
 * </tr>
 *
 * <tr>
 *   <td>invalidateAll</td>
 *   <td>Force the relinking of invokedynamic call sites everywhere.</td>
64 65 66
 *   <td>This could allow an attacker to slow down the system,
 *       or perhaps expose timing bugs in a dynamic language implementations,
 *       by forcing redundant relinking operations.</td>
67 68 69 70 71 72 73 74 75 76
 * </tr>
 *
 *
 * <tr>
 *   <td>invalidateCallerClass.{class name}</td>
 *   <td>Force the relinking of invokedynamic call sites in the given class.</td>
 *   <td>See {@code invalidateAll}.</td>
 * </tr>
 * </table>
 *
77
 * @see java.security.RuntimePermission
78 79 80 81 82 83
 * @see java.lang.SecurityManager
 *
 * @author John Rose, JSR 292 EG
 */

public final class LinkagePermission extends BasicPermission {
84 85
    private static final long serialVersionUID = 292L;

86 87 88
    /**
     * Create a new LinkagePermission with the given name.
     * The name is the symbolic name of the LinkagePermission, such as
89
     * "registerBootstrapMethod", "invalidateCallerClass.*", etc. An asterisk
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
     * may appear at the end of the name, following a ".", or by itself, to
     * signify a wildcard match.
     *
     * @param name the name of the LinkagePermission
     */
    public LinkagePermission(String name) {
        super(name);
    }

    /**
     * Create a new LinkagePermission with the given name on the given class.
     * Equivalent to {@code LinkagePermission(name+"."+clazz.getName())}.
     *
     * @param name the name of the LinkagePermission
     * @param clazz the class affected by the permission
     */
    public LinkagePermission(String name, Class<?> clazz) {
        super(name + "." + clazz.getName());
    }
}