jdk/src/java.base/share/classes/javax/security/auth/Policy.java
author martin
Tue, 15 Sep 2015 21:56:04 -0700
changeset 32649 2ee9017c7597
parent 29820 7a3f0268f55b
child 38955 1dc95586a112
permissions -rw-r--r--
8136583: Core libraries should use blessed modifier order Summary: Run blessed-modifier-order script (see bug) Reviewed-by: psandoz, chegar, alanb, plevart
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
29492
a4bf9a570035 8028266: Tidy warnings cleanup for packages java.security/javax.security
avstepan
parents: 28059
diff changeset
     2
 * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    23
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
package javax.security.auth;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
    28
import java.security.Security;
22334
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
    29
import java.security.AccessController;
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
    30
import java.security.PrivilegedAction;
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
    31
import java.security.PrivilegedExceptionAction;
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
    32
import java.util.Objects;
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
    33
import sun.security.util.Debug;
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
    34
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
/**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
 * <p> This is an abstract class for representing the system policy for
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
 * Subject-based authorization.  A subclass implementation
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
 * of this class provides a means to specify a Subject-based
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    39
 * access control {@code Policy}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
 *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    41
 * <p> A {@code Policy} object can be queried for the set of
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
 * Permissions granted to code running as a
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    43
 * {@code Principal} in the following manner:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
 *      policy = Policy.getPolicy();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
 *      PermissionCollection perms = policy.getPermissions(subject,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
 *                                                      codeSource);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
 *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    51
 * The {@code Policy} object consults the local policy and returns
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    52
 * and appropriate {@code Permissions} object with the
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
 * Permissions granted to the Principals associated with the
29492
a4bf9a570035 8028266: Tidy warnings cleanup for packages java.security/javax.security
avstepan
parents: 28059
diff changeset
    54
 * provided {@code subject}, and granted to the code specified
a4bf9a570035 8028266: Tidy warnings cleanup for packages java.security/javax.security
avstepan
parents: 28059
diff changeset
    55
 * by the provided {@code codeSource}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
 *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    57
 * <p> A {@code Policy} contains the following information.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
 * Note that this example only represents the syntax for the default
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    59
 * {@code Policy} implementation. Subclass implementations of this class
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
 * may implement alternative syntaxes and may retrieve the
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    61
 * {@code Policy} from any source such as files, databases,
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
 * or servers.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
 *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    64
 * <p> Each entry in the {@code Policy} is represented as
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
 * a <b><i>grant</i></b> entry.  Each <b><i>grant</i></b> entry
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
 * specifies a codebase, code signers, and Principals triplet,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
 * as well as the Permissions granted to that triplet.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
 *      grant CodeBase ["URL"], Signedby ["signers"],
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
 *            Principal [Principal_Class] "Principal_Name" {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
 *          Permission Permission_Class ["Target_Name"]
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
 *                                      [, "Permission_Actions"]
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
 *                                      [, signedBy "SignerName"];
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
 *      };
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
 * The CodeBase and Signedby components of the triplet name/value pairs
28059
e576535359cc 8067377: My hobby: caning, then then canning, the the can-can
martin
parents: 25859
diff changeset
    79
 * are optional.  If they are not present, then any codebase will match,
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
 * and any signer (including unsigned code) will match.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
 * For Example,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
 *      grant CodeBase "foo.com", Signedby "foo",
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
 *            Principal com.sun.security.auth.SolarisPrincipal "duke" {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
 *          permission java.io.FilePermission "/home/duke", "read, write";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
 *      };
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
 * This <b><i>grant</i></b> entry specifies that code from "foo.com",
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    91
 * signed by "foo', and running as a {@code SolarisPrincipal} with the
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    92
 * name, duke, has one {@code Permission}.  This {@code Permission}
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
 * permits the executing code to read and write files in the directory,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
 * "/home/duke".
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
 *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    96
 * <p> To "run" as a particular {@code Principal},
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    97
 * code invokes the {@code Subject.doAs(subject, ...)} method.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
 * After invoking that method, the code runs as all the Principals
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
    99
 * associated with the specified {@code Subject}.
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   100
 * Note that this {@code Policy} (and the Permissions
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   101
 * granted in this {@code Policy}) only become effective
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   102
 * after the call to {@code Subject.doAs} has occurred.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
 * <p> Multiple Principals may be listed within one <b><i>grant</i></b> entry.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
 * All the Principals in the grant entry must be associated with
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   106
 * the {@code Subject} provided to {@code Subject.doAs}
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   107
 * for that {@code Subject} to be granted the specified Permissions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
 *      grant Principal com.sun.security.auth.SolarisPrincipal "duke",
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
 *            Principal com.sun.security.auth.SolarisNumericUserPrincipal "0" {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
 *          permission java.io.FilePermission "/home/duke", "read, write";
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
 *          permission java.net.SocketPermission "duke.com", "connect";
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
 *      };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
 * This entry grants any code running as both "duke" and "0"
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
 * permission to read and write files in duke's home directory,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
 * as well as permission to make socket connections to "duke.com".
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
 * <p> Note that non Principal-based grant entries are not permitted
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   122
 * in this {@code Policy}.  Therefore, grant entries such as:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
 *      grant CodeBase "foo.com", Signedby "foo" {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
 *          permission java.io.FilePermission "/tmp/scratch", "read, write";
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
 *      };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
 * are rejected.  Such permission must be listed in the
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   131
 * {@code java.security.Policy}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
 *
14775
2ed01c760aea 8004064: Downgrade normative references to ${java.home}/lib/security/java.security
mullan
parents: 7291
diff changeset
   133
 * <p> The default {@code Policy} implementation can be changed by
2ed01c760aea 8004064: Downgrade normative references to ${java.home}/lib/security/java.security
mullan
parents: 7291
diff changeset
   134
 * setting the value of the {@code auth.policy.provider} security property to
2ed01c760aea 8004064: Downgrade normative references to ${java.home}/lib/security/java.security
mullan
parents: 7291
diff changeset
   135
 * the fully qualified name of the desired {@code Policy} implementation class.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
 * @deprecated  as of JDK version 1.4 -- Replaced by java.security.Policy.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
 *              java.security.Policy has a method:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
 *      public PermissionCollection getPermissions
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
 *          (java.security.ProtectionDomain pd)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   143
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   144
 * and ProtectionDomain has a constructor:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
 * <pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
 *      public ProtectionDomain
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
 *          (CodeSource cs,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   148
 *           PermissionCollection permissions,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   149
 *           ClassLoader loader,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   150
 *           Principal[] principals)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
 * </pre>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
 * These two APIs provide callers the means to query the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
 * Policy for Principal-based Permission entries.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
 *
14775
2ed01c760aea 8004064: Downgrade normative references to ${java.home}/lib/security/java.security
mullan
parents: 7291
diff changeset
   156
 * @see java.security.Security security properties
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
@Deprecated
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
public abstract class Policy {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
    private static Policy policy;
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 29820
diff changeset
   162
    private static final String AUTH_POLICY =
19439
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   163
        "sun.security.provider.AuthPolicyFile";
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
22334
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   165
    private final java.security.AccessControlContext acc =
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   166
            java.security.AccessController.getContext();
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   167
19439
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   168
    // true if a custom (not AUTH_POLICY) system-wide policy object is set
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   169
    private static boolean isCustomPolicy;
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   170
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
     * Sole constructor.  (For invocation by subclass constructors, typically
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
     * implicit.)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
    protected Policy() { }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   176
90ce3da70b43 Initial load
duke
parents:
diff changeset
   177
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   178
     * Returns the installed Policy object.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
     * This method first calls
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   180
     * {@code SecurityManager.checkPermission} with the
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   181
     * {@code AuthPermission("getPolicy")} permission
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   182
     * to ensure the caller has permission to get the Policy object.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   183
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   184
     * @return the installed Policy.  The return value cannot be
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   185
     *          {@code null}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   186
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
     * @exception java.lang.SecurityException if the current thread does not
90ce3da70b43 Initial load
duke
parents:
diff changeset
   188
     *      have permission to get the Policy object.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
     * @see #setPolicy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
    public static Policy getPolicy() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
        java.lang.SecurityManager sm = System.getSecurityManager();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
        if (sm != null) sm.checkPermission(new AuthPermission("getPolicy"));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   195
        return getPolicyNoCheck();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   196
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   197
90ce3da70b43 Initial load
duke
parents:
diff changeset
   198
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   199
     * Returns the installed Policy object, skipping the security check.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   201
     * @return the installed Policy.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
    static Policy getPolicyNoCheck() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   205
        if (policy == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   206
90ce3da70b43 Initial load
duke
parents:
diff changeset
   207
            synchronized(Policy.class) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   208
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
                if (policy == null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
                    String policy_class = null;
22334
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   211
                    policy_class = AccessController.doPrivileged
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   212
                        (new PrivilegedAction<String>() {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   213
                        public String run() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
                            return java.security.Security.getProperty
90ce3da70b43 Initial load
duke
parents:
diff changeset
   215
                                ("auth.policy.provider");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   216
                        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
                    });
90ce3da70b43 Initial load
duke
parents:
diff changeset
   218
                    if (policy_class == null) {
19439
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   219
                        policy_class = AUTH_POLICY;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   220
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   221
90ce3da70b43 Initial load
duke
parents:
diff changeset
   222
                    try {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   223
                        final String finalClass = policy_class;
22334
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   224
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   225
                        Policy untrustedImpl = AccessController.doPrivileged(
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   226
                                new PrivilegedExceptionAction<Policy>() {
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   227
                                    public Policy run() throws ClassNotFoundException,
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   228
                                            InstantiationException,
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   229
                                            IllegalAccessException {
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   230
                                        Class<? extends Policy> implClass = Class.forName(
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   231
                                                finalClass, false,
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   232
                                                Thread.currentThread().getContextClassLoader()
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   233
                                        ).asSubclass(Policy.class);
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   234
                                        return implClass.newInstance();
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   235
                                    }
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   236
                                });
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   237
                        AccessController.doPrivileged(
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   238
                                new PrivilegedExceptionAction<Void>() {
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   239
                                    public Void run() {
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   240
                                        setPolicy(untrustedImpl);
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   241
                                        isCustomPolicy = !finalClass.equals(AUTH_POLICY);
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   242
                                        return null;
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   243
                                    }
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   244
                                }, Objects.requireNonNull(untrustedImpl.acc)
e86fef5f34cb 8025014: Enhance Security Policy
weijun
parents: 19439
diff changeset
   245
                        );
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   246
                    } catch (Exception e) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   247
                        throw new SecurityException
90ce3da70b43 Initial load
duke
parents:
diff changeset
   248
                                (sun.security.util.ResourcesMgr.getString
7179
4afb81e50183 6987827: security/util/Resources.java needs improvement
weijun
parents: 5506
diff changeset
   249
                                ("unable.to.instantiate.Subject.based.policy"));
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   250
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   251
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   252
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   253
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   254
        return policy;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   255
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   256
90ce3da70b43 Initial load
duke
parents:
diff changeset
   257
90ce3da70b43 Initial load
duke
parents:
diff changeset
   258
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   259
     * Sets the system-wide Policy object. This method first calls
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   260
     * {@code SecurityManager.checkPermission} with the
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   261
     * {@code AuthPermission("setPolicy")}
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   262
     * permission to ensure the caller has permission to set the Policy.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   263
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   264
     * @param policy the new system Policy object.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   265
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   266
     * @exception java.lang.SecurityException if the current thread does not
90ce3da70b43 Initial load
duke
parents:
diff changeset
   267
     *          have permission to set the Policy.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   268
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   269
     * @see #getPolicy
90ce3da70b43 Initial load
duke
parents:
diff changeset
   270
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   271
    public static void setPolicy(Policy policy) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   272
        java.lang.SecurityManager sm = System.getSecurityManager();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   273
        if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   274
        Policy.policy = policy;
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   275
        // all non-null policy objects are assumed to be custom
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   276
        isCustomPolicy = policy != null ? true : false;
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   277
    }
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   278
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   279
    /**
19439
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   280
     * Returns true if a custom (not AUTH_POLICY) system-wide policy object
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   281
     * has been set or installed. This method is called by
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   282
     * SubjectDomainCombiner to provide backwards compatibility for
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   283
     * developers that provide their own javax.security.auth.Policy
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   284
     * implementations.
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   285
     *
19439
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   286
     * @return true if a custom (not AUTH_POLICY) system-wide policy object
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   287
     * has been set; false otherwise
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   288
     */
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   289
    static boolean isCustomPolicySet(Debug debug) {
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   290
        if (policy != null) {
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   291
            if (debug != null && isCustomPolicy) {
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   292
                debug.println("Providing backwards compatibility for " +
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   293
                              "javax.security.auth.policy implementation: " +
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   294
                              policy.toString());
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   295
            }
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   296
            return isCustomPolicy;
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   297
        }
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   298
        // check if custom policy has been set using auth.policy.provider prop
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   299
        String policyClass = java.security.AccessController.doPrivileged
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   300
            (new java.security.PrivilegedAction<String>() {
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   301
                public String run() {
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   302
                    return Security.getProperty("auth.policy.provider");
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   303
                }
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   304
        });
19439
57876ed3c426 8016850: JCK javax.security.auth.Policy tests fail when run in Profiles mode
mullan
parents: 18830
diff changeset
   305
        if (policyClass != null && !policyClass.equals(AUTH_POLICY)) {
7291
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   306
            if (debug != null) {
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   307
                debug.println("Providing backwards compatibility for " +
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   308
                              "javax.security.auth.policy implementation: " +
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   309
                              policyClass);
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   310
            }
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   311
            return true;
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   312
        }
9fefa2786251 6995424: Eliminate dependency to a deprecated API com.sun.security.auth.PolicyFile
mullan
parents: 7179
diff changeset
   313
        return false;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   314
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   315
90ce3da70b43 Initial load
duke
parents:
diff changeset
   316
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   317
     * Retrieve the Permissions granted to the Principals associated with
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   318
     * the specified {@code CodeSource}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   319
     *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   320
     * @param subject the {@code Subject}
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   321
     *                  whose associated Principals,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   322
     *                  in conjunction with the provided
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   323
     *                  {@code CodeSource}, determines the Permissions
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   324
     *                  returned by this method.  This parameter
29820
7a3f0268f55b 8076223: Rest of tidy warning in javax.security / java.security
avstepan
parents: 29492
diff changeset
   325
     *                  may be {@code null}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   326
     *
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   327
     * @param cs the code specified by its {@code CodeSource}
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   328
     *                  that determines, in conjunction with the provided
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   329
     *                  {@code Subject}, the Permissions
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   330
     *                  returned by this method.  This parameter may be
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   331
     *                  {@code null}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   332
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   333
     * @return the Collection of Permissions granted to all the
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   334
     *                  {@code Subject} and code specified in
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   335
     *                  the provided <i>subject</i> and <i>cs</i>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   336
     *                  parameters.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   337
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   338
    public abstract java.security.PermissionCollection getPermissions
90ce3da70b43 Initial load
duke
parents:
diff changeset
   339
                                        (Subject subject,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   340
                                        java.security.CodeSource cs);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   341
90ce3da70b43 Initial load
duke
parents:
diff changeset
   342
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   343
     * Refresh and reload the Policy.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   345
     * <p>This method causes this object to refresh/reload its current
90ce3da70b43 Initial load
duke
parents:
diff changeset
   346
     * Policy. This is implementation-dependent.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   347
     * For example, if the Policy object is stored in
18830
90956ead732f 8020557: javadoc cleanup in javax.security
juh
parents: 14775
diff changeset
   348
     * a file, calling {@code refresh} will cause the file to be re-read.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   349
     *
90ce3da70b43 Initial load
duke
parents:
diff changeset
   350
     * @exception SecurityException if the caller does not have permission
90ce3da70b43 Initial load
duke
parents:
diff changeset
   351
     *                          to refresh the Policy.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   352
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   353
    public abstract void refresh();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   354
}