1 /*
2  * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /**
25  * @test
26  * @run main/othervm WithSecurityManager allow
27  * @run main/othervm WithSecurityManager deny
28  */
29 
30 import java.net.URI;
31 import java.nio.file.FileSystems;
32 import java.nio.file.Files;
33 import java.nio.file.Path;
34 import java.nio.file.Paths;
35 import java.util.Collections;
36 
37 public class WithSecurityManager {
main(String[] args)38     public static void main(String[] args) throws Exception {
39         Path modulesPath = Paths.get(System.getProperty("java.home"),
40                 "lib", "modules");
41         if (Files.notExists(modulesPath)) {
42             System.out.printf("%s doesn't exist.", modulesPath.toString());
43             System.out.println();
44             System.out.println("It is most probably an exploded build."
45                     + " Skip the test.");
46             return;
47         }
48 
49         boolean allow = args[0].equals("allow");
50 
51         // set security policy to allow access
52         if (allow) {
53 
54             String testSrc = System.getProperty("test.src");
55             if (testSrc == null)
56                 testSrc = ".";
57             Path policyFile = Paths.get(testSrc, "java.policy");
58             System.setProperty("java.security.policy", policyFile.toString());
59         }
60 
61         // make sure that jrt:/ has been created before we have a security manager
62         FileSystems.getFileSystem(URI.create("jrt:/"));
63 
64         System.setSecurityManager(new SecurityManager());
65 
66         // check FileSystems.getFileSystem
67         try {
68             FileSystems.getFileSystem(URI.create("jrt:/"));
69             if (!allow) throw new RuntimeException("access not expected");
70         } catch (SecurityException se) {
71             if (allow)
72                 throw se;
73         }
74 
75         // check FileSystems.newFileSystem
76         try {
77             FileSystems.newFileSystem(URI.create("jrt:/"), Collections.emptyMap());
78             if (!allow) throw new RuntimeException("access not expected");
79         } catch (SecurityException se) {
80             if (allow)
81                 throw se;
82         }
83 
84         // check Paths.get
85         try {
86             Paths.get(URI.create("jrt:/java.base/java/lang/Object.class"));
87             if (!allow) throw new RuntimeException("access not expected");
88         } catch (SecurityException se) {
89             if (allow)
90                 throw se;
91         }
92     }
93 }
94