Author: jbellis
Date: Fri Dec 31 17:22:04 2010
New Revision: 1054137
URL: http://svn.apache.org/viewvc?rev=1054137&view=rev
Log:
add RMI authentication options to nodetool
patch by mck; reviewed by jbellis for CASSANDRA-1921
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1054137&r1=1054136&r2=1054137&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Dec 31 17:22:04 2010
@@ -4,6 +4,7 @@ dev
* upgrade to TFastFramedTransport (CASSANDRA-1743)
* avoid polluting page cache with commitlog or sstable writes
and seq scan operations (CASSANDRA-1470)
+ * add RMI authentication options to nodetool (CASSANDRA-1921)
0.7.0-rc4
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1054137&r1=1054136&r2=1054137&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
Fri Dec 31 17:22:04 2010
@@ -45,6 +45,10 @@ public class NodeCmd {
private static final String HOST_OPT_SHORT = "h";
private static final String PORT_OPT_LONG = "port";
private static final String PORT_OPT_SHORT = "p";
+ private static final String USERNAME_OPT_LONG = "username";
+ private static final String USERNAME_OPT_SHORT = "u";
+ private static final String PASSWORD_OPT_LONG = "password";
+ private static final String PASSWORD_OPT_SHORT = "pw";
private static final int defaultPort = 8080;
private static Options options = null;
@@ -57,6 +61,8 @@ public class NodeCmd {
optHost.setRequired(true);
options.addOption(optHost);
options.addOption(PORT_OPT_SHORT, PORT_OPT_LONG, true, "remote jmx
agent port number");
+ options.addOption(USERNAME_OPT_SHORT, USERNAME_OPT_LONG, true, "remote
jmx agent username");
+ options.addOption(PASSWORD_OPT_SHORT, PASSWORD_OPT_LONG, true, "remote
jmx agent password");
}
public NodeCmd(NodeProbe probe)
@@ -469,11 +475,13 @@ public class NodeCmd {
throw new ParseException("Port must be a number");
}
}
+ String username = cmd.getOptionValue(USERNAME_OPT_LONG);
+ String password = cmd.getOptionValue(PASSWORD_OPT_LONG);
NodeProbe probe = null;
try
{
- probe = new NodeProbe(host, port);
+ probe = username == null ? new NodeProbe(host, port) : new
NodeProbe(host, port, username, password);
}
catch (IOException ioe)
{
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1054137&r1=1054136&r2=1054137&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
Fri Dec 31 17:22:04 2010
@@ -63,6 +63,8 @@ public class NodeProbe
private static final int defaultPort = 8080;
final String host;
final int port;
+ private String username;
+ private String password;
private JMXConnector jmxc;
private MBeanServerConnection mbeanServerConn;
@@ -73,6 +75,25 @@ public class NodeProbe
private StreamingServiceMBean streamProxy;
/**
+ * Creates a NodeProbe using the specified JMX host, port, username, and
password.
+ *
+ * @param host hostname or IP address of the JMX agent
+ * @param port TCP port of the remote JMX agent
+ * @throws IOException on connection failures
+ */
+ public NodeProbe(String host, int port, String username, String password)
throws IOException, InterruptedException
+ {
+ assert username != null && !username.isEmpty() && null != password &&
!password.isEmpty()
+ : "neither username nor password can be blank";
+
+ this.host = host;
+ this.port = port;
+ this.username = username;
+ this.password = password;
+ connect();
+ }
+
+ /**
* Creates a NodeProbe using the specified JMX host and port.
*
* @param host hostname or IP address of the JMX agent
@@ -107,7 +128,13 @@ public class NodeProbe
private void connect() throws IOException
{
JMXServiceURL jmxUrl = new JMXServiceURL(String.format(fmtUrl, host,
port));
- jmxc = JMXConnectorFactory.connect(jmxUrl, null);
+ Map<String,Object> env = new HashMap<String,Object>();
+ if (username != null)
+ {
+ String[] creds = { username, password };
+ env.put(JMXConnector.CREDENTIALS, creds);
+ }
+ jmxc = JMXConnectorFactory.connect(jmxUrl, env);
mbeanServerConn = jmxc.getMBeanServerConnection();
try