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();