This is an automated email from the ASF dual-hosted git repository.

xtsong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new a8c72ccb98e [FLINK-29435][client] SecurityConfiguration supports 
dynamic configuration
a8c72ccb98e is described below

commit a8c72ccb98e6eaa59d878d8182f0d1411bf577c9
Author: Bo Cui <[email protected]>
AuthorDate: Wed Sep 28 10:01:30 2022 +0800

    [FLINK-29435][client] SecurityConfiguration supports dynamic configuration
    
    This closes #20910
---
 .../org/apache/flink/client/cli/CliFrontend.java   |  8 +++++--
 .../cli/CliFrontendDynamicPropertiesTest.java      | 26 ++++++++++++++++++++++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git 
a/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java 
b/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java
index f603dc90cda..9cf4a34bdb8 100644
--- a/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java
+++ b/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java
@@ -1163,8 +1163,12 @@ public class CliFrontend {
         int retCode = 31;
         try {
             final CliFrontend cli = new CliFrontend(configuration, 
customCommandLines);
-
-            SecurityUtils.install(new 
SecurityConfiguration(cli.configuration));
+            CommandLine commandLine =
+                    cli.getCommandLine(
+                            new Options(), Arrays.copyOfRange(args, 1, 
args.length), true);
+            Configuration securityConfig = new 
Configuration(cli.configuration);
+            DynamicPropertiesUtil.encodeDynamicProperties(commandLine, 
securityConfig);
+            SecurityUtils.install(new SecurityConfiguration(securityConfig));
             retCode = SecurityUtils.getInstalledContext().runSecured(() -> 
cli.parseAndRun(args));
         } catch (Throwable t) {
             final Throwable strippedThrowable =
diff --git 
a/flink-clients/src/test/java/org/apache/flink/client/cli/CliFrontendDynamicPropertiesTest.java
 
b/flink-clients/src/test/java/org/apache/flink/client/cli/CliFrontendDynamicPropertiesTest.java
index 4fa5f4a7398..3a4451f8337 100644
--- 
a/flink-clients/src/test/java/org/apache/flink/client/cli/CliFrontendDynamicPropertiesTest.java
+++ 
b/flink-clients/src/test/java/org/apache/flink/client/cli/CliFrontendDynamicPropertiesTest.java
@@ -21,9 +21,12 @@ package org.apache.flink.client.cli;
 import org.apache.flink.client.program.PackagedProgram;
 import org.apache.flink.configuration.Configuration;
 import org.apache.flink.configuration.CoreOptions;
+import org.apache.flink.configuration.SecurityOptions;
+import org.apache.flink.runtime.security.SecurityConfiguration;
 import org.apache.flink.util.ChildFirstClassLoader;
 import org.apache.flink.util.FlinkUserCodeClassLoaders.ParentFirstClassLoader;
 
+import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
@@ -31,6 +34,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -167,6 +171,28 @@ class CliFrontendDynamicPropertiesTest {
                 configuration, args, cliUnderTest, expectedConfigValues);
     }
 
+    @Test
+    public void testSecurityConfigWithDynamicProperties(@TempDir File tempDir) 
throws Exception {
+        File keytabFile = new File(tempDir, "keytab.file");
+        keytabFile.createNewFile();
+        String[] args = {
+            "-e",
+            "test-executor",
+            "-D" + SecurityOptions.KERBEROS_LOGIN_KEYTAB.key() + "=" + 
keytabFile.getPath(),
+            "-D" + SecurityOptions.KERBEROS_LOGIN_PRINCIPAL.key() + 
"=principal",
+            getTestJarPath(),
+        };
+        TestingCliFrontendWithDynamicProperties testFrontend =
+                new TestingCliFrontendWithDynamicProperties(
+                        configuration, cliUnderTest, null, null);
+        CommandLine commandLine = testFrontend.getCommandLine(new Options(), 
args, true);
+        Configuration securityConfig = new Configuration(configuration);
+        DynamicPropertiesUtil.encodeDynamicProperties(commandLine, 
securityConfig);
+        SecurityConfiguration securityConfiguration = new 
SecurityConfiguration(securityConfig);
+        
assertThat(securityConfiguration.getKeytab()).isEqualTo(keytabFile.getPath());
+        
assertThat(securityConfiguration.getPrincipal()).isEqualTo("principal");
+    }
+
     // 
--------------------------------------------------------------------------------------------
 
     public static void verifyCliFrontendWithDynamicProperties(

Reply via email to