Skip to content

Commit 67dda4b

Browse files
fix: Presto spark add X509 certificates to SessionContext (#27183)
## Description <!---Describe your changes in detail--> The X509 certificates are available from the Session of the query, so it can also be passed to the PrestoSparkSession, PrestoSparkRunnerContext, and PrestoSparkSessionContext so that they can be stored as a field. ## Motivation and Context <!---Why is this change required? What problem does it solve?--> <!---If it fixes an open issue, please link to the issue here.--> Compared to HttpRequestSessionContext, PrestoSparkSessionContext does not have the certificates, and it always returns an empty list because it uses the default implementation of the SessionContext interface. ## Impact <!---Describe any public API or user-facing feature change or any performance impact--> Adds extra field to: PrestoSparkSessionContext, PrestoSparkRunnerContext, PrestoSparkSession ## Test Plan <!---Please fill in how you tested your change--> No impact on logic, and the field was accessible in the SessionContext when running PrestoSpark ## Contributor checklist - [ ] Please make sure your submission complies with our [contributing guide](https://github.com/prestodb/presto/blob/master/CONTRIBUTING.md), in particular [code style](https://github.com/prestodb/presto/blob/master/CONTRIBUTING.md#code-style) and [commit standards](https://github.com/prestodb/presto/blob/master/CONTRIBUTING.md#commit-standards). - [ ] PR description addresses the issue accurately and concisely. If the change is non-trivial, a GitHub Issue is referenced. - [ ] Documented new properties (with its default value), SQL syntax, functions, or other functionality. - [ ] If release notes are required, they follow the [release notes guidelines](https://github.com/prestodb/presto/wiki/Release-Notes-Guidelines). - [ ] Adequate tests were added if applicable. - [ ] CI passed. ## Release Notes Please follow [release notes guidelines](https://github.com/prestodb/presto/wiki/Release-Notes-Guidelines) and fill in the release notes below. ``` == NO RELEASE NOTE == ``` Differential Revision: D93777694
1 parent 1b49ef9 commit 67dda4b

File tree

6 files changed

+51
-11
lines changed

6 files changed

+51
-11
lines changed

presto-spark-base/src/main/java/com/facebook/presto/spark/PrestoSparkSessionContext.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import com.google.common.collect.ImmutableSet;
3030
import jakarta.annotation.Nullable;
3131

32+
import java.security.cert.X509Certificate;
33+
import java.util.List;
3234
import java.util.Map;
3335
import java.util.Optional;
3436
import java.util.Set;
@@ -77,7 +79,8 @@ public static PrestoSparkSessionContext createFromSessionInfo(
7779
extraCredentials.build(),
7880
extraTokenAuthenticators.build(),
7981
Optional.empty(),
80-
Optional.empty()),
82+
Optional.empty(),
83+
prestoSparkSession.getCertificates()),
8184
prestoSparkSession.getCatalog().orElse(null),
8285
prestoSparkSession.getSchema().orElse(null),
8386
prestoSparkSession.getSource().orElse(null),
@@ -128,6 +131,12 @@ public Identity getIdentity()
128131
return identity;
129132
}
130133

134+
@Override
135+
public List<X509Certificate> getCertificates()
136+
{
137+
return identity.getCertificates();
138+
}
139+
131140
@Nullable
132141
@Override
133142
public String getCatalog()

presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -339,15 +339,15 @@ public PrestoSparkQueryRunner(
339339
// Sql-Standard Access Control Checker
340340
// needs us to specify our role
341341
.setIdentity(
342-
new Identity(
343-
"hive",
344-
Optional.empty(),
345-
ImmutableMap.of(defaultCatalog,
346-
new SelectedRole(Type.ROLE, Optional.of("admin"))),
347-
ImmutableMap.of(),
348-
ImmutableMap.of(),
349-
Optional.empty(),
350-
Optional.empty()))
342+
new Identity(
343+
"hive",
344+
Optional.empty(),
345+
ImmutableMap.of(defaultCatalog,
346+
new SelectedRole(Type.ROLE, Optional.of("admin"))),
347+
ImmutableMap.of(),
348+
ImmutableMap.of(),
349+
Optional.empty(),
350+
Optional.empty()))
351351
.build();
352352

