SLIDER-1186 Slider incorrectly assumes that keytabs are provided for AM
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/security/SecurityConfiguration.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/security/SecurityConfiguration.java
index 9a89c39..27fb0d7 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/security/SecurityConfiguration.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/security/SecurityConfiguration.java
@@ -17,6 +17,8 @@
package org.apache.slider.server.appmaster.security;
import com.google.common.base.Preconditions;
+
+import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import static org.apache.slider.core.main.LauncherExitCodes.EXIT_UNAUTHORIZED;
@@ -126,14 +128,14 @@
}
public boolean isKeytabProvided() {
- boolean keytabProvided = instanceDefinition.getAppConfOperations()
- .getComponent(SliderKeys.COMPONENT_AM)
- .get(SliderXmlConfKeys.KEY_AM_KEYTAB_LOCAL_PATH) != null ||
- instanceDefinition.getAppConfOperations()
- .getComponent(SliderKeys.COMPONENT_AM).
- get(SliderXmlConfKeys.KEY_AM_LOGIN_KEYTAB_NAME) != null;
- return keytabProvided;
-
+ String keytabLocalPath = instanceDefinition.getAppConfOperations()
+ .getComponent(SliderKeys.COMPONENT_AM)
+ .get(SliderXmlConfKeys.KEY_AM_KEYTAB_LOCAL_PATH);
+ String keytabName = instanceDefinition.getAppConfOperations()
+ .getComponent(SliderKeys.COMPONENT_AM)
+ .get(SliderXmlConfKeys.KEY_AM_LOGIN_KEYTAB_NAME);
+ return StringUtils.isNotBlank(keytabLocalPath)
+ || StringUtils.isNotBlank(keytabName);
}
public File getKeytabFile(AggregateConf instanceDefinition)
diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/security/SecurityConfigurationTest.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/security/SecurityConfigurationTest.groovy
index e543b7c..be1205b 100644
--- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/security/SecurityConfigurationTest.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/security/SecurityConfigurationTest.groovy
@@ -159,4 +159,23 @@
securityConfiguration.getKeytabFile(aggregateConf).getAbsolutePath()
}
+ @Test
+ public void testAMKeytabProvided() throws Throwable {
+ Configuration config = new Configuration()
+ AggregateConf aggregateConf = new AggregateConf();
+ MapOperations compOps =
+ aggregateConf.appConfOperations.getOrAddComponent(SliderKeys.COMPONENT_AM)
+ compOps.put(SliderXmlConfKeys.KEY_AM_KEYTAB_LOCAL_PATH, " ")
+
+ SecurityConfiguration securityConfiguration =
+ new SecurityConfiguration(config, aggregateConf, "testCluster")
+ assert !securityConfiguration.isKeytabProvided()
+
+ compOps.put(SliderXmlConfKeys.KEY_AM_LOGIN_KEYTAB_NAME, "")
+ assert !securityConfiguration.isKeytabProvided()
+
+ compOps.put(SliderXmlConfKeys.KEY_AM_LOGIN_KEYTAB_NAME, "some.keytab")
+ assert securityConfiguration.isKeytabProvided()
+ }
+
}