Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/security/PermissionCollection/Concurrent.java
38811 views
1
/*
2
* Copyright (c) 2003, 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
* @bug 4671598
27
* @summary PermissionCollection is not properly synchronized
28
*/
29
30
import java.security.*; // AllPermission, BasicPermission, Permissions
31
import java.net.NetPermission;
32
import java.net.SocketPermission;
33
import java.io.FilePermission;
34
import java.util.PropertyPermission;
35
import javax.security.auth.AuthPermission;
36
import javax.security.auth.kerberos.DelegationPermission;
37
import javax.security.auth.kerberos.ServicePermission;
38
import javax.management.MBeanServerPermission;
39
import com.sun.rmi.rmid.ExecPermission;
40
import com.sun.rmi.rmid.ExecOptionPermission;
41
42
import java.util.*;
43
44
public class Concurrent {
45
private static final int LIMIT1 = 2000;
46
private static final int LIMIT2 = 1000;
47
private static final boolean debug = false;
48
private static final Map errors =
49
Collections.synchronizedMap(new HashMap());
50
51
public static void main(String args[]) throws Exception {
52
testPc(allp);
53
testPc(filep);
54
testPc(sockp);
55
testPc(propp);
56
testPc(basicp);
57
testPc(delegatep);
58
testPc(servicep);
59
testPc(mbeanp);
60
testPc(unresp);
61
62
testPerms();
63
64
if (errors.size() > 0) {
65
if (true) {
66
Iterator iter = errors.entrySet().iterator();
67
while (iter.hasNext()) {
68
System.out.println(iter.next());
69
}
70
};
71
throw (Exception) new Exception("Got errors");
72
}
73
}
74
75
private static void testPc (final Permission[] perm) throws Exception {
76
77
final PermissionCollection pc = perm[0].newPermissionCollection();
78
79
new Thread() {
80
{
81
setDaemon(true);
82
start();
83
}
84
public void run() {
85
try {
86
for (int i = 0; i < LIMIT1; i++) {
87
for (int j = 0; j < perm.length; j++) {
88
pc.add(perm[j]);
89
if (debug) {
90
System.out.println("added " + perm[j]);
91
}
92
}
93
}
94
} catch (Exception e) {
95
errors.put(perm[0].getClass().getName(), e);
96
}
97
}
98
};
99
try {
100
for (int i = 0; i < LIMIT2; i++) {
101
boolean result = pc.implies(perm[perm.length-1]);
102
if (debug) {
103
System.out.println(perm[perm.length-1] + " implies " + result);
104
}
105
106
synchronized (pc) {
107
Enumeration en = pc.elements();
108
while (en.hasMoreElements()) {
109
Object obj = en.nextElement();
110
if (debug) {
111
System.out.println(obj);
112
}
113
}
114
}
115
}
116
} catch (Exception e) {
117
errors.put(perm[0].getClass().getName(), e);
118
}
119
}
120
121
private static void testPerms () throws Exception {
122
123
final Permissions pc = new Permissions();
124
125
new Thread() {
126
{
127
setDaemon(true);
128
start();
129
}
130
public void run() {
131
try {
132
for (int i = 0; i < LIMIT1; i++) {
133
for (int j = 0; j < permlist.length; j++) {
134
for (int k = 0; k < permlist[j].length; k++) {
135
pc.add(permlist[j][k]);
136
}
137
}
138
}
139
} catch (Exception e) {
140
errors.put("java.security.Permissions", e);
141
}
142
}
143
};
144
try {
145
for (int i = 0; i < LIMIT2; i++) {
146
for (int j = 0; j < permlist.length; j++) {
147
boolean result = pc.implies(permlist[j][0]);
148
if (debug) {
149
System.out.println(permlist[j][0] + " implies " + result);
150
}
151
}
152
153
synchronized (pc) {
154
Enumeration en = pc.elements();
155
while (en.hasMoreElements()) {
156
Object obj = en.nextElement();
157
if (debug) {
158
System.out.println(obj);
159
}
160
}
161
}
162
}
163
} catch (Exception e) {
164
errors.put("java.security.Permissions", e);
165
}
166
}
167
168
private static final Permission[] allp = new Permission[]{
169
new AllPermission(), new AllPermission()};
170
171
private static final Permission[] filep = new Permission[]{
172
new FilePermission("/home/foobar", "read"),
173
new FilePermission("/home/foo", "write"),
174
new FilePermission("/home/foobar", "read,write"),
175
};
176
177
private static final Permission[] sockp = new Permission[]{
178
new SocketPermission("example.net", "connect"),
179
new SocketPermission("www.sun.com", "resolve"),
180
new SocketPermission("www.test1.com", "accept"),
181
new SocketPermission("www.test3.com", "resolve,connect"),
182
new SocketPermission("www.test4.com", "listen"),
183
};
184
185
private static final Permission[] propp = new Permission[]{
186
new PropertyPermission("user.home", "read"),
187
new PropertyPermission("java.home", "write"),
188
new PropertyPermission("test.home", "write"),
189
new PropertyPermission("test1.home", "read"),
190
new PropertyPermission("test2.home", "read"),
191
};
192
193
private static final Permission[] basicp = new Permission[] {
194
new NetPermission("setDefaultAuthenticator"),
195
new NetPermission("requestPasswordAuthentication"),
196
new NetPermission("specifyStreamHandler")
197
};
198
199
private static final Permission[] delegatep = new Permission[] {
200
new DelegationPermission(
201
"\"host/[email protected]\" \"cn=John,o=imc,c=us\""),
202
new DelegationPermission(
203
"\"user/[email protected]\" \"cn=John,o=imc,c=us\""),
204
new DelegationPermission(
205
"\"host/[email protected]\" \"cn=John,o=imc,c=us\"")
206
};
207
208
private static final Permission[] servicep = new Permission[]{
209
new ServicePermission("krbtgt/[email protected]", "initiate"),
210
new ServicePermission("ldap/[email protected]", "initiate"),
211
new ServicePermission("imap/[email protected]", "accept"),
212
new ServicePermission("acap/[email protected]", "initiate"),
213
new ServicePermission("host/[email protected]", "initiate"),
214
};
215
216
private static final Permission[] mbeanp = new Permission[] {
217
new MBeanServerPermission("createMBeanServer"),
218
new MBeanServerPermission("findMBeanServer"),
219
new MBeanServerPermission("newMBeanServer"),
220
new MBeanServerPermission("releaseMBeanServer"),
221
};
222
223
private static final Permission[] unresp = new Permission[] {
224
new UnresolvedPermission("com.unknown.TestClass", "UnknownPermission",
225
"read,write", null),
226
new UnresolvedPermission("com.unknown.TestClass", "APermission",
227
"read,write", null),
228
new UnresolvedPermission("com.unknown.TestClass", "BPermission",
229
"read,write", null),
230
new UnresolvedPermission("com.unknown.CClass", "CPermission",
231
"read,write", null),
232
new UnresolvedPermission("com.unknown.DClass", "DUnknownPermission",
233
"read,write", null),
234
new UnresolvedPermission("com.unknown.EClass", "EUnknownPermission",
235
"read,write", null),
236
};
237
238
private static final Permission[][] permlist = new Permission[][]{
239
allp, filep, sockp, propp, basicp, delegatep, servicep, mbeanp, unresp};
240
}
241
242