You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by vi...@apache.org on 2013/04/19 02:58:16 UTC

svn commit: r1469651 - in /accumulo/trunk: ./ core/ core/src/main/java/org/apache/accumulo/core/cli/ core/src/main/java/org/apache/accumulo/core/client/security/tokens/ core/src/main/java/org/apache/accumulo/core/util/shell/ core/src/test/java/org/apac...

Author: vines
Date: Fri Apr 19 00:58:15 2013
New Revision: 1469651

URL: http://svn.apache.org/r1469651
Log:
ACCUMULO-1314 - destroyable properties. Also, fixed the tests broken with the fix for ACCUMULO-1323



Modified:
    accumulo/trunk/   (props changed)
    accumulo/trunk/core/   (props changed)
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/AuthenticationToken.java
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/NullToken.java
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/PasswordToken.java
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
    accumulo/trunk/core/src/test/java/org/apache/accumulo/core/util/shell/ShellTest.java
    accumulo/trunk/proxy/src/main/java/org/apache/accumulo/proxy/ProxyServer.java
    accumulo/trunk/server/   (props changed)
    accumulo/trunk/server/src/main/java/org/apache/accumulo/server/monitor/servlets/trace/Basic.java
    accumulo/trunk/server/src/main/java/org/apache/accumulo/server/trace/TraceServer.java
    accumulo/trunk/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java

Propchange: accumulo/trunk/
------------------------------------------------------------------------------
  Merged /accumulo/branches/1.5:r1469628,1469630-1469631,1469633-1469650

Propchange: accumulo/trunk/core/
------------------------------------------------------------------------------
  Merged /accumulo/branches/1.5/core:r1469531-1469628,1469630-1469631,1469633-1469650

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java Fri Apr 19 00:58:15 2013
@@ -21,7 +21,6 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Properties;
 import java.util.TreeMap;
 import java.util.UUID;
 
@@ -36,6 +35,7 @@ import org.apache.accumulo.core.client.m
 import org.apache.accumulo.core.client.mapreduce.AccumuloOutputFormat;
 import org.apache.accumulo.core.client.mock.MockInstance;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.client.security.tokens.AuthenticationToken.Properties;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.DefaultConfiguration;

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/AuthenticationToken.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/AuthenticationToken.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/AuthenticationToken.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/AuthenticationToken.java Fri Apr 19 00:58:15 2013
@@ -16,9 +16,12 @@
  */
 package org.apache.accumulo.core.client.security.tokens;
 
-import java.util.Properties;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
+import javax.security.auth.DestroyFailedException;
 import javax.security.auth.Destroyable;
 
 import org.apache.hadoop.io.Writable;
