test/jdk/java/lang/SecurityManager/PackageAccessTest.java
author xiaofeya
Wed, 28 Mar 2018 21:57:03 -0700
changeset 49444 ae873285a39c
permissions -rw-r--r--
8196668: revisit test SunPackageAccess and GrantedSunPackageAccess Reviewed-by: mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49444
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     1
/*
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     2
 * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     4
 *
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     7
 * published by the Free Software Foundation.
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     8
 *
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    13
 * accompanied this code).
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    14
 *
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    18
 *
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    21
 * questions.
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    22
 */
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    23
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    24
/*
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    25
 * @test
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    26
 * @bug 4256530 4136245
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    27
 * @summary Check that restricted packages that are supposed to be restricted
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    28
 *          and explicit grants accessClassInPackage permission overridden in
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    29
 *          privileged block
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    30
 * @modules java.base/sun.security.x509
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    31
 * @run main/othervm PackageAccessTest
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    32
 * @run main/othervm/java.security.policy=test.policy PackageAccessTest access
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    33
 * @run main/othervm/java.security.policy=empty.policy PackageAccessTest deny
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    34
 */
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    35
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    36
import java.security.AccessControlException;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    37
import java.security.AccessController;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    38
import java.security.PrivilegedExceptionAction;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    39
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    40
public class PackageAccessTest {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    41
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    42
    public static void main(String[] args) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    43
        boolean access = true;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    44
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    45
        if (args != null && args.length > 0) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    46
            switch (args[0]) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    47
                case "access":
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    48
                    access = true;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    49
                    break;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    50
                case "deny":
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    51
                    access = false;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    52
                    break;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    53
                default:
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    54
                    throw new RuntimeException(
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    55
                            "Invalid input parameter " + args[0]);
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    56
            }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    57
        }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    58
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    59
        testPkgAccess(access);
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    60
        testPkgAccessWithPrivileged(access);
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    61
    }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    62
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    63
    private static void testPkgAccess(boolean access) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    64
        try {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    65
            sun.security.x509.X509CertInfo x = new sun.security.x509.X509CertInfo();
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    66
            if (!access) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    67
                throw new RuntimeException(
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    68
                        "application unexpectedly able to access the internal package");
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    69
            }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    70
        } catch (SecurityException se) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    71
            if (access) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    72
                throw new RuntimeException("Unexpected security exception", se);
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    73
            }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    74
        }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    75
    }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    76
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    77
    private static void testPkgAccessWithPrivileged(boolean access) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    78
        sun.security.x509.X509CertInfo o = null;
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    79
        try {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    80
            o = (sun.security.x509.X509CertInfo) AccessController.doPrivileged(
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    81
                    (PrivilegedExceptionAction) () -> new sun.security.x509.X509CertInfo());
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    82
            if (!access) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    83
                throw new RuntimeException(
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    84
                        "application unexpectedly able to access the internal package");
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    85
            }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    86
        } catch (AccessControlException ace) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    87
            if (access) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    88
                throw new RuntimeException("Unexpected AccessControlException", ace);
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    89
            }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    90
        } catch (Exception ex) {
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    91
            throw new RuntimeException("Test failed with unexpected exception", ex);
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    92
        }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    93
        if (access && o == null)
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    94
            throw new RuntimeException(
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    95
                    "Test failed: unable to instantiate object");
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    96
    }
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    97
ae873285a39c 8196668: revisit test SunPackageAccess and GrantedSunPackageAccess
xiaofeya
parents:
diff changeset
    98
}