ACCUMULO-1376 Shell verifies before dropping user Signed-off-by: Josh Elser <els...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/f3d73910 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/f3d73910 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/f3d73910 Branch: refs/heads/ACCUMULO-378 Commit: f3d739102a8f3f9688c7236e964ee287911bb895 Parents: 97cac21 Author: Vincent Russell <vruss...@texeltek.com> Authored: Thu Jun 12 11:37:04 2014 -0400 Committer: Josh Elser <els...@apache.org> Committed: Thu Jun 12 11:39:01 2014 -0400 ---------------------------------------------------------------------- .../shell/commands/DropUserCommand.java | 44 ++++++++++++++++---- .../org/apache/accumulo/test/ShellServerIT.java | 3 +- 2 files changed, 39 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/f3d73910/shell/src/main/java/org/apache/accumulo/shell/commands/DropUserCommand.java ---------------------------------------------------------------------- diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/DropUserCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/DropUserCommand.java index 7de216d..35fa37a 100644 --- a/shell/src/main/java/org/apache/accumulo/shell/commands/DropUserCommand.java +++ b/shell/src/main/java/org/apache/accumulo/shell/commands/DropUserCommand.java @@ -16,6 +16,7 @@ */ package org.apache.accumulo.shell.commands; +import java.io.IOException; import java.util.Map; import java.util.Set; @@ -23,39 +24,68 @@ import org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.AccumuloSecurityException; import org.apache.accumulo.core.util.BadArgumentException; import org.apache.accumulo.shell.Shell; -import org.apache.accumulo.shell.Token; import org.apache.accumulo.shell.Shell.Command; +import org.apache.accumulo.shell.Token; import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; public class DropUserCommand extends Command { + private Option forceOpt; + @Override public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException { final String user = cl.getArgs()[0]; if (shellState.getConnector().whoami().equals(user)) { throw new BadArgumentException("You cannot delete yourself", fullCommand, fullCommand.indexOf(user)); } - shellState.getConnector().securityOperations().dropLocalUser(user); - Shell.log.debug("Deleted user " + user); + doDropUser(shellState, user, cl.hasOption(forceOpt.getOpt())); return 0; } - + + private void doDropUser(final Shell shellState, final String user, final boolean force) throws AccumuloException, AccumuloSecurityException { + boolean operate = true; + + try { + if (!force) { + shellState.getReader().flush(); + String line = shellState.getReader().readLine(getName() + " { " + user + " } (yes|no)? "); + operate = line != null && (line.equalsIgnoreCase("y") || line.equalsIgnoreCase("yes")); + } + if (operate) { + shellState.getConnector().securityOperations().dropLocalUser(user); + Shell.log.debug("Deleted user " + user); + } + } catch (IOException e) { + throw new AccumuloException(e); + } + } + @Override public String description() { return "deletes a user"; } - + @Override public String usage() { return getName() + " <username>"; } - + @Override public void registerCompletion(final Token root, final Map<Command.CompletionSet,Set<String>> completionSet) { registerCompletionForUsers(root, completionSet); } - + @Override public int numArgs() { return 1; } + + @Override + public Options getOptions() { + forceOpt = new Option("f", "force", false, "force deletion without prompting"); + final Options opts = super.getOptions(); + opts.addOption(forceOpt); + return opts; + } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f3d73910/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java ---------------------------------------------------------------------- diff --git a/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java b/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java index bff8c3a..f980641 100644 --- a/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java +++ b/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java @@ -417,7 +417,8 @@ public class ShellServerIT extends SimpleMacIT { ts.exec("revoke -u xyzzy -t " + MetadataTable.NAME + " Table.WRITE", true); ts.exec("revoke -u xyzzy -t " + MetadataTable.NAME + " Table.GOOFY", false); ts.exec("revoke -u xyzzy -t " + MetadataTable.NAME + " foo", false); - ts.exec("deleteuser xyzzy", true); + ts.exec("deleteuser xyzzy", true, "deleteuser { xyzzy } (yes|no)?", true); + ts.exec("deleteuser -f xyzzy", true); ts.exec("users", true, "xyzzy", false); }