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


Reply via email to