46
46
@ SuppressWarnings ("removal" )
47
47
/*[ENDIF] JAVA_SPEC_VERSION >= 17 */
48
48
public final class AccessController {
49
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
50
+ private static final AccessControlContext ACC_NO_PERM = new AccessControlContext (
51
+ new ProtectionDomain [] { new ProtectionDomain (null , null ) });
52
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
49
53
static {
50
54
// Initialize vm-internal caches
51
55
initializeInternal ();
52
56
}
53
57
54
- /*[IF JAVA_SPEC_VERSION >= 24]*/
55
- private static AccessControlContext ACC_NO_PERM = new AccessControlContext (
56
- new ProtectionDomain [] { new ProtectionDomain (null , null ) });
57
- /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
58
-
59
58
static final int OBJS_INDEX_ACC = 0 ;
60
59
static final int OBJS_INDEX_PDS = 1 ;
61
60
static final int OBJS_ARRAY_SIZE = 3 ;
62
61
static final int OBJS_INDEX_PERMS_OR_CACHECHECKED = 2 ;
63
62
64
- private static native void initializeInternal ();
63
+ private static native void initializeInternal ();
65
64
66
- /* [PR CMVC 188787] Enabling -Djava.security.debug option within WAS keeps JVM busy */
67
- static final class DebugRecursionDetection {
68
- private static ThreadLocal <String > tlDebug = new ThreadLocal <>();
69
- static ThreadLocal <String > getTlDebug () {
70
- return tlDebug ;
65
+ /* [PR CMVC 188787] Enabling -Djava.security.debug option within WAS keeps JVM busy */
66
+ static final class DebugRecursionDetection {
67
+ private static ThreadLocal <String > tlDebug = new ThreadLocal <>();
68
+ static ThreadLocal <String > getTlDebug () {
69
+ return tlDebug ;
70
+ }
71
71
}
72
- }
72
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
73
73
74
74
/*[PR 1FDIC6B] J9JCL:WIN95 - AccessController missing private no-arg constructor */
75
75
/**
@@ -79,6 +79,7 @@ private AccessController() {
79
79
super ();
80
80
}
81
81
82
+ /*[IF JAVA_SPEC_VERSION < 24]*/
82
83
/**
83
84
* The object array returned has following format:
84
85
*
@@ -155,7 +156,6 @@ private AccessController() {
155
156
*/
156
157
private static native ProtectionDomain getCallerPD (int depth );
157
158
158
- /*[IF JAVA_SPEC_VERSION < 24]*/
159
159
/**
160
160
* provide debug info according to debug settings before throwing AccessControlException
161
161
*
@@ -279,7 +279,6 @@ private static boolean checkPermissionHelper(Permission perm, AccessControlConte
279
279
}
280
280
return limitedPermImplied ;
281
281
}
282
- /*[ENDIF] JAVA_SPEC_VERSION < 24 */
283
282
284
283
/**
285
284
* Helper to print debug stack information for checkPermission().
@@ -369,15 +368,23 @@ private static boolean debugHelperJEP140(Object[] objects, Permission perm) {
369
368
debugPrintStack (debug , perm );
370
369
return debug ;
371
370
}
371
+ /*[ENDIF] JAVA_SPEC_VERSION < 24 */
372
372
373
373
/**
374
+ /*[IF JAVA_SPEC_VERSION >= 24]
375
+ * Throws AccessControlException
376
+ *
377
+ * @param perm is ignored
378
+ * @exception AccessControlException is always thrown
379
+ /*[ELSE] JAVA_SPEC_VERSION >= 24
374
380
* Checks whether the running program is allowed to
375
381
* access the resource being guarded by the given
376
382
* Permission argument.
377
383
*
378
384
* @param perm the permission to check
379
385
* @exception AccessControlException if access is not allowed.
380
386
* NullPointerException if perm is null
387
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24
381
388
*/
382
389
public static void checkPermission (Permission perm ) throws AccessControlException {
383
390
/*[IF JAVA_SPEC_VERSION >= 24]*/
@@ -441,24 +448,9 @@ public static void checkPermission(Permission perm) throws AccessControlExceptio
441
448
}
442
449
443
450
/**
444
- * Used to keep the context live during doPrivileged().
445
- *
446
- * @param context the context to retain
447
- *
448
- * @see #doPrivileged(PrivilegedAction, AccessControlContext)
449
- */
450
- private static void keepalive (AccessControlContext context ) {
451
- return ;
452
- }
453
-
454
- /**
455
- * @param perms the permissions to retain
456
- */
457
- private static void keepalive (Permission ... perms ) {
458
- return ;
459
- }
460
-
461
- /**
451
+ /*[IF JAVA_SPEC_VERSION >= 24]
452
+ * @return an AccessControlContext with no permissions
453
+ /*[ELSE] JAVA_SPEC_VERSION >= 24
462
454
* Answers the access controller context of the current thread,
463
455
* including the inherited ones. It basically retrieves all the
464
456
* protection domains from the calling stack and creates an
@@ -467,6 +459,7 @@ private static void keepalive(Permission... perms) {
467
459
* @return an AccessControlContext which captures the current state
468
460
*
469
461
* @see AccessControlContext
462
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24
470
463
*/
471
464
public static AccessControlContext getContext () {
472
465
/*[IF JAVA_SPEC_VERSION >= 24]*/
@@ -476,6 +469,25 @@ public static AccessControlContext getContext() {
476
469
/*[ENDIF] JAVA_SPEC_VERSION >= 24 */
477
470
}
478
471
472
+ /*[IF JAVA_SPEC_VERSION < 24]*/
473
+ /**
474
+ * Used to keep the context live during doPrivileged().
475
+ *
476
+ * @param context the context to retain
477
+ *
478
+ * @see #doPrivileged(PrivilegedAction, AccessControlContext)
479
+ */
480
+ private static void keepalive (AccessControlContext context ) {
481
+ return ;
482
+ }
483
+
484
+ /**
485
+ * @param perms the permissions to retain
486
+ */
487
+ private static void keepalive (Permission ... perms ) {
488
+ return ;
489
+ }
490
+
479
491
/**
480
492
* This is a helper method for getContext() and doPrivilegedWithCombiner methods.
481
493
* Answers the access controller context of the current thread including the inherited ones.
@@ -624,9 +636,6 @@ private static ProtectionDomain[] generatePDarray(DomainCombiner activeDC, Acces
624
636
* @return AccessControlContext.STATE_AUTHORIZED or STATE_NOT_AUTHORIZED (can't be STATE_UNKNOWN)
625
637
*/
626
638
private static int getNewAuthorizedState (AccessControlContext acc , ProtectionDomain callerPD ) {
627
- /*[IF JAVA_SPEC_VERSION >= 24]*/
628
- return AccessControlContext .STATE_AUTHORIZED ;
629
- /*[ELSE] JAVA_SPEC_VERSION >= 24 */
630
639
int newAuthorizedState ;
631
640
/*[PR JAZZ 87596] PMR 18839,756,000 - Need to trust AccessControlContext created without active SecurityManager */
632
641
if ((null != acc ) && (null != System .getSecurityManager ())) {
@@ -643,7 +652,6 @@ private static int getNewAuthorizedState(AccessControlContext acc, ProtectionDom
643
652
newAuthorizedState = AccessControlContext .STATE_AUTHORIZED ;
644
653
}
645
654
return newAuthorizedState ;
646
- /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
647
655
}
648
656
649
657
/**
@@ -712,6 +720,7 @@ static ProtectionDomain[] toArrayOfProtectionDomains(Object[] domains, AccessCon
712
720
713
721
return answer ;
714
722
}
723
+ /*[ENDIF] JAVA_SPEC_VERSION < 24 */
715
724
716
725
/**
717
726
* Performs the privileged action specified by <code>action</code>.
@@ -760,10 +769,14 @@ public static <T> T doPrivileged(PrivilegedAction<T> action) {
760
769
*/
761
770
@ CallerSensitive
762
771
public static <T > T doPrivileged (PrivilegedAction <T > action , AccessControlContext context ) {
772
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
773
+ return action .run ();
774
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
763
775
T result = action .run ();
764
776
/*[PR 108112] context is not kept alive*/
765
777
keepalive (context );
766
778
return result ;
779
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
767
780
}
768
781
769
782
/**
@@ -827,10 +840,14 @@ public static <T> T doPrivileged (PrivilegedExceptionAction<T> action, AccessCon
827
840
throws PrivilegedActionException
828
841
{
829
842
try {
843
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
844
+ return action .run ();
845
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
830
846
T result = action .run ();
831
847
/*[PR 108112] context is not kept alive*/
832
848
keepalive (context );
833
849
return result ;
850
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
834
851
} catch (RuntimeException ex ) {
835
852
throw ex ;
836
853
} catch (Exception ex ) {
@@ -857,7 +874,11 @@ public static <T> T doPrivileged (PrivilegedExceptionAction<T> action, AccessCon
857
874
*/
858
875
@ CallerSensitive
859
876
public static <T > T doPrivilegedWithCombiner (PrivilegedAction <T > action ) {
877
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
878
+ return doPrivileged (action , null );
879
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
860
880
return doPrivileged (action , doPrivilegedWithCombinerHelper (null ));
881
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
861
882
}
862
883
863
884
/**
@@ -884,9 +905,14 @@ public static <T> T doPrivilegedWithCombiner(PrivilegedAction<T> action) {
884
905
public static <T > T doPrivilegedWithCombiner (PrivilegedExceptionAction <T > action )
885
906
throws PrivilegedActionException
886
907
{
908
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
909
+ return doPrivileged (action , null );
910
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
887
911
return doPrivileged (action , doPrivilegedWithCombinerHelper (null ));
912
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
888
913
}
889
914
915
+ /*[IF JAVA_SPEC_VERSION < 24]*/
890
916
/**
891
917
* Helper method to check if any permission is null
892
918
*
@@ -902,6 +928,7 @@ private static void checkPermsNPE(Permission... perms) {
902
928
}
903
929
}
904
930
}
931
+ /*[ENDIF] JAVA_SPEC_VERSION < 24 */
905
932
906
933
/**
907
934
* Performs the privileged action specified by <code>action</code>.
@@ -930,11 +957,15 @@ private static void checkPermsNPE(Permission... perms) {
930
957
public static <T > T doPrivileged (PrivilegedAction <T > action ,
931
958
AccessControlContext context , Permission ... perms )
932
959
{
960
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
961
+ return action .run ();
962
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
933
963
checkPermsNPE (perms );
934
964
T result = action .run ();
935
965
keepalive (context );
936
966
keepalive (perms );
937
967
return result ;
968
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
938
969
}
939
970
940
971
/**
@@ -962,8 +993,12 @@ public static <T> T doPrivileged(PrivilegedAction<T> action,
962
993
public static <T > T doPrivilegedWithCombiner (PrivilegedAction <T > action ,
963
994
AccessControlContext context , Permission ... perms )
964
995
{
996
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
997
+ return doPrivileged (action , context , perms );
998
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
965
999
checkPermsNPE (perms );
966
1000
return doPrivileged (action , doPrivilegedWithCombinerHelper (context ), perms );
1001
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
967
1002
}
968
1003
969
1004
/**
@@ -997,11 +1032,15 @@ public static <T> T doPrivileged(PrivilegedExceptionAction<T> action,
997
1032
throws PrivilegedActionException
998
1033
{
999
1034
try {
1035
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
1036
+ return action .run ();
1037
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
1000
1038
checkPermsNPE (perms );
1001
1039
T result = action .run ();
1002
1040
keepalive (context );
1003
1041
keepalive (perms );
1004
1042
return result ;
1043
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
1005
1044
} catch (RuntimeException ex ) {
1006
1045
throw ex ;
1007
1046
} catch (Exception ex ) {
@@ -1037,10 +1076,15 @@ public static <T> T doPrivilegedWithCombiner(PrivilegedExceptionAction<T> action
1037
1076
AccessControlContext context , Permission ... perms )
1038
1077
throws PrivilegedActionException
1039
1078
{
1079
+ /*[IF JAVA_SPEC_VERSION >= 24]*/
1080
+ return doPrivileged (action , context , perms );
1081
+ /*[ELSE] JAVA_SPEC_VERSION >= 24 */
1040
1082
checkPermsNPE (perms );
1041
1083
return doPrivileged (action , doPrivilegedWithCombinerHelper (context ), perms );
1084
+ /*[ENDIF] JAVA_SPEC_VERSION >= 24 */
1042
1085
}
1043
1086
1087
+ /*[IF JAVA_SPEC_VERSION < 24]*/
1044
1088
/**
1045
1089
* Helper method to construct an AccessControlContext for doPrivilegedWithCombiner methods.
1046
1090
*
@@ -1060,5 +1104,6 @@ private static AccessControlContext doPrivilegedWithCombinerHelper(AccessControl
1060
1104
}
1061
1105
return fixedContext ;
1062
1106
}
1107
+ /*[ENDIF] JAVA_SPEC_VERSION < 24 */
1063
1108
1064
1109
}
0 commit comments