353353
transactionManager = injector.getInstance(TransactionManager.class);
@@ -659,6 +659,7 @@ private static PrestoSparkSession createSessionInfo(Session session)
659659
session.getIdentity().getUser(),
660660
session.getIdentity().getPrincipal(),
661661
session.getIdentity().getExtraCredentials(),
662+
session.getIdentity().getCertificates(),
662663
session.getCatalog(),
663664
session.getSchema(),
664665
session.getSource(),

presto-spark-classloader-interface/src/main/java/com/facebook/presto/spark/classloader_interface/PrestoSparkSession.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@
1414
package com.facebook.presto.spark.classloader_interface;
1515

1616
import java.security.Principal;
17+
import java.security.cert.X509Certificate;
18+
import java.util.ArrayList;
1719
import java.util.HashMap;
1820
import java.util.HashSet;
21+
import java.util.List;
1922
import java.util.Map;
2023
import java.util.Optional;
2124
import java.util.Set;
2225

26+
import static java.util.Collections.unmodifiableList;
2327
import static java.util.Collections.unmodifiableMap;
2428
import static java.util.Collections.unmodifiableSet;
2529
import static java.util.Objects.requireNonNull;
@@ -33,6 +37,7 @@ public class PrestoSparkSession
3337
private final String user;
3438
private final Optional<Principal> principal;
3539
private final Map<String, String> extraCredentials;
40+
private final List<X509Certificate> certificates;
3641
private final Optional<String> catalog;
3742
private final Optional<String> schema;
3843
private final Optional<String> source;
@@ -49,6 +54,7 @@ public PrestoSparkSession(
4954
String user,
5055
Optional<Principal> principal,
5156
Map<String, String> extraCredentials,
57+
List<X509Certificate> certificates,
5258
Optional<String> catalog,
5359
Optional<String> schema,
5460
Optional<String> source,
@@ -65,6 +71,7 @@ public PrestoSparkSession(
6571
this.user = requireNonNull(user, "user is null");
6672
this.principal = requireNonNull(principal, "principal is null");
6773
this.extraCredentials = unmodifiableMap(new HashMap<>(requireNonNull(extraCredentials, "extraCredentials is null")));
74+
this.certificates = unmodifiableList(new ArrayList<>(requireNonNull(certificates, "certificates is null")));
6875
this.catalog = requireNonNull(catalog, "catalog is null");
6976
this.schema = requireNonNull(schema, "schema is null");
7077
this.source = requireNonNull(source, "source is null");
@@ -94,6 +101,11 @@ public Map<String, String> getExtraCredentials()
94101
return extraCredentials;
95102
}
96103

104+
public List<X509Certificate> getCertificates()
105+
{
106+
return certificates;
107+
}
108+
97109
public Optional<String> getCatalog()
98110
{
99111
return catalog;

presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkLauncherCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package com.facebook.presto.spark.launcher;
1515

1616
import com.facebook.presto.spark.classloader_interface.PrestoSparkConfInitializer;
17+
import com.google.common.collect.ImmutableList;
1718
import com.google.common.collect.ImmutableMap;
1819
import com.google.common.collect.ImmutableSet;
1920
import io.airlift.airline.Command;
@@ -67,14 +68,15 @@ public void run()
6768
Optional.empty(),
6869
clientOptions.sessionPropertyConfig == null ? Optional.empty() : Optional.of(
6970
loadProperties(checkFile(new File(clientOptions.sessionPropertyConfig)))),
70-
Optional.empty(),
71+
Optional.empty(),
7172
Optional.empty());
7273

7374
try (PrestoSparkRunner runner = new PrestoSparkRunner(distribution)) {
7475
runner.run(
7576
"test",
7677
Optional.empty(),
7778
ImmutableMap.of(),
79+
ImmutableList.of(),
7880
clientOptions.catalog,
7981
clientOptions.schema,
8082
Optional.empty(),

presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunner.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.net.MalformedURLException;
3636
import java.net.URL;
3737
import java.security.Principal;
38+
import java.security.cert.X509Certificate;
3839
import java.util.ArrayList;
3940
import java.util.List;
4041
import java.util.Map;
@@ -84,6 +85,7 @@ public void run(
8485
String user,
8586
Optional<Principal> principal,
8687
Map<String, String> extraCredentials,
88+
List<X509Certificate> certificates,
8789
String catalog,
8890
String schema,
8991
Optional<String> source,
@@ -106,6 +108,7 @@ public void run(
106108
user,
107109
principal,
108110
extraCredentials,
111+
certificates,
109112
catalog,
110113
schema,
111114
source,
@@ -154,6 +157,7 @@ private void execute(IPrestoSparkQueryExecutionFactory queryExecutionFactory, Pr
154157
prestoSparkRunnerContext.getUser(),
155158
prestoSparkRunnerContext.getPrincipal(),
156159
prestoSparkRunnerContext.getExtraCredentials(),
160+
prestoSparkRunnerContext.getCertificates(),
157161
Optional.ofNullable(prestoSparkRunnerContext.getCatalog()),
158162
Optional.ofNullable(prestoSparkRunnerContext.getSchema()),
159163
prestoSparkRunnerContext.getSource(),

presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunnerContext.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.facebook.presto.spark.classloader_interface.ExecutionStrategy;
1717

1818
import java.security.Principal;
19+
import java.security.cert.X509Certificate;
1920
import java.util.List;
2021
import java.util.Map;
2122
import java.util.Optional;
@@ -28,6 +29,7 @@ public class PrestoSparkRunnerContext
2829
private final String user;
2930
private final Optional<Principal> principal;
3031
private final Map<String, String> extraCredentials;
32+
private final List<X509Certificate> certificates;
3133
private final String catalog;
3234
private final String schema;
3335
private final Optional<String> source;
@@ -50,6 +52,7 @@ public PrestoSparkRunnerContext(
5052
String user,
5153
Optional<Principal> principal,
5254
Map<String, String> extraCredentials,
55+
List<X509Certificate> certificates,
5356
String catalog,
5457
String schema,
5558
Optional<String> source,
@@ -71,6 +74,7 @@ public PrestoSparkRunnerContext(
7174
this.user = user;
7275
this.principal = principal;
7376
this.extraCredentials = extraCredentials;
77+
this.certificates = certificates;
7478
this.catalog = catalog;
7579
this.schema = schema;
7680
this.source = source;
@@ -105,6 +109,11 @@ public Map<String, String> getExtraCredentials()
105109
return extraCredentials;
106110
}
107111

112+
public List<X509Certificate> getCertificates()
113+
{
114+
return certificates;
115+
}
116+
108117
public String getCatalog()
109118
{
110119
return catalog;
@@ -195,6 +204,7 @@ public static class Builder
195204
private String user;
196205
private Optional<Principal> principal;
197206
private Map<String, String> extraCredentials;
207+
private List<X509Certificate> certificates;
198208
private String catalog;
199209
private String schema;
200210
private Optional<String> source;
@@ -218,6 +228,7 @@ public Builder(PrestoSparkRunnerContext prestoSparkRunnerContext)
218228
this.user = prestoSparkRunnerContext.getUser();
219229
this.principal = prestoSparkRunnerContext.getPrincipal();
220230
this.extraCredentials = prestoSparkRunnerContext.getExtraCredentials();
231+
this.certificates = prestoSparkRunnerContext.getCertificates();
221232
this.catalog = prestoSparkRunnerContext.getCatalog();
222233
this.schema = prestoSparkRunnerContext.getSchema();
223234
this.source = prestoSparkRunnerContext.getSource();
@@ -249,6 +260,7 @@ public PrestoSparkRunnerContext build()
249260
user,
250261
principal,
251262
extraCredentials,
263+
certificates,
252264
catalog,
253265
schema,
254266
source,

0 commit comments

Comments
 (0)