• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2003, 2009, 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.  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  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package sun.security.util;
27 
28 import java.net.SocketPermission;
29 import java.net.NetPermission;
30 import java.security.AccessController;
31 import java.security.PrivilegedAction;
32 import java.security.Permission;
33 import java.security.BasicPermission;
34 import java.security.SecurityPermission;
35 import java.security.AllPermission;
36 
37 /**
38  * Permission constants and string constants used to create permissions
39  * used throughout the JDK.
40  */
41 public final class SecurityConstants {
42     // Cannot create one of these
SecurityConstants()43     private SecurityConstants () {
44     }
45 
46     // Commonly used string constants for permission actions used by
47     // SecurityManager. Declare here for shortcut when checking permissions
48     // in FilePermission, SocketPermission, and PropertyPermission.
49 
50     public static final String FILE_DELETE_ACTION = "delete";
51     public static final String FILE_EXECUTE_ACTION = "execute";
52     public static final String FILE_READ_ACTION = "read";
53     public static final String FILE_WRITE_ACTION = "write";
54     public static final String FILE_READLINK_ACTION = "readlink";
55 
56     public static final String SOCKET_RESOLVE_ACTION = "resolve";
57     public static final String SOCKET_CONNECT_ACTION = "connect";
58     public static final String SOCKET_LISTEN_ACTION = "listen";
59     public static final String SOCKET_ACCEPT_ACTION = "accept";
60     public static final String SOCKET_CONNECT_ACCEPT_ACTION = "connect,accept";
61 
62     public static final String PROPERTY_RW_ACTION = "read,write";
63     public static final String PROPERTY_READ_ACTION = "read";
64     public static final String PROPERTY_WRITE_ACTION = "write";
65 
66     // Permission constants used in the various checkPermission() calls in JDK.
67 
68     // java.lang.Class, java.lang.SecurityManager, java.lang.System,
69     // java.net.URLConnection, java.security.AllPermission, java.security.Policy,
70     // sun.security.provider.PolicyFile
71     public static final AllPermission ALL_PERMISSION = new AllPermission();
72 
73     /**
74      * Permission type used when AWT is not present.
75      */
76     /* ----- BEGIN android -----
77     private static class FakeAWTPermission extends BasicPermission {
78         private static final long serialVersionUID = -1L;
79         public FakeAWTPermission(String name) {
80             super(name);
81         }
82         public String toString() {
83             return "(\"java.awt.AWTPermission\" \"" + getName() + "\")";
84         }
85     }
86     ----- END android ----- */
87 
88     /**
89      * Permission factory used when AWT is not present.
90      */
91     /* ----- BEGIN android -----
92     private static class FakeAWTPermissionFactory
93         implements PermissionFactory<FakeAWTPermission>
94     {
95         @Override
96         public FakeAWTPermission newPermission(String name) {
97             return new FakeAWTPermission(name);
98         }
99     }
100     ----- END android ----- */
101 
102     /**
103      * AWT Permissions used in the JDK.
104      */
105     /* ----- BEGIN android -----
106     public static class AWT {
107         private AWT() { }
108 
109         // The class name of the factory to create java.awt.AWTPermission objects.
110         private static final String AWTFactory = "sun.awt.AWTPermissionFactory";
111 
112          // The PermissionFactory to create AWT permissions (or fake permissions
113          // if AWT is not present).
114         private static final PermissionFactory<?> factory = permissionFactory();
115 
116         private static PermissionFactory<?> permissionFactory() {
117             Class<?> c = AccessController
118                 .doPrivileged(new PrivilegedAction<Class<?>>() {
119                     public Class<?> run() {
120                         try {
121                            return Class.forName(AWTFactory, true, null);
122                         } catch (ClassNotFoundException e) {
123                             // not available
124                             return null;
125                         }
126                     }});
127             if (c != null) {
128                 // AWT present
129                 try {
130                     return (PermissionFactory<?>)c.newInstance();
131                 } catch (InstantiationException x) {
132                     throw new InternalError(x.getMessage());
133                 } catch (IllegalAccessException x) {
134                     throw new InternalError(x.getMessage());
135                 }
136             } else {
137                 // AWT not present
138                 return new FakeAWTPermissionFactory();
139             }
140         }
141 
142         private static Permission newAWTPermission(String name) {
143             return factory.newPermission(name);
144         }
145 
146         // java.lang.SecurityManager
147         public static final Permission TOPLEVEL_WINDOW_PERMISSION =
148             newAWTPermission("showWindowWithoutWarningBanner");
149 
150         // java.lang.SecurityManager
151         public static final Permission ACCESS_CLIPBOARD_PERMISSION =
152             newAWTPermission("accessClipboard");
153 
154         // java.lang.SecurityManager
155         public static final Permission CHECK_AWT_EVENTQUEUE_PERMISSION =
156             newAWTPermission("accessEventQueue");
157 
158         // java.awt.Dialog
159         public static final Permission TOOLKIT_MODALITY_PERMISSION =
160             newAWTPermission("toolkitModality");
161 
162         // java.awt.Robot
163         public static final Permission READ_DISPLAY_PIXELS_PERMISSION =
164             newAWTPermission("readDisplayPixels");
165 
166         // java.awt.Robot
167         public static final Permission CREATE_ROBOT_PERMISSION =
168             newAWTPermission("createRobot");
169 
170         // java.awt.MouseInfo
171         public static final Permission WATCH_MOUSE_PERMISSION =
172             newAWTPermission("watchMousePointer");
173 
174         // java.awt.Window
175         public static final Permission SET_WINDOW_ALWAYS_ON_TOP_PERMISSION =
176             newAWTPermission("setWindowAlwaysOnTop");
177 
178         // java.awt.Toolkit
179         public static final Permission ALL_AWT_EVENTS_PERMISSION =
180             newAWTPermission("listenToAllAWTEvents");
181 
182         // java.awt.SystemTray
183         public static final Permission ACCESS_SYSTEM_TRAY_PERMISSION =
184             newAWTPermission("accessSystemTray");
185     }
186     ----- END android ----- */
187 
188     // java.net.URL
189     public static final NetPermission SPECIFY_HANDLER_PERMISSION =
190        new NetPermission("specifyStreamHandler");
191 
192     // java.net.ProxySelector
193     public static final NetPermission SET_PROXYSELECTOR_PERMISSION =
194        new NetPermission("setProxySelector");
195 
196     // java.net.ProxySelector
197     public static final NetPermission GET_PROXYSELECTOR_PERMISSION =
198        new NetPermission("getProxySelector");
199 
200     // java.net.CookieHandler
201     public static final NetPermission SET_COOKIEHANDLER_PERMISSION =
202        new NetPermission("setCookieHandler");
203 
204     // java.net.CookieHandler
205     public static final NetPermission GET_COOKIEHANDLER_PERMISSION =
206        new NetPermission("getCookieHandler");
207 
208     // java.net.ResponseCache
209     public static final NetPermission SET_RESPONSECACHE_PERMISSION =
210        new NetPermission("setResponseCache");
211 
212     // java.net.ResponseCache
213     public static final NetPermission GET_RESPONSECACHE_PERMISSION =
214        new NetPermission("getResponseCache");
215 
216     // java.lang.SecurityManager, sun.applet.AppletPanel, sun.misc.Launcher
217     public static final RuntimePermission CREATE_CLASSLOADER_PERMISSION =
218         new RuntimePermission("createClassLoader");
219 
220     // java.lang.SecurityManager
221     public static final RuntimePermission CHECK_MEMBER_ACCESS_PERMISSION =
222         new RuntimePermission("accessDeclaredMembers");
223 
224     // java.lang.SecurityManager, sun.applet.AppletSecurity
225     public static final RuntimePermission MODIFY_THREAD_PERMISSION =
226         new RuntimePermission("modifyThread");
227 
228     // java.lang.SecurityManager, sun.applet.AppletSecurity
229     public static final RuntimePermission MODIFY_THREADGROUP_PERMISSION =
230         new RuntimePermission("modifyThreadGroup");
231 
232     // java.lang.Class
233     public static final RuntimePermission GET_PD_PERMISSION =
234         new RuntimePermission("getProtectionDomain");
235 
236     // java.lang.Class, java.lang.ClassLoader, java.lang.Thread
237     public static final RuntimePermission GET_CLASSLOADER_PERMISSION =
238         new RuntimePermission("getClassLoader");
239 
240     // java.lang.Thread
241     public static final RuntimePermission STOP_THREAD_PERMISSION =
242        new RuntimePermission("stopThread");
243 
244     // java.lang.Thread
245     public static final RuntimePermission GET_STACK_TRACE_PERMISSION =
246        new RuntimePermission("getStackTrace");
247 
248     // java.security.AccessControlContext
249     public static final SecurityPermission CREATE_ACC_PERMISSION =
250        new SecurityPermission("createAccessControlContext");
251 
252     // java.security.AccessControlContext
253     public static final SecurityPermission GET_COMBINER_PERMISSION =
254        new SecurityPermission("getDomainCombiner");
255 
256     // java.security.Policy, java.security.ProtectionDomain
257     public static final SecurityPermission GET_POLICY_PERMISSION =
258         new SecurityPermission ("getPolicy");
259 
260     // java.lang.SecurityManager
261     public static final SocketPermission LOCAL_LISTEN_PERMISSION =
262         new SocketPermission("localhost:1024-", SOCKET_LISTEN_ACTION);
263 }
264