History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/security/SecurityPermission.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/security/SecurityPermission.java+331−0
@@ -0,0 +1,331 @@
1+/*
2+ * Copyright (c) 1997, 2006, 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 java.security;
27+
28+import java.security.*;
29+import java.util.Enumeration;
30+import java.util.Hashtable;
31+import java.util.StringTokenizer;
32+
33+/**
34+ * This class is for security permissions.
35+ * A SecurityPermission contains a name (also referred to as a "target name")
36+ * but no actions list; you either have the named permission
37+ * or you don't.
38+ * <P>
39+ * The target name is the name of a security configuration parameter (see below).
40+ * Currently the SecurityPermission object is used to guard access
41+ * to the Policy, Security, Provider, Signer, and Identity
42+ * objects.
43+ * <P>
44+ * The following table lists all the possible SecurityPermission target names,
45+ * and for each provides a description of what the permission allows
46+ * and a discussion of the risks of granting code the permission.
47+ * <P>
48+ *
49+ * <table border=1 cellpadding=5 summary="target name,what the permission allows, and associated risks">
50+ * <tr>
51+ * <th>Permission Target Name</th>
52+ * <th>What the Permission Allows</th>
53+ * <th>Risks of Allowing this Permission</th>
54+ * </tr>
55+ *
56+ * <tr>
57+ * <td>createAccessControlContext</td>
58+ * <td>Creation of an AccessControlContext</td>
59+ * <td>This allows someone to instantiate an AccessControlContext
60+ * with a <code>DomainCombiner</code>. Extreme care must be taken when
61+ * granting this permission. Malicious code could create a DomainCombiner
62+ * that augments the set of permissions granted to code, and even grant the
63+ * code {@link java.security.AllPermission}.</td>
64+ * </tr>
65+ *
66+ * <tr>
67+ * <td>getDomainCombiner</td>
68+ * <td>Retrieval of an AccessControlContext's DomainCombiner</td>
69+ * <td>This allows someone to retrieve an AccessControlContext's
70+ * <code>DomainCombiner</code>. Since DomainCombiners may contain
71+ * sensitive information, this could potentially lead to a privacy leak.</td>
72+ * </tr>
73+ *
74+ * <tr>
75+ * <td>getPolicy</td>
76+ * <td>Retrieval of the system-wide security policy (specifically, of the
77+ * currently-installed Policy object)</td>
78+ * <td>This allows someone to query the policy via the
79+ * <code>getPermissions</code> call,
80+ * which discloses which permissions would be granted to a given CodeSource.
81+ * While revealing the policy does not compromise the security of
82+ * the system, it does provide malicious code with additional information
83+ * which it may use to better aim an attack. It is wise
84+ * not to divulge more information than necessary.</td>
85+ * </tr>
86+ *
87+ * <tr>
88+ * <td>setPolicy</td>
89+ * <td>Setting of the system-wide security policy (specifically,
90+ * the Policy object)</td>
91+ * <td>Granting this permission is extremely dangerous, as malicious
92+ * code may grant itself all the necessary permissions it needs
93+ * to successfully mount an attack on the system.</td>
94+ * </tr>
95+ *
96+ * <tr>
97+ * <td>createPolicy.{policy type}</td>
98+ * <td>Getting an instance of a Policy implementation from a provider</td>
99+ * <td>Granting this permission enables code to obtain a Policy object.
100+ * Malicious code may query the Policy object to determine what permissions
101+ * have been granted to code other than itself. </td>
102+ * </tr>
103+ *
104+ * <tr>
105+ * <td>getProperty.{key}</td>
106+ * <td>Retrieval of the security property with the specified key</td>
107+ * <td>Depending on the particular key for which access has
108+ * been granted, the code may have access to the list of security
109+ * providers, as well as the location of the system-wide and user
110+ * security policies. while revealing this information does not
111+ * compromise the security of the system, it does provide malicious
112+ * code with additional information which it may use to better aim
113+ * an attack.
114+</td>
115+ * </tr>
116+ *
117+ * <tr>
118+ * <td>setProperty.{key}</td>
119+ * <td>Setting of the security property with the specified key</td>
120+ * <td>This could include setting a security provider or defining
121+ * the location of the system-wide security policy. Malicious
122+ * code that has permission to set a new security provider may
123+ * set a rogue provider that steals confidential information such
124+ * as cryptographic private keys. In addition, malicious code with
125+ * permission to set the location of the system-wide security policy
126+ * may point it to a security policy that grants the attacker
127+ * all the necessary permissions it requires to successfully mount
128+ * an attack on the system.
129+</td>
130+ * </tr>
131+ *
132+ * <tr>
133+ * <td>insertProvider.{provider name}</td>
134+ * <td>Addition of a new provider, with the specified name</td>
135+ * <td>This would allow somebody to introduce a possibly
136+ * malicious provider (e.g., one that discloses the private keys passed
137+ * to it) as the highest-priority provider. This would be possible
138+ * because the Security object (which manages the installed providers)
139+ * currently does not check the integrity or authenticity of a provider
140+ * before attaching it.</td>
141+ * </tr>
142+ *
143+ * <tr>
144+ * <td>removeProvider.{provider name}</td>
145+ * <td>Removal of the specified provider</td>
146+ * <td>This may change the behavior or disable execution of other
147+ * parts of the program. If a provider subsequently requested by the
148+ * program has been removed, execution may fail. Also, if the removed
149+ * provider is not explicitly requested by the rest of the program, but
150+ * it would normally be the provider chosen when a cryptography service
151+ * is requested (due to its previous order in the list of providers),
152+ * a different provider will be chosen instead, or no suitable provider
153+ * will be found, thereby resulting in program failure.</td>
154+ * </tr>
155+ *
156+ * <tr>
157+ * <td>clearProviderProperties.{provider name}</td>
158+ * <td>"Clearing" of a Provider so that it no longer contains the properties
159+ * used to look up services implemented by the provider</td>
160+ * <td>This disables the lookup of services implemented by the provider.
161+ * This may thus change the behavior or disable execution of other
162+ * parts of the program that would normally utilize the Provider, as
163+ * described under the "removeProvider.{provider name}" permission.</td>
164+ * </tr>
165+ *
166+ * <tr>
167+ * <td>putProviderProperty.{provider name}</td>
168+ * <td>Setting of properties for the specified Provider</td>
169+ * <td>The provider properties each specify the name and location
170+ * of a particular service implemented by the provider. By granting
171+ * this permission, you let code replace the service specification
172+ * with another one, thereby specifying a different implementation.</td>
173+ * </tr>
174+ *
175+ * <tr>
176+ * <td>removeProviderProperty.{provider name}</td>
177+ * <td>Removal of properties from the specified Provider</td>
178+ * <td>This disables the lookup of services implemented by the
179+ * provider. They are no longer accessible due to removal of the properties
180+ * specifying their names and locations. This
181+ * may change the behavior or disable execution of other
182+ * parts of the program that would normally utilize the Provider, as
183+ * described under the "removeProvider.{provider name}" permission.</td>
184+ * </tr>
185+ *
186+ * </table>
187+ *
188+ * <P>
189+ * The following permissions are associated with classes that have been
190+ * deprecated: {@link Identity}, {@link IdentityScope}, {@link Signer}. Use of
191+ * them is discouraged. See the applicable classes for more information.
192+ * <P>
193+ *
194+ * <table border=1 cellpadding=5 summary="target name,what the permission allows, and associated risks">
195+ * <tr>
196+ * <th>Permission Target Name</th>
197+ * <th>What the Permission Allows</th>
198+ * <th>Risks of Allowing this Permission</th>
199+ * </tr>
200+ *
201+ * <tr>
202+ * <td>setSystemScope</td>
203+ * <td>Setting of the system identity scope</td>
204+ * <td>This would allow an attacker to configure the system identity scope with
205+ * certificates that should not be trusted, thereby granting applet or
206+ * application code signed with those certificates privileges that
207+ * would have been denied by the system's original identity scope.</td>
208+ * </tr>
209+ *
210+ * <tr>
211+ * <td>setIdentityPublicKey</td>
212+ * <td>Setting of the public key for an Identity</td>
213+ * <td>If the identity is marked as "trusted", this allows an attacker to
214+ * introduce a different public key (e.g., its own) that is not trusted
215+ * by the system's identity scope, thereby granting applet or
216+ * application code signed with that public key privileges that
217+ * would have been denied otherwise.</td>
218+ * </tr>
219+ *
220+ * <tr>
221+ * <td>setIdentityInfo</td>
222+ * <td>Setting of a general information string for an Identity</td>
223+ * <td>This allows attackers to set the general description for
224+ * an identity. This may trick applications into using a different
225+ * identity than intended or may prevent applications from finding a
226+ * particular identity.</td>
227+ * </tr>
228+ *
229+ * <tr>
230+ * <td>addIdentityCertificate</td>
231+ * <td>Addition of a certificate for an Identity</td>
232+ * <td>This allows attackers to set a certificate for
233+ * an identity's public key. This is dangerous because it affects
234+ * the trust relationship across the system. This public key suddenly
235+ * becomes trusted to a wider audience than it otherwise would be.</td>
236+ * </tr>
237+ *
238+ * <tr>
239+ * <td>removeIdentityCertificate</td>
240+ * <td>Removal of a certificate for an Identity</td>
241+ * <td>This allows attackers to remove a certificate for
242+ * an identity's public key. This is dangerous because it affects
243+ * the trust relationship across the system. This public key suddenly
244+ * becomes considered less trustworthy than it otherwise would be.</td>
245+ * </tr>
246+ *
247+ * <tr>
248+ * <td>printIdentity</td>
249+ * <td>Viewing the name of a principal
250+ * and optionally the scope in which it is used, and whether
251+ * or not it is considered "trusted" in that scope</td>
252+ * <td>The scope that is printed out may be a filename, in which case
253+ * it may convey local system information. For example, here's a sample
254+ * printout of an identity named "carol", who is
255+ * marked not trusted in the user's identity database:<br>
256+ * carol[/home/luehe/identitydb.obj][not trusted]</td>
257+ *</tr>
258+ *
259+ * <tr>
260+ * <td>getSignerPrivateKey</td>
261+ * <td>Retrieval of a Signer's private key</td>
262+ * <td>It is very dangerous to allow access to a private key; private
263+ * keys are supposed to be kept secret. Otherwise, code can use the
264+ * private key to sign various files and claim the signature came from
265+ * the Signer.</td>
266+ * </tr>
267+ *
268+ * <tr>
269+ * <td>setSignerKeyPair</td>
270+ * <td>Setting of the key pair (public key and private key) for a Signer</td>
271+ * <td>This would allow an attacker to replace somebody else's (the "target's")
272+ * keypair with a possibly weaker keypair (e.g., a keypair of a smaller
273+ * keysize). This also would allow the attacker to listen in on encrypted
274+ * communication between the target and its peers. The target's peers
275+ * might wrap an encryption session key under the target's "new" public
276+ * key, which would allow the attacker (who possesses the corresponding
277+ * private key) to unwrap the session key and decipher the communication
278+ * data encrypted under that session key.</td>
279+ * </tr>
280+ *
281+ * </table>
282+ *
283+ * @see java.security.BasicPermission
284+ * @see java.security.Permission
285+ * @see java.security.Permissions
286+ * @see java.security.PermissionCollection
287+ * @see java.lang.SecurityManager
288+ *
289+ *
290+ * @author Marianne Mueller
291+ * @author Roland Schemers
292+ */
293+
294+public final class SecurityPermission extends BasicPermission {
295+
296+ private static final long serialVersionUID = 5236109936224050470L;
297+
298+ /**
299+ * Creates a new SecurityPermission with the specified name.
300+ * The name is the symbolic name of the SecurityPermission. An asterisk
301+ * may appear at the end of the name, following a ".", or by itself, to
302+ * signify a wildcard match.
303+ *
304+ * @param name the name of the SecurityPermission
305+ *
306+ * @throws NullPointerException if <code>name</code> is <code>null</code>.
307+ * @throws IllegalArgumentException if <code>name</code> is empty.
308+ */
309+
310+ public SecurityPermission(String name)
311+ {
312+ super(name);
313+ }
314+
315+ /**
316+ * Creates a new SecurityPermission object with the specified name.
317+ * The name is the symbolic name of the SecurityPermission, and the
318+ * actions String is currently unused and should be null.
319+ *
320+ * @param name the name of the SecurityPermission
321+ * @param actions should be null.
322+ *
323+ * @throws NullPointerException if <code>name</code> is <code>null</code>.
324+ * @throws IllegalArgumentException if <code>name</code> is empty.
325+ */
326+
327+ public SecurityPermission(String name, String actions)
328+ {
329+ super(name, actions);
330+ }
331+}