@@ -27,6 +30,38 @@ import org.apache.hadoop.io.Writable;
  * @since 1.5.0
  */
 public interface AuthenticationToken extends Writable, Destroyable, Cloneable {
+  public class Properties extends HashMap<String, char[]> implements Destroyable {
+    private static final long serialVersionUID = 507486847276806489L;
+    boolean destroyed = false;
+    
+    public char[] put(String key, CharSequence value) {
+      char[] toPut = new char[value.length()];
+      for (int i = 0; i < value.length(); i++)
+        toPut[i] = value.charAt(i);
+      return this.put(key, toPut);
+    }
+    
+    public void putAllStrings(Map<String, ? extends CharSequence> map) {
+      for (Map.Entry<String,? extends CharSequence> entry : map.entrySet()) {
+        put(entry.getKey(), entry.getValue());
+      }
+    }
+
+    @Override
+    public void destroy() throws DestroyFailedException {
+      for (String key : this.keySet()) {
+        char[] val = this.get(key);
+        Arrays.fill(val, (char) 0);
+      }
+      this.clear();
+      destroyed = true;
+    }
+
+    @Override
+    public boolean isDestroyed() {
+      return destroyed;
+    }
+  }
   
   public static class TokenProperty implements Comparable<TokenProperty> {
     private String key, description;

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/NullToken.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/NullToken.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/NullToken.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/NullToken.java Fri Apr 19 00:58:15 2013
@@ -20,7 +20,6 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.util.Collections;
-import java.util.Properties;
 import java.util.Set;
 
 import javax.security.auth.DestroyFailedException;

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/PasswordToken.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/PasswordToken.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/PasswordToken.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/client/security/tokens/PasswordToken.java Fri Apr 19 00:58:15 2013
@@ -20,9 +20,9 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
 import java.util.Arrays;
 import java.util.LinkedHashSet;
-import java.util.Properties;
 import java.util.Set;
 
 import javax.security.auth.DestroyFailedException;
@@ -125,9 +125,11 @@ public class PasswordToken implements Au
   
   @Override
   public void init(Properties properties) {
-    if (properties.containsKey("password"))
-      this.password = properties.getProperty("password").getBytes(Constants.UTF8);
-    else
+    if (properties.containsKey("password")){
+      // encode() kicks back a C-string, which is not compatible with the old passwording system
+      this.password = new byte[properties.get("password").length];
+      Constants.UTF8.encode(CharBuffer.wrap(properties.get("password"))).get(this.password, 0, this.password.length);
+    }else
       throw new IllegalArgumentException("Missing 'password' property");
   }
   

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java Fri Apr 19 00:58:15 2013
@@ -30,7 +30,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Properties;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.UUID;
@@ -48,6 +47,7 @@ import org.apache.accumulo.core.client.T
 import org.apache.accumulo.core.client.ZooKeeperInstance;
 import org.apache.accumulo.core.client.mock.MockInstance;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.client.security.tokens.AuthenticationToken.Properties;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;

Modified: accumulo/trunk/core/src/test/java/org/apache/accumulo/core/util/shell/ShellTest.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/test/java/org/apache/accumulo/core/util/shell/ShellTest.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/core/src/test/java/org/apache/accumulo/core/util/shell/ShellTest.java (original)
+++ accumulo/trunk/core/src/test/java/org/apache/accumulo/core/util/shell/ShellTest.java Fri Apr 19 00:58:15 2013
@@ -87,7 +87,7 @@ public class ShellTest {
     output = new TestOutputStream();
     shell = new Shell(new ConsoleReader(new FileInputStream(FileDescriptor.in), new OutputStreamWriter(output)));
     shell.setLogErrorsToConsole();
-    shell.config("--fake", "-p", "");
+    shell.config("--fake", "-u", "test", "-p", "secret");
   }
   
   void assertGoodExit(String s, boolean stringPresent) {
@@ -154,10 +154,10 @@ public class ShellTest {
     exec("setauths x,y,z", false, "Missing required option");
     exec("setauths -s x,y,z -u notauser", false, "user does not exist");
     exec("setauths -s y,z,x", true);
-    exec("getauths -u notauser", false,"user does not exist");
-    exec("getauths", true,"x,y,z");
-    exec("addauths -u notauser", false,"Missing required option");
-    exec("addauths -u notauser -s foo", false,"user does not exist");
+    exec("getauths -u notauser", false, "user does not exist");
+    exec("getauths", true, "y,z,x");
+    exec("addauths -u notauser", false, "Missing required option");
+    exec("addauths -u notauser -s foo", false, "user does not exist");
     exec("addauths -s a", true);
     exec("getauths", true, "a,x,y,z");
     exec("setauths -c", true);
@@ -166,7 +166,8 @@ public class ShellTest {
   @Test
   public void userTest() throws Exception {
     Shell.log.debug("Starting user test --------------------------");
-    //exec("createuser root", false, "user exists");
+    // Test cannot be done via junit because createuser only prompts for password
+    //    exec("createuser root", false, "user exists");
   }
   
   @Test
@@ -176,7 +177,7 @@ public class ShellTest {
     exec("du", true, "0 [t]");
     exec("deletetable t -f", true, "Table: [t] has been deleted");
   }
-
+  
   @Test
   public void duTest() throws IOException {
     Shell.log.debug("Starting DU test --------------------------");

Modified: accumulo/trunk/proxy/src/main/java/org/apache/accumulo/proxy/ProxyServer.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/proxy/src/main/java/org/apache/accumulo/proxy/ProxyServer.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/proxy/src/main/java/org/apache/accumulo/proxy/ProxyServer.java (original)
+++ accumulo/trunk/proxy/src/main/java/org/apache/accumulo/proxy/ProxyServer.java Fri Apr 19 00:58:15 2013
@@ -1247,8 +1247,8 @@ public class ProxyServer implements Accu
   }
   
   private AuthenticationToken getToken(String principal, Map<String,String> properties) throws AccumuloSecurityException, AccumuloException {
-    Properties props = new Properties();
-    props.putAll(properties);
+    AuthenticationToken.Properties props = new AuthenticationToken.Properties();
+    props.putAllStrings(properties);
     AuthenticationToken token;
     try {
       token = tokenClass.newInstance();

Propchange: accumulo/trunk/server/
------------------------------------------------------------------------------
  Merged /accumulo/branches/1.5/server:r1469531-1469628,1469630-1469631,1469633-1469650

Modified: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/monitor/servlets/trace/Basic.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/monitor/servlets/trace/Basic.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/server/src/main/java/org/apache/accumulo/server/monitor/servlets/trace/Basic.java (original)
+++ accumulo/trunk/server/src/main/java/org/apache/accumulo/server/monitor/servlets/trace/Basic.java Fri Apr 19 00:58:15 2013
@@ -19,7 +19,6 @@ package org.apache.accumulo.server.monit
 import java.util.Date;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Properties;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -29,6 +28,7 @@ import org.apache.accumulo.core.client.C
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.client.security.tokens.AuthenticationToken.Properties;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;

Modified: accumulo/trunk/server/src/main/java/org/apache/accumulo/server/trace/TraceServer.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/trace/TraceServer.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/server/src/main/java/org/apache/accumulo/server/trace/TraceServer.java (original)
+++ accumulo/trunk/server/src/main/java/org/apache/accumulo/server/trace/TraceServer.java Fri Apr 19 00:58:15 2013
@@ -21,7 +21,6 @@ import java.net.ServerSocket;
 import java.nio.channels.ServerSocketChannel;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.accumulo.core.Constants;
@@ -31,6 +30,7 @@ import org.apache.accumulo.core.client.C
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.MutationsRejectedException;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.client.security.tokens.AuthenticationToken.Properties;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;

Modified: accumulo/trunk/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java?rev=1469651&r1=1469650&r2=1469651&view=diff
==============================================================================
--- accumulo/trunk/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java (original)
+++ accumulo/trunk/test/src/test/java/org/apache/accumulo/test/ShellServerTest.java Fri Apr 19 00:58:15 2013
@@ -707,7 +707,6 @@ public class ShellServerTest {
     exec("deletetable -f t");
     exec("sleep 1");
     String trace = exec("trace off");
-    //System.out.println("trace: " + trace);
     assertTrue(trace.contains("binMutations"));
     assertTrue(trace.contains("update"));
     assertTrue(trace.contains("DeleteTable"));