KNOX-2127 - ZooKeeperAliasService mishandles mixed-case alias keys properly (#202)
diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasService.java b/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasService.java
index f2327e8..cf096ac 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasService.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasService.java
@@ -102,7 +102,8 @@
*/
private static String buildAliasEntryName(final String clusterName,
final String alias) {
- return buildClusterEntryName(clusterName) + PATH_SEPARATOR + alias;
+ // Convert all alias names to lower case (JDK-4891485)
+ return buildClusterEntryName(clusterName) + PATH_SEPARATOR + alias.toLowerCase(Locale.ROOT);
}
/**
@@ -228,10 +229,7 @@
@Override
public char[] getPasswordFromAliasForCluster(String clusterName,
- String givenAlias, boolean generate) throws AliasServiceException {
-
- /* convert all alias names to lower case since JDK expects the same behaviour */
- final String alias = givenAlias.toLowerCase(Locale.ROOT);
+ String alias, boolean generate) throws AliasServiceException {
char[] password = null;
diff --git a/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasServiceTest.java b/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasServiceTest.java
index aeb6b1e..d49b0a1 100644
--- a/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasServiceTest.java
+++ b/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasServiceTest.java
@@ -36,6 +36,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import static org.easymock.EasyMock.capture;
@@ -108,7 +109,7 @@
@Test
public void testAliasForCluster() throws Exception {
final String expectedClusterName = "sandbox";
- final String expectedAlias = "knox.test.alias";
+ final String expectedAlias = "knox.test.Alias";
final String expectedPassword = "dummyPassword";
final String expectedClusterNameDev = "development";
@@ -166,16 +167,19 @@
Assert.assertEquals(aliases.size(), 1);
Assert.assertEquals(aliasesDev.size(), 1);
- Assert.assertTrue("Expected alias 'knox.test.alias' not found ",
- aliases.contains(expectedAlias));
- Assert.assertTrue("Expected alias 'knox.test.alias.dev' not found ",
+ Assert.assertTrue("Expected alias '" + expectedAlias + "' not found ",
+ aliases.contains(expectedAlias.toLowerCase(Locale.ROOT)));
+ Assert.assertTrue("Expected alias '" + expectedAliasDev + "' not found ",
aliasesDev.contains(expectedAliasDev));
final char[] result = zkAlias
.getPasswordFromAliasForCluster(expectedClusterName, expectedAlias);
+ Assert.assertNotNull("Failed lookup for " + expectedAlias, result);
+
final char[] result1 = zkAlias
.getPasswordFromAliasForCluster(expectedClusterNameDev,
expectedAliasDev);
+ Assert.assertNotNull("Failed lookup for " + expectedAliasDev, result1);
Assert.assertEquals(expectedPassword, new String(result));
Assert.assertEquals(expectedPasswordDev, new String(result1));
@@ -188,12 +192,12 @@
aliasesDev = zkAlias.getAliasesForCluster(expectedClusterNameDev);
Assert.assertEquals(aliasesDev.size(), 0);
- Assert.assertFalse("Expected alias 'knox.test.alias.dev' to be removed but found.",
+ Assert.assertFalse("Expected alias '" + expectedAliasDev + "' to be removed but found.",
aliasesDev.contains(expectedAliasDev));
Assert.assertEquals(aliases.size(), 1);
- Assert.assertTrue("Expected alias 'knox.test.alias' not found ",
- aliases.contains(expectedAlias));
+ Assert.assertTrue("Expected alias '" + expectedAlias + "' not found ",
+ aliases.contains(expectedAlias.toLowerCase(Locale.ROOT)));
/* Test auto-generate password for alias */
final String testAutoGeneratedpasswordAlias = "knox.test.alias.auto";