Explorar o código

AMBARI-25295: Ambari Server Error on submitting EU (#3474)

Zhiguo Wu %!s(int64=3) %!d(string=hai) anos
pai
achega
283bc3b35f

+ 7 - 2
ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/IPAKerberosOperationHandler.java

@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.serveraction.kerberos;
 
+import java.util.Arrays;
 import java.util.Map;
 import java.util.Set;
 
@@ -254,13 +255,17 @@ public class IPAKerberosOperationHandler extends KDCKerberosOperationHandler {
   }
 
   @Override
-  protected String[] getKinitCommand(String executableKinit, PrincipalKeyCredential credentials, String credentialsCache, Map<String, String> kerberosConfiguration) {
-    return new String[]{
+  protected String[] getKinitCommand(String executableKinit, PrincipalKeyCredential credentials, String credentialsCache, Map<String, String> kerberosConfiguration) throws KerberosOperationException {
+    String [] command = new String[]{
         executableKinit,
         "-c",
         credentialsCache,
         credentials.getPrincipal()
     };
+    if (Arrays.asList(command).contains(null)){
+      throw new KerberosOperationException("Got a null value, can not create 'kinit' command");
+    }
+    return command;
   }
 
   @Override

+ 10 - 2
ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/MITKerberosOperationHandler.java

@@ -19,6 +19,7 @@
 package org.apache.ambari.server.serveraction.kerberos;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -342,8 +343,11 @@ public class MITKerberosOperationHandler extends KDCKerberosOperationHandler {
   protected String[] getKinitCommand(String executableKinit, PrincipalKeyCredential credentials, String credentialsCache, Map<String, String> kerberosConfiguration) throws KerberosOperationException {
     // kinit -c <path> -S kadmin/`hostname -f` <principal>
     try {
-      final String kadminPrincipalName = variableReplacementHelper.replaceVariables(kerberosConfiguration.get(KERBEROS_ENV_KADMIN_PRINCIPAL_NAME), buildReplacementsMap(kerberosConfiguration));
-      return new String[]{
+      String kadminPrincipalName = variableReplacementHelper.replaceVariables(kerberosConfiguration.get(KERBEROS_ENV_KADMIN_PRINCIPAL_NAME), buildReplacementsMap(kerberosConfiguration));
+      if (kadminPrincipalName == null) {
+        kadminPrincipalName = String.format("kadmin/%s", getAdminServerHost(false));
+      }
+      String [] command = new String[]{
           executableKinit,
           "-c",
           credentialsCache,
@@ -351,6 +355,10 @@ public class MITKerberosOperationHandler extends KDCKerberosOperationHandler {
           kadminPrincipalName,
           credentials.getPrincipal()
       };
+      if (Arrays.asList(command).contains(null)){
+        throw new KerberosOperationException("Got a null value, can not create 'kinit' command");
+      }
+      return command;
     } catch (AmbariException e) {
       throw new KerberosOperationException("Error while getting 'kinit' command", e);
     }