1 /*
2  * Copyright 2010 Google Inc.  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  * @bug 6980747
27  * @summary Check that Process-related classes have the proper
28  *     doPrivileged blocks, and can be initialized with an adversarial
29  *     security manager.
30  * @run main/othervm SecurityManagerClinit
31  * @author Martin Buchholz
32  */
33 
34 import java.io.*;
35 import java.security.*;
36 
37 public class SecurityManagerClinit {
38     private static class Policy extends java.security.Policy {
39         private Permissions perms;
40 
Policy(Permission... permissions)41         public Policy(Permission... permissions) {
42             perms = new Permissions();
43             for (Permission permission : permissions)
44                 perms.add(permission);
45         }
46 
implies(ProtectionDomain pd, Permission p)47         public boolean implies(ProtectionDomain pd, Permission p) {
48             return perms.implies(p);
49         }
50     }
51 
main(String[] args)52     public static void main(String[] args) throws Throwable {
53         String javaExe =
54             System.getProperty("java.home") +
55             File.separator + "bin" + File.separator + "java";
56 
57         final Policy policy =
58             new Policy
59             (new FilePermission("<<ALL FILES>>", "execute"),
60              new RuntimePermission("setSecurityManager"));
61         Policy.setPolicy(policy);
62 
63         System.setSecurityManager(new SecurityManager());
64 
65         try {
66             String[] cmd = { javaExe, "-version" };
67             Process p = Runtime.getRuntime().exec(cmd);
68             p.getOutputStream().close();
69             p.getInputStream().close();
70             p.getErrorStream().close();
71             p.waitFor();
72         } finally {
73             System.setSecurityManager(null);
74         }
75     }
76 }
77