blob: a08c00500ae3823223eb8d032d9c397554789d38 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1998-2006 Sun Microsystems, 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. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package java.security;
27
28import java.security.*;
29import java.util.Enumeration;
30import java.util.Hashtable;
31import java.util.StringTokenizer;
32import sun.security.util.SecurityConstants;
33
34/**
35 * The AllPermission is a permission that implies all other permissions.
36 * <p>
37 * <b>Note:</b> Granting AllPermission should be done with extreme care,
38 * as it implies all other permissions. Thus, it grants code the ability
39 * to run with security
40 * disabled. Extreme caution should be taken before granting such
41 * a permission to code. This permission should be used only during testing,
42 * or in extremely rare cases where an application or applet is
43 * completely trusted and adding the necessary permissions to the policy
44 * is prohibitively cumbersome.
45 *
46 * @see java.security.Permission
47 * @see java.security.AccessController
48 * @see java.security.Permissions
49 * @see java.security.PermissionCollection
50 * @see java.lang.SecurityManager
51 *
52 *
53 * @author Roland Schemers
54 *
55 * @serial exclude
56 */
57
58public final class AllPermission extends Permission {
59
60 private static final long serialVersionUID = -2916474571451318075L;
61
62 /**
63 * Creates a new AllPermission object.
64 */
65
66 public AllPermission()
67 {
68 super("<all permissions>");
69 }
70
71
72 /**
73 * Creates a new AllPermission object. This
74 * constructor exists for use by the <code>Policy</code> object
75 * to instantiate new Permission objects.
76 *
77 * @param name ignored
78 * @param actions ignored.
79 */
80 public AllPermission(String name, String actions)
81 {
82 this();
83 }
84
85 /**
86 * Checks if the specified permission is "implied" by
87 * this object. This method always returns true.
88 *
89 * @param p the permission to check against.
90 *
91 * @return return
92 */
93 public boolean implies(Permission p) {
94 return true;
95 }
96
97 /**
98 * Checks two AllPermission objects for equality. Two AllPermission
99 * objects are always equal.
100 *
101 * @param obj the object we are testing for equality with this object.
102 * @return true if <i>obj</i> is an AllPermission, false otherwise.
103 */
104 public boolean equals(Object obj) {
105 return (obj instanceof AllPermission);
106 }
107
108 /**
109 * Returns the hash code value for this object.
110 *
111 * @return a hash code value for this object.
112 */
113
114 public int hashCode() {
115 return 1;
116 }
117
118 /**
119 * Returns the canonical string representation of the actions.
120 *
121 * @return the actions.
122 */
123 public String getActions()
124 {
125 return "<all actions>";
126 }
127
128 /**
129 * Returns a new PermissionCollection object for storing AllPermission
130 * objects.
131 * <p>
132 *
133 * @return a new PermissionCollection object suitable for
134 * storing AllPermissions.
135 */
136
137 public PermissionCollection newPermissionCollection() {
138 return new AllPermissionCollection();
139 }
140
141}
142
143/**
144 * A AllPermissionCollection stores a collection
145 * of AllPermission permissions. AllPermission objects
146 * must be stored in a manner that allows them to be inserted in any
147 * order, but enable the implies function to evaluate the implies
148 * method in an efficient (and consistent) manner.
149 *
150 * @see java.security.Permission
151 * @see java.security.Permissions
152 *
153 *
154 * @author Roland Schemers
155 *
156 * @serial include
157 */
158
159final class AllPermissionCollection
160extends PermissionCollection
161implements java.io.Serializable
162{
163
164 // use serialVersionUID from JDK 1.2.2 for interoperability
165 private static final long serialVersionUID = -4023755556366636806L;
166
167 private boolean all_allowed; // true if any all permissions have been added
168
169 /**
170 * Create an empty AllPermissions object.
171 *
172 */
173
174 public AllPermissionCollection() {
175 all_allowed = false;
176 }
177
178 /**
179 * Adds a permission to the AllPermissions. The key for the hash is
180 * permission.path.
181 *
182 * @param permission the Permission object to add.
183 *
184 * @exception IllegalArgumentException - if the permission is not a
185 * AllPermission
186 *
187 * @exception SecurityException - if this AllPermissionCollection object
188 * has been marked readonly
189 */
190
191 public void add(Permission permission)
192 {
193 if (! (permission instanceof AllPermission))
194 throw new IllegalArgumentException("invalid permission: "+
195 permission);
196 if (isReadOnly())
197 throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
198
199 all_allowed = true; // No sync; staleness OK
200 }
201
202 /**
203 * Check and see if this set of permissions implies the permissions
204 * expressed in "permission".
205 *
206 * @param p the Permission object to compare
207 *
208 * @return always returns true.
209 */
210
211 public boolean implies(Permission permission)
212 {
213 return all_allowed; // No sync; staleness OK
214 }
215
216 /**
217 * Returns an enumeration of all the AllPermission objects in the
218 * container.
219 *
220 * @return an enumeration of all the AllPermission objects.
221 */
222 public Enumeration<Permission> elements()
223 {
224 return new Enumeration<Permission>() {
225 private boolean hasMore = all_allowed;
226
227 public boolean hasMoreElements() {
228 return hasMore;
229 }
230
231 public Permission nextElement() {
232 hasMore = false;
233 return SecurityConstants.ALL_PERMISSION;
234 }
235 };
236 }
237}