@@ -70,24 +70,6 @@ record ModuleEntitlements(
7070 entitlementsByType = Map .copyOf (entitlementsByType );
7171 }
7272
73- public static ModuleEntitlements none (String componentName ) {
74- return new ModuleEntitlements (componentName , Map .of (), FileAccessTree .EMPTY );
75- }
76-
77- public static ModuleEntitlements from (String componentName , List <Entitlement > entitlements ) {
78- FilesEntitlement filesEntitlement = FilesEntitlement .EMPTY ;
79- for (Entitlement entitlement : entitlements ) {
80- if (entitlement instanceof FilesEntitlement ) {
81- filesEntitlement = (FilesEntitlement ) entitlement ;
82- }
83- }
84- return new ModuleEntitlements (
85- componentName ,
86- entitlements .stream ().collect (groupingBy (Entitlement ::getClass )),
87- FileAccessTree .of (filesEntitlement )
88- );
89- }
90-
9173 public boolean hasEntitlement (Class <? extends Entitlement > entitlementClass ) {
9274 return entitlementsByType .containsKey (entitlementClass );
9375 }
@@ -101,12 +83,34 @@ public <E extends Entitlement> Stream<E> getEntitlements(Class<E> entitlementCla
10183 }
10284 }
10385
86+ // pkg private for testing
87+ ModuleEntitlements defaultEntitlements (String componentName ) {
88+ return new ModuleEntitlements (componentName , Map .of (), defaultFileAccess );
89+ }
90+
91+ // pkg private for testing
92+ ModuleEntitlements policyEntitlements (String componentName , List <Entitlement > entitlements ) {
93+ FilesEntitlement filesEntitlement = FilesEntitlement .EMPTY ;
94+ for (Entitlement entitlement : entitlements ) {
95+ if (entitlement instanceof FilesEntitlement ) {
96+ filesEntitlement = (FilesEntitlement ) entitlement ;
97+ }
98+ }
99+ return new ModuleEntitlements (
100+ componentName ,
101+ entitlements .stream ().collect (groupingBy (Entitlement ::getClass )),
102+ FileAccessTree .of (filesEntitlement , tempDir )
103+ );
104+ }
105+
104106 final Map <Module , ModuleEntitlements > moduleEntitlementsMap = new ConcurrentHashMap <>();
105107
106108 private final Map <String , List <Entitlement >> serverEntitlements ;
107109 private final List <Entitlement > apmAgentEntitlements ;
108110 private final Map <String , Map <String , List <Entitlement >>> pluginsEntitlements ;
109111 private final Function <Class <?>, String > pluginResolver ;
112+ private final Path tempDir ;
113+ private final FileAccessTree defaultFileAccess ;
110114
111115 public static final String ALL_UNNAMED = "ALL-UNNAMED" ;
112116
@@ -141,7 +145,8 @@ public PolicyManager(
141145 Map <String , Policy > pluginPolicies ,
142146 Function <Class <?>, String > pluginResolver ,
143147 String apmAgentPackageName ,
144- Module entitlementsModule
148+ Module entitlementsModule ,
149+ Path tempDir
145150 ) {
146151 this .serverEntitlements = buildScopeEntitlementsMap (requireNonNull (serverPolicy ));
147152 this .apmAgentEntitlements = apmAgentEntitlements ;
@@ -151,6 +156,9 @@ public PolicyManager(
151156 this .pluginResolver = pluginResolver ;
152157 this .apmAgentPackageName = apmAgentPackageName ;
153158 this .entitlementsModule = entitlementsModule ;
159+ this .defaultFileAccess = FileAccessTree .of (FilesEntitlement .EMPTY , tempDir );
160+
161+ this .tempDir = tempDir ;
154162
155163 for (var e : serverEntitlements .entrySet ()) {
156164 validateEntitlementsPerModule (SERVER_COMPONENT_NAME , e .getKey (), e .getValue ());
@@ -425,7 +433,7 @@ private ModuleEntitlements computeEntitlements(Class<?> requestingClass) {
425433 if (pluginName != null ) {
426434 var pluginEntitlements = pluginsEntitlements .get (pluginName );
427435 if (pluginEntitlements == null ) {
428- return ModuleEntitlements . none (pluginName );
436+ return defaultEntitlements (pluginName );
429437 } else {
430438 final String scopeName ;
431439 if (requestingModule .isNamed () == false ) {
@@ -439,10 +447,10 @@ private ModuleEntitlements computeEntitlements(Class<?> requestingClass) {
439447
440448 if (requestingModule .isNamed () == false && requestingClass .getPackageName ().startsWith (apmAgentPackageName )) {
441449 // The APM agent is the only thing running non-modular in the system classloader
442- return ModuleEntitlements . from (APM_AGENT_COMPONENT_NAME , apmAgentEntitlements );
450+ return policyEntitlements (APM_AGENT_COMPONENT_NAME , apmAgentEntitlements );
443451 }
444452
445- return ModuleEntitlements . none (UNKNOWN_COMPONENT_NAME );
453+ return defaultEntitlements (UNKNOWN_COMPONENT_NAME );
446454 }
447455
448456 private ModuleEntitlements getModuleScopeEntitlements (
@@ -452,9 +460,9 @@ private ModuleEntitlements getModuleScopeEntitlements(
452460 ) {
453461 var entitlements = scopeEntitlements .get (moduleName );
454462 if (entitlements == null ) {
455- return ModuleEntitlements . none (componentName );
463+ return defaultEntitlements (componentName );
456464 }
457- return ModuleEntitlements . from (componentName , entitlements );
465+ return policyEntitlements (componentName , entitlements );
458466 }
459467
460468 private static boolean isServerModule (Module requestingModule ) {
0 commit comments