diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java index 4b941efbef..24d07c6269 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/LdapGroupsMapping.java @@ -616,19 +616,15 @@ public synchronized void setConf(Configuration conf) { } String getPassword(Configuration conf, String alias, String defaultPass) { - String password = null; + String password = defaultPass; try { char[] passchars = conf.getPassword(alias); if (passchars != null) { password = new String(passchars); } - else { - password = defaultPass; - } - } - catch (IOException ioe) { - LOG.warn("Exception while trying to password for alias " + alias + ": " - + ioe.getMessage()); + } catch (IOException ioe) { + LOG.warn("Exception while trying to get password for alias " + alias + + ": ", ioe); } return password; } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestLdapGroupsMapping.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestLdapGroupsMapping.java index 131b4e6d92..9e9f5a524e 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestLdapGroupsMapping.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestLdapGroupsMapping.java @@ -57,6 +57,7 @@ import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -364,4 +365,24 @@ public void run() { } } + /** + * Make sure that when + * {@link Configuration#getPassword(String)} throws an IOException, + * {@link LdapGroupsMapping#setConf(Configuration)} does not throw an NPE. + * + * @throws Exception + */ + @Test(timeout = 10000) + public void testSetConf() throws Exception { + Configuration conf = new Configuration(); + Configuration mockConf = Mockito.spy(conf); + when(mockConf.getPassword(anyString())) + .thenThrow(new IOException("injected IOException")); + // Set a dummy LDAP server URL. + mockConf.set(LdapGroupsMapping.LDAP_URL_KEY, "ldap://test"); + + LdapGroupsMapping groupsMapping = getGroupsMapping(); + groupsMapping.setConf(mockConf); + } + }