Skip to content

Commit 79d3aa8

Browse files
authored
Remove doPrivileged from plugins (#127996)
This commit continues the work of removing SecurityManager related code by removing doPrivileged calls from Elasticsearch plugins.
1 parent f492bb9 commit 79d3aa8

File tree

17 files changed

+49
-373
lines changed

17 files changed

+49
-373
lines changed

plugins/discovery-azure-classic/src/main/java/org/elasticsearch/cloud/azure/classic/management/AzureComputeServiceImpl.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@
2929
import org.elasticsearch.logging.Logger;
3030

3131
import java.io.IOException;
32-
import java.security.AccessController;
33-
import java.security.PrivilegedActionException;
34-
import java.security.PrivilegedExceptionAction;
3532
import java.util.ServiceLoader;
3633

3734
public class AzureComputeServiceImpl extends AbstractLifecycleComponent implements AzureComputeService {
@@ -94,11 +91,8 @@ private static String getRequiredSetting(Settings settings, Setting<String> sett
9491
public HostedServiceGetDetailedResponse getServiceDetails() {
9592
SpecialPermission.check();
9693
try {
97-
return AccessController.doPrivileged(
98-
(PrivilegedExceptionAction<HostedServiceGetDetailedResponse>) () -> client.getHostedServicesOperations()
99-
.getDetailed(serviceName)
100-
);
101-
} catch (PrivilegedActionException e) {
94+
return client.getHostedServicesOperations().getDetailed(serviceName);
95+
} catch (Exception e) {
10296
throw new AzureServiceRemoteException("can not get list of azure nodes", e.getCause());
10397
}
10498
}

plugins/discovery-ec2/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2SeedHostsProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ protected List<TransportAddress> fetchDynamicNodes() {
107107
// NOTE: we don't filter by security group during the describe instances request for two reasons:
108108
// 1. differences in VPCs require different parameters during query (ID vs Name)
109109
// 2. We want to use two different strategies: (all security groups vs. any security groups)
110-
descInstances = SocketAccess.doPrivileged(() -> clientReference.client().describeInstances(buildDescribeInstancesRequest()));
110+
descInstances = clientReference.client().describeInstances(buildDescribeInstancesRequest());
111111
} catch (final Exception e) {
112112
logger.info("Exception while retrieving instance list from AWS API: {}", e.getMessage());
113113
logger.debug("Full exception:", e);

plugins/discovery-ec2/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2ServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ private Ec2Client buildClient(Ec2ClientSettings clientSettings) {
6666
final var endpoint = Endpoint.builder().url(URI.create(clientSettings.endpoint)).build();
6767
ec2ClientBuilder.endpointProvider(endpointParams -> CompletableFuture.completedFuture(endpoint));
6868
}
69-
return SocketAccess.doPrivileged(ec2ClientBuilder::build);
69+
return ec2ClientBuilder.build();
7070
}
7171

7272
private static void applyProxyConfiguration(Ec2ClientSettings clientSettings, ApacheHttpClient.Builder httpClientBuilder) {

plugins/discovery-ec2/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2Utils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ class AwsEc2Utils {
2222
static String getInstanceMetadata(String metadataPath) {
2323
final var httpClientBuilder = ApacheHttpClient.builder();
2424
httpClientBuilder.connectionTimeout(IMDS_CONNECTION_TIMEOUT);
25-
try (var ec2Client = SocketAccess.doPrivileged(Ec2MetadataClient.builder().httpClient(httpClientBuilder)::build)) {
26-
final var metadataValue = SocketAccess.doPrivileged(() -> ec2Client.get(metadataPath)).asString();
25+
try (var ec2Client = Ec2MetadataClient.builder().httpClient(httpClientBuilder).build()) {
26+
final var metadataValue = ec2Client.get(metadataPath).asString();
2727
if (Strings.hasText(metadataValue) == false) {
2828
throw new IllegalStateException("no ec2 metadata returned from " + metadataPath);
2929
}

plugins/discovery-ec2/src/main/java/org/elasticsearch/discovery/ec2/SocketAccess.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

plugins/discovery-gce/src/internalClusterTest/java/org/elasticsearch/discovery/gce/GceDiscoverTests.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
1616
import org.elasticsearch.cloud.gce.GceInstancesService;
17-
import org.elasticsearch.cloud.gce.util.Access;
1817
import org.elasticsearch.cluster.node.DiscoveryNode;
1918
import org.elasticsearch.common.settings.Settings;
2019
import org.elasticsearch.core.TimeValue;
@@ -138,23 +137,21 @@ protected GceInstancesService createGceInstancesService() {
138137
return new GceInstancesService() {
139138
@Override
140139
public Collection<Instance> instances() {
141-
return Access.doPrivileged(() -> {
142-
final List<Instance> instances = new ArrayList<>();
140+
final List<Instance> instances = new ArrayList<>();
143141

144-
for (DiscoveryNode discoveryNode : nodes.values()) {
145-
Instance instance = new Instance();
146-
instance.setName(discoveryNode.getName());
147-
instance.setStatus("STARTED");
142+
for (DiscoveryNode discoveryNode : nodes.values()) {
143+
Instance instance = new Instance();
144+
instance.setName(discoveryNode.getName());
145+
instance.setStatus("STARTED");
148146

149-
NetworkInterface networkInterface = new NetworkInterface();
150-
networkInterface.setNetworkIP(discoveryNode.getAddress().toString());
151-
instance.setNetworkInterfaces(singletonList(networkInterface));
147+
NetworkInterface networkInterface = new NetworkInterface();
148+
networkInterface.setNetworkIP(discoveryNode.getAddress().toString());
149+
instance.setNetworkInterfaces(singletonList(networkInterface));
152150

153-
instances.add(instance);
154-
}
151+
instances.add(instance);
152+
}
155153

156-
return instances;
157-
});
154+
return instances;
158155
}
159156

160157
@Override

plugins/discovery-gce/src/main/java/org/elasticsearch/cloud/gce/GceInstancesServiceImpl.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.google.api.services.compute.model.Instance;
2626
import com.google.api.services.compute.model.InstanceList;
2727

28-
import org.elasticsearch.cloud.gce.util.Access;
2928
import org.elasticsearch.common.settings.Setting;
3029
import org.elasticsearch.common.settings.Setting.Property;
3130
import org.elasticsearch.common.settings.Settings;
@@ -68,19 +67,17 @@ public Collection<Instance> instances() {
6867
try {
6968
// hack around code messiness in GCE code
7069
// TODO: get this fixed
71-
return Access.doPrivilegedIOException(() -> {
72-
String nextPageToken = null;
73-
List<Instance> zoneInstances = new ArrayList<>();
74-
do {
75-
Compute.Instances.List list = client().instances().list(project, zoneId).setPageToken(nextPageToken);
76-
InstanceList instanceList = list.execute();
77-
nextPageToken = instanceList.getNextPageToken();
78-
if (instanceList.isEmpty() == false && instanceList.getItems() != null) {
79-
zoneInstances.addAll(instanceList.getItems());
80-
}
81-
} while (nextPageToken != null);
82-
return zoneInstances;
83-
});
70+
String nextPageToken = null;
71+
List<Instance> zoneInstances = new ArrayList<>();
72+
do {
73+
Compute.Instances.List list = client().instances().list(project, zoneId).setPageToken(nextPageToken);
74+
InstanceList instanceList = list.execute();
75+
nextPageToken = instanceList.getNextPageToken();
76+
if (instanceList.isEmpty() == false && instanceList.getItems() != null) {
77+
zoneInstances.addAll(instanceList.getItems());
78+
}
79+
} while (nextPageToken != null);
80+
return zoneInstances;
8481
} catch (IOException e) {
8582
logger.warn(() -> "Problem fetching instance list for zone " + zoneId, e);
8683
logger.debug("Full exception:", e);
@@ -152,15 +149,15 @@ private List<String> resolveZones() {
152149

153150
String getAppEngineValueFromMetadataServer(String serviceURL) throws GeneralSecurityException, IOException {
154151
String metadata = GceMetadataService.GCE_HOST.get(settings);
155-
GenericUrl url = Access.doPrivileged(() -> new GenericUrl(metadata + serviceURL));
152+
GenericUrl url = new GenericUrl(metadata + serviceURL);
156153

157154
HttpTransport httpTransport = getGceHttpTransport();
158155
HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
159156
HttpRequest request = requestFactory.buildGetRequest(url)
160157
.setConnectTimeout(500)
161158
.setReadTimeout(500)
162159
.setHeaders(new HttpHeaders().set("Metadata-Flavor", "Google"));
163-
HttpResponse response = Access.doPrivilegedIOException(() -> request.execute());
160+
HttpResponse response = request.execute();
164161
return headerContainsMetadataFlavor(response) ? response.parseAsString() : null;
165162
}
166163

@@ -211,7 +208,7 @@ public synchronized Compute client() {
211208

212209
// hack around code messiness in GCE code
213210
// TODO: get this fixed
214-
Access.doPrivilegedIOException(credential::refreshToken);
211+
credential.refreshToken();
215212

216213
logger.debug("token [{}] will expire in [{}] s", credential.getAccessToken(), credential.getExpiresInSeconds());
217214
if (credential.getExpiresInSeconds() != null) {

plugins/discovery-gce/src/main/java/org/elasticsearch/cloud/gce/GceMetadataService.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import com.google.api.client.http.HttpResponse;
1616
import com.google.api.client.http.HttpTransport;
1717

18-
import org.elasticsearch.cloud.gce.util.Access;
1918
import org.elasticsearch.common.component.AbstractLifecycleComponent;
2019
import org.elasticsearch.common.settings.Setting;
2120
import org.elasticsearch.common.settings.Settings;
@@ -66,14 +65,12 @@ public String metadata(String metadataPath) throws IOException, URISyntaxExcepti
6665
try {
6766
// hack around code messiness in GCE code
6867
// TODO: get this fixed
69-
headers = Access.doPrivileged(HttpHeaders::new);
70-
GenericUrl genericUrl = Access.doPrivileged(() -> new GenericUrl(urlMetadataNetwork));
68+
headers = new HttpHeaders();
69+
GenericUrl genericUrl = new GenericUrl(urlMetadataNetwork);
7170

7271
// This is needed to query meta data: https://cloud.google.com/compute/docs/metadata
7372
headers.put("Metadata-Flavor", "Google");
74-
HttpResponse response = Access.doPrivilegedIOException(
75-
() -> getGceHttpTransport().createRequestFactory().buildGetRequest(genericUrl).setHeaders(headers).execute()
76-
);
73+
HttpResponse response = getGceHttpTransport().createRequestFactory().buildGetRequest(genericUrl).setHeaders(headers).execute();
7774
String metadata = response.parseAsString();
7875
logger.debug("metadata found [{}]", metadata);
7976
return metadata;

plugins/discovery-gce/src/main/java/org/elasticsearch/cloud/gce/network/GceNameResolver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
package org.elasticsearch.cloud.gce.network;
1111

1212
import org.elasticsearch.cloud.gce.GceMetadataService;
13-
import org.elasticsearch.cloud.gce.util.Access;
1413
import org.elasticsearch.common.Strings;
1514
import org.elasticsearch.common.network.NetworkService.CustomNameResolver;
1615

1716
import java.io.IOException;
1817
import java.net.InetAddress;
18+
import java.net.URISyntaxException;
1919

2020
/**
2121
* <p>Resolves certain GCE related 'meta' hostnames into an actual hostname
@@ -97,13 +97,13 @@ private InetAddress[] resolve(String value) throws IOException {
9797
}
9898

9999
try {
100-
String metadataResult = Access.doPrivilegedIOException(() -> gceMetadataService.metadata(gceMetadataPath));
100+
String metadataResult = gceMetadataService.metadata(gceMetadataPath);
101101
if (metadataResult == null || metadataResult.length() == 0) {
102102
throw new IOException("no gce metadata returned from [" + gceMetadataPath + "] for [" + value + "]");
103103
}
104104
// only one address: because we explicitly ask for only one via the GceHostnameType
105105
return new InetAddress[] { InetAddress.getByName(metadataResult) };
106-
} catch (IOException e) {
106+
} catch (URISyntaxException | IOException e) {
107107
throw new IOException("IOException caught when fetching InetAddress from [" + gceMetadataPath + "]", e);
108108
}
109109
}

plugins/discovery-gce/src/main/java/org/elasticsearch/cloud/gce/util/Access.java

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)