HADOOP-11545. ArrayIndexOutOfBoundsException is thrown with "hadoop credential list -provider". Contributed by Brahma Reddy Battula.

(cherry picked from commit 1714609919)
This commit is contained in:
Akira Ajisaka 2015-02-18 11:17:10 -08:00
parent f10335b08d
commit 5a1531fff6
3 changed files with 34 additions and 3 deletions

View File

@ -556,6 +556,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-11599. Client#getTimeout should use IPC_CLIENT_PING_DEFAULT when HADOOP-11599. Client#getTimeout should use IPC_CLIENT_PING_DEFAULT when
IPC_CLIENT_PING_KEY is not configured. (zhihai xu via ozawa) IPC_CLIENT_PING_KEY is not configured. (zhihai xu via ozawa)
HADOOP-11545. ArrayIndexOutOfBoundsException is thrown with "hadoop
credential list -provider". (Brahma Reddy Battula via aajisaka)
Release 2.6.1 - UNRELEASED Release 2.6.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -97,6 +97,10 @@ public class CredentialShell extends Configured implements Tool {
for (int i = 0; i < args.length; i++) { // parse command line for (int i = 0; i < args.length; i++) { // parse command line
if (args[i].equals("create")) { if (args[i].equals("create")) {
if (i == args.length - 1) {
printCredShellUsage();
return 1;
}
String alias = args[++i]; String alias = args[++i];
command = new CreateCommand(alias); command = new CreateCommand(alias);
if (alias.equals("-help")) { if (alias.equals("-help")) {
@ -104,6 +108,10 @@ public class CredentialShell extends Configured implements Tool {
return 0; return 0;
} }
} else if (args[i].equals("delete")) { } else if (args[i].equals("delete")) {
if (i == args.length - 1) {
printCredShellUsage();
return 1;
}
String alias = args[++i]; String alias = args[++i];
command = new DeleteCommand(alias); command = new DeleteCommand(alias);
if (alias.equals("-help")) { if (alias.equals("-help")) {
@ -113,6 +121,10 @@ public class CredentialShell extends Configured implements Tool {
} else if (args[i].equals("list")) { } else if (args[i].equals("list")) {
command = new ListCommand(); command = new ListCommand();
} else if (args[i].equals("-provider")) { } else if (args[i].equals("-provider")) {
if (i == args.length - 1) {
printCredShellUsage();
return 1;
}
userSuppliedProvider = true; userSuppliedProvider = true;
getConf().set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, getConf().set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH,
args[++i]); args[++i]);
@ -195,7 +207,7 @@ public class CredentialShell extends Configured implements Tool {
} }
private class ListCommand extends Command { private class ListCommand extends Command {
public static final String USAGE = "list [-provider] [-help]"; public static final String USAGE = "list [-provider provider-path]";
public static final String DESC = public static final String DESC =
"The list subcommand displays the aliases contained within \n" + "The list subcommand displays the aliases contained within \n" +
"a particular provider - as configured in core-site.xml or " + "a particular provider - as configured in core-site.xml or " +
@ -237,7 +249,7 @@ public class CredentialShell extends Configured implements Tool {
private class DeleteCommand extends Command { private class DeleteCommand extends Command {
public static final String USAGE = public static final String USAGE =
"delete <alias> [-provider] [-f] [-help]"; "delete <alias> [-f] [-provider provider-path]";
public static final String DESC = public static final String DESC =
"The delete subcommand deletes the credential\n" + "The delete subcommand deletes the credential\n" +
"specified as the <alias> argument from within the provider\n" + "specified as the <alias> argument from within the provider\n" +
@ -308,7 +320,8 @@ public class CredentialShell extends Configured implements Tool {
} }
private class CreateCommand extends Command { private class CreateCommand extends Command {
public static final String USAGE = "create <alias> [-provider] [-help]"; public static final String USAGE =
"create <alias> [-provider provider-path]";
public static final String DESC = public static final String DESC =
"The create subcommand creates a new credential for the name specified\n" + "The create subcommand creates a new credential for the name specified\n" +
"as the <alias> argument within the provider indicated through\n" + "as the <alias> argument within the provider indicated through\n" +

View File

@ -212,4 +212,19 @@ public class TestCredShell {
0, shell.init(new String[] {cmd, "-help"})); 0, shell.init(new String[] {cmd, "-help"}));
} }
} }
@Test
public void testEmptyArgForCommands() throws Exception {
CredentialShell shell = new CredentialShell();
String[] command = { "list", "-provider" };
assertEquals("Expected empty argument on " + command + " to return 1", 1,
shell.init(command));
for (String cmd : Arrays.asList("create", "delete")) {
shell.setConf(new Configuration());
assertEquals("Expected empty argument on " + cmd + " to return 1", 1,
shell.init(new String[] { cmd }));
}
}
} }