You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/04/20 22:48:46 UTC

[06/10] incubator-tinkerpop git commit: TINKERPOP-1263 Add SASL mechanism as argument to request

TINKERPOP-1263 Add SASL mechanism as argument to request


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/fd9c35d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/fd9c35d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/fd9c35d1

Branch: refs/heads/master
Commit: fd9c35d189a2271f0c7b4e4707424f5d96f1ccc6
Parents: fb62cad
Author: Mike Adamson <ma...@datastax.com>
Authored: Tue Apr 19 12:14:55 2016 +0100
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 20 16:46:42 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/driver/Handler.java       | 13 ++++----
 .../apache/tinkerpop/gremlin/driver/Tokens.java |  1 +
 .../handler/SaslAuthenticationHandler.java      | 33 +++-----------------
 3 files changed, 11 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fd9c35d1/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
index 977ec1e..773322a 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tinkerpop.gremlin.driver;
 
-import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.driver.exception.ResponseException;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
@@ -84,18 +83,18 @@ final class Handler {
             if (response.getStatus().getCode() == ResponseStatusCode.AUTHENTICATE) {
                 final Attribute<SaslClient> saslClient = channelHandlerContext.attr(saslClientKey);
                 final Attribute<Subject> subject = channelHandlerContext.attr(subjectKey);
-                byte[] saslResponse;
+                RequestMessage.Builder messageBuilder = RequestMessage.build(Tokens.OPS_AUTHENTICATION);
                 // First time through we don't have a sasl client
                 if (saslClient.get() == null) {
                     subject.set(login());
                     saslClient.set(saslClient(getHostName(channelHandlerContext)));
-                    byte[] initialResponse = saslClient.get().hasInitialResponse() ? evaluateChallenge(subject, saslClient, NULL_CHALLENGE) : null;
-                    // Add the mechanism name to the start of the initial response
-                    saslResponse = ArrayUtils.addAll(getMechanism().getBytes(StandardCharsets.UTF_8), initialResponse);
+                    messageBuilder.addArg(Tokens.ARGS_SASL_MECHANISM, getMechanism());
+                    messageBuilder.addArg(Tokens.ARGS_SASL, saslClient.get().hasInitialResponse() ?
+                                                                evaluateChallenge(subject, saslClient, NULL_CHALLENGE) : null);
                 } else {
-                    saslResponse = evaluateChallenge(subject, saslClient, (byte[])response.getResult().getData());
+                    messageBuilder.addArg(Tokens.ARGS_SASL, evaluateChallenge(subject, saslClient, (byte[])response.getResult().getData()));
                 }
-                channelHandlerContext.writeAndFlush(RequestMessage.build(Tokens.OPS_AUTHENTICATION).addArg(Tokens.ARGS_SASL, saslResponse).create());
+                channelHandlerContext.writeAndFlush(messageBuilder.create());
             } else {
                 channelHandlerContext.fireChannelRead(response);
             }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fd9c35d1/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
index 937017a..460ed12 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
@@ -57,6 +57,7 @@ public final class Tokens {
     public static final String ARGS_SESSION = "session";
     public static final String ARGS_MANAGE_TRANSACTION = "manageTransaction";
     public static final String ARGS_SASL = "sasl";
+    public static final String ARGS_SASL_MECHANISM = "saslMechanism";
 
     public static final String ARGS_COORDINATES_GROUP = "group";
     public static final String ARGS_COORDINATES_ARTIFACT = "artifact";

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fd9c35d1/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java
index 1d42b28..de7f624 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java
@@ -27,9 +27,7 @@ import io.netty.util.Attribute;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
-import java.nio.charset.StandardCharsets;
 import java.util.Base64;
-import org.apache.commons.lang.ArrayUtils;
 import org.apache.tinkerpop.gremlin.driver.Tokens;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
@@ -52,8 +50,6 @@ import org.slf4j.LoggerFactory;
 @ChannelHandler.Sharable
 public class SaslAuthenticationHandler extends ChannelInboundHandlerAdapter {
     private static final Logger logger = LoggerFactory.getLogger(SaslAuthenticationHandler.class);
-    private static final byte[] PLAIN_BYTES = "PLAIN".getBytes(StandardCharsets.UTF_8);
-    private static final byte[] GSSAPI_BYTES = "GSSAPI".getBytes(StandardCharsets.UTF_8);
 
     private final Authenticator authenticator;
 
@@ -77,10 +73,10 @@ public class SaslAuthenticationHandler extends ChannelInboundHandlerAdapter {
                 ctx.writeAndFlush(authenticate);
             } else {
                 if (requestMessage.getOp().equals(Tokens.OPS_AUTHENTICATION) && requestMessage.getArgs().containsKey(Tokens.ARGS_SASL)) {
-
+                    
                     final Object saslObject = requestMessage.getArgs().get(Tokens.ARGS_SASL);
-                    byte[] saslResponse;
-
+                    final byte[] saslResponse;
+                    
                     if (saslObject instanceof byte[]) {
                         saslResponse = (byte[]) saslObject;
                     } else if(saslObject instanceof String) {
@@ -92,10 +88,7 @@ public class SaslAuthenticationHandler extends ChannelInboundHandlerAdapter {
                         ctx.writeAndFlush(error);
                         return;
                     }
-
-                    // We aren't interested in the mechanism from the client so just remove it
-                    saslResponse = removeSaslMechanism(saslResponse);
-
+                    
                     try {
                         final byte[] saslMessage = negotiator.get().evaluateResponse(saslResponse);
                         if (negotiator.get().isComplete()) {
@@ -134,24 +127,6 @@ public class SaslAuthenticationHandler extends ChannelInboundHandlerAdapter {
         }
     }
 
-    private byte[] removeSaslMechanism(byte[] saslResponse) {
-        if (compareMechanism(PLAIN_BYTES, saslResponse)) {
-            return ArrayUtils.subarray(saslResponse, PLAIN_BYTES.length, saslResponse.length);
-        } else if (compareMechanism(GSSAPI_BYTES, saslResponse)) {
-            return ArrayUtils.subarray(saslResponse, GSSAPI_BYTES.length, saslResponse.length);
-        }
-        return saslResponse;
-    }
-
-    private boolean compareMechanism(byte[] mechanism, byte[] saslResponse) {
-        for (int index = 0; index < mechanism.length; index++) {
-            if (mechanism[index] != saslResponse[index]) {
-                return false;
-            }
-        }
-        return true;
-    }
-
     private InetAddress getRemoteInetAddress(ChannelHandlerContext ctx)
     {
         Channel channel = ctx.channel();