From 38b2fc53a75b31a53d57b4f84eac224057a6a338 Mon Sep 17 00:00:00 2001 From: Ryan Ernst <ryan@iernst.net> Date: Fri, 10 Jan 2025 09:19:39 -0800 Subject: [PATCH] Default to entitlements only for JDK 24+ (#119885) Since entitlements are still being developed, we are not yet ready to enable them for all JDK versions. But we must use them for JDK 24+ since the security manager is not useable there. This commit tweaks the logic for determining whether to use entitlements to take into account the runtime version. --- .../java/org/elasticsearch/server/cli/SystemJvmOptions.java | 5 ++++- .../main/java/org/elasticsearch/bootstrap/Elasticsearch.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/SystemJvmOptions.java b/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/SystemJvmOptions.java index 8b3977fe66428..d4d40e697470e 100644 --- a/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/SystemJvmOptions.java +++ b/distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/SystemJvmOptions.java @@ -11,6 +11,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; +import org.elasticsearch.core.Booleans; import org.elasticsearch.core.UpdateForV9; import org.elasticsearch.jdk.RuntimeVersionFeature; @@ -26,7 +27,9 @@ final class SystemJvmOptions { static List<String> systemJvmOptions(Settings nodeSettings, final Map<String, String> sysprops) { String distroType = sysprops.get("es.distribution.type"); boolean isHotspot = sysprops.getOrDefault("sun.management.compiler", "").contains("HotSpot"); - boolean useEntitlements = Boolean.parseBoolean(sysprops.getOrDefault("es.entitlements.enabled", "false")); + boolean entitlementsExplicitlyEnabled = Booleans.parseBoolean(sysprops.getOrDefault("es.entitlements.enabled", "false")); + // java 24+ only supports entitlements, but it may be enabled on earlier versions explicitly + boolean useEntitlements = RuntimeVersionFeature.isSecurityManagerAvailable() == false || entitlementsExplicitlyEnabled; return Stream.of( Stream.of( /* diff --git a/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java b/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java index f26bf96cc2211..7c6dee1e420b2 100644 --- a/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java +++ b/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java @@ -28,6 +28,7 @@ import org.elasticsearch.common.transport.BoundTransportAddress; import org.elasticsearch.common.util.concurrent.RunOnce; import org.elasticsearch.core.AbstractRefCounted; +import org.elasticsearch.core.Booleans; import org.elasticsearch.core.IOUtils; import org.elasticsearch.core.SuppressForbidden; import org.elasticsearch.entitlement.bootstrap.EntitlementBootstrap; @@ -109,7 +110,9 @@ private static Bootstrap initPhase1() { final PrintStream out = getStdout(); final PrintStream err = getStderr(); final ServerArgs args; - final boolean useEntitlements = Boolean.parseBoolean(System.getProperty("es.entitlements.enabled")); + final boolean entitlementsExplicitlyEnabled = Booleans.parseBoolean(System.getProperty("es.entitlements.enabled", "false")); + // java 24+ only supports entitlements, but it may be enabled on earlier versions explicitly + final boolean useEntitlements = RuntimeVersionFeature.isSecurityManagerAvailable() == false || entitlementsExplicitlyEnabled; try { initSecurityProperties();