diff --git a/presto-spark-base/src/main/java/com/facebook/presto/spark/PrestoSparkSessionContext.java b/presto-spark-base/src/main/java/com/facebook/presto/spark/PrestoSparkSessionContext.java index 066fcb82c0d47..4d58c20f5e46b 100644 --- a/presto-spark-base/src/main/java/com/facebook/presto/spark/PrestoSparkSessionContext.java +++ b/presto-spark-base/src/main/java/com/facebook/presto/spark/PrestoSparkSessionContext.java @@ -29,6 +29,8 @@ import com.google.common.collect.ImmutableSet; import jakarta.annotation.Nullable; +import java.security.cert.X509Certificate; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -77,7 +79,8 @@ public static PrestoSparkSessionContext createFromSessionInfo( extraCredentials.build(), extraTokenAuthenticators.build(), Optional.empty(), - Optional.empty()), + Optional.empty(), + prestoSparkSession.getCertificates()), prestoSparkSession.getCatalog().orElse(null), prestoSparkSession.getSchema().orElse(null), prestoSparkSession.getSource().orElse(null), @@ -128,6 +131,12 @@ public Identity getIdentity() return identity; } + @Override + public List getCertificates() + { + return identity.getCertificates(); + } + @Nullable @Override public String getCatalog() diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java index b279e11f825cc..a85aa71ee7de2 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/PrestoSparkQueryRunner.java @@ -339,15 +339,15 @@ public PrestoSparkQueryRunner( // Sql-Standard Access Control Checker // needs us to specify our role .setIdentity( - new Identity( - "hive", - Optional.empty(), - ImmutableMap.of(defaultCatalog, - new SelectedRole(Type.ROLE, Optional.of("admin"))), - ImmutableMap.of(), - ImmutableMap.of(), - Optional.empty(), - Optional.empty())) + new Identity( + "hive", + Optional.empty(), + ImmutableMap.of(defaultCatalog, + new SelectedRole(Type.ROLE, Optional.of("admin"))), + ImmutableMap.of(), + ImmutableMap.of(), + Optional.empty(), + Optional.empty())) .build(); transactionManager = injector.getInstance(TransactionManager.class); @@ -659,6 +659,7 @@ private static PrestoSparkSession createSessionInfo(Session session) session.getIdentity().getUser(), session.getIdentity().getPrincipal(), session.getIdentity().getExtraCredentials(), + session.getIdentity().getCertificates(), session.getCatalog(), session.getSchema(), session.getSource(), diff --git a/presto-spark-classloader-interface/src/main/java/com/facebook/presto/spark/classloader_interface/PrestoSparkSession.java b/presto-spark-classloader-interface/src/main/java/com/facebook/presto/spark/classloader_interface/PrestoSparkSession.java index 5fd5e354e0595..351c42af2ff1f 100644 --- a/presto-spark-classloader-interface/src/main/java/com/facebook/presto/spark/classloader_interface/PrestoSparkSession.java +++ b/presto-spark-classloader-interface/src/main/java/com/facebook/presto/spark/classloader_interface/PrestoSparkSession.java @@ -14,12 +14,16 @@ package com.facebook.presto.spark.classloader_interface; import java.security.Principal; +import java.security.cert.X509Certificate; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import static java.util.Collections.unmodifiableList; import static java.util.Collections.unmodifiableMap; import static java.util.Collections.unmodifiableSet; import static java.util.Objects.requireNonNull; @@ -33,6 +37,7 @@ public class PrestoSparkSession private final String user; private final Optional principal; private final Map extraCredentials; + private final List certificates; private final Optional catalog; private final Optional schema; private final Optional source; @@ -49,6 +54,7 @@ public PrestoSparkSession( String user, Optional principal, Map extraCredentials, + List certificates, Optional catalog, Optional schema, Optional source, @@ -65,6 +71,7 @@ public PrestoSparkSession( this.user = requireNonNull(user, "user is null"); this.principal = requireNonNull(principal, "principal is null"); this.extraCredentials = unmodifiableMap(new HashMap<>(requireNonNull(extraCredentials, "extraCredentials is null"))); + this.certificates = unmodifiableList(new ArrayList<>(requireNonNull(certificates, "certificates is null"))); this.catalog = requireNonNull(catalog, "catalog is null"); this.schema = requireNonNull(schema, "schema is null"); this.source = requireNonNull(source, "source is null"); @@ -94,6 +101,11 @@ public Map getExtraCredentials() return extraCredentials; } + public List getCertificates() + { + return certificates; + } + public Optional getCatalog() { return catalog; diff --git a/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkLauncherCommand.java b/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkLauncherCommand.java index c3e8c08c8db45..5e7e4e8535be4 100644 --- a/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkLauncherCommand.java +++ b/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkLauncherCommand.java @@ -14,6 +14,7 @@ package com.facebook.presto.spark.launcher; import com.facebook.presto.spark.classloader_interface.PrestoSparkConfInitializer; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import io.airlift.airline.Command; @@ -67,7 +68,7 @@ public void run() Optional.empty(), clientOptions.sessionPropertyConfig == null ? Optional.empty() : Optional.of( loadProperties(checkFile(new File(clientOptions.sessionPropertyConfig)))), - Optional.empty(), + Optional.empty(), Optional.empty()); try (PrestoSparkRunner runner = new PrestoSparkRunner(distribution)) { @@ -75,6 +76,7 @@ public void run() "test", Optional.empty(), ImmutableMap.of(), + ImmutableList.of(), clientOptions.catalog, clientOptions.schema, Optional.empty(), diff --git a/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunner.java b/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunner.java index 4c8af446e8b40..9f1b4926bb7d9 100644 --- a/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunner.java +++ b/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunner.java @@ -35,6 +35,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.security.Principal; +import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -84,6 +85,7 @@ public void run( String user, Optional principal, Map extraCredentials, + List certificates, String catalog, String schema, Optional source, @@ -106,6 +108,7 @@ public void run( user, principal, extraCredentials, + certificates, catalog, schema, source, @@ -154,6 +157,7 @@ private void execute(IPrestoSparkQueryExecutionFactory queryExecutionFactory, Pr prestoSparkRunnerContext.getUser(), prestoSparkRunnerContext.getPrincipal(), prestoSparkRunnerContext.getExtraCredentials(), + prestoSparkRunnerContext.getCertificates(), Optional.ofNullable(prestoSparkRunnerContext.getCatalog()), Optional.ofNullable(prestoSparkRunnerContext.getSchema()), prestoSparkRunnerContext.getSource(), diff --git a/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunnerContext.java b/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunnerContext.java index 1c0d8541e8bb8..0736c5252c645 100644 --- a/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunnerContext.java +++ b/presto-spark-launcher/src/main/java/com/facebook/presto/spark/launcher/PrestoSparkRunnerContext.java @@ -16,6 +16,7 @@ import com.facebook.presto.spark.classloader_interface.ExecutionStrategy; import java.security.Principal; +import java.security.cert.X509Certificate; import java.util.List; import java.util.Map; import java.util.Optional; @@ -28,6 +29,7 @@ public class PrestoSparkRunnerContext private final String user; private final Optional principal; private final Map extraCredentials; + private final List certificates; private final String catalog; private final String schema; private final Optional source; @@ -50,6 +52,7 @@ public PrestoSparkRunnerContext( String user, Optional principal, Map extraCredentials, + List certificates, String catalog, String schema, Optional source, @@ -71,6 +74,7 @@ public PrestoSparkRunnerContext( this.user = user; this.principal = principal; this.extraCredentials = extraCredentials; + this.certificates = certificates; this.catalog = catalog; this.schema = schema; this.source = source; @@ -105,6 +109,11 @@ public Map getExtraCredentials() return extraCredentials; } + public List getCertificates() + { + return certificates; + } + public String getCatalog() { return catalog; @@ -195,6 +204,7 @@ public static class Builder private String user; private Optional principal; private Map extraCredentials; + private List certificates; private String catalog; private String schema; private Optional source; @@ -218,6 +228,7 @@ public Builder(PrestoSparkRunnerContext prestoSparkRunnerContext) this.user = prestoSparkRunnerContext.getUser(); this.principal = prestoSparkRunnerContext.getPrincipal(); this.extraCredentials = prestoSparkRunnerContext.getExtraCredentials(); + this.certificates = prestoSparkRunnerContext.getCertificates(); this.catalog = prestoSparkRunnerContext.getCatalog(); this.schema = prestoSparkRunnerContext.getSchema(); this.source = prestoSparkRunnerContext.getSource(); @@ -249,6 +260,7 @@ public PrestoSparkRunnerContext build() user, principal, extraCredentials, + certificates, catalog, schema, source,