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:47:31 UTC

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

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/tp31 beb8c98bd -> 3552038c6


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


[4/4] incubator-tinkerpop git commit: Updated documentation on SASL CTR

Posted by sp...@apache.org.
Updated documentation on SASL CTR


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

Branch: refs/heads/tp31
Commit: 3552038c6fa7eb4a62148557bda48f2970f55d91
Parents: efd9042
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 20 16:46:09 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 20 16:47:06 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/provider/index.asciidoc              |  1 +
 .../src/upgrade/release-3.1.x-incubating.asciidoc | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3552038c/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index f8869af..2bbda92 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -777,6 +777,7 @@ Gremlin Server are deployed, session state is not shared among them.
 [width="100%",cols="2,2,9",options="header"]
 |=========================================================
 |Key |Type |Description
+|saslMechanism |String | The SASL mechanism: `PLAIN` or `GSSAPI`. Note that it is up to the server implementation to use or disregard this setting (default implementation in Gremlin Server ignores it).
 |sasl |byte[] | *Required* The response to the server authentication challenge.  This value is dependent on the SASL authentication mechanism required by the server.
 |=========================================================
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3552038c/docs/src/upgrade/release-3.1.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.1.x-incubating.asciidoc b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
index 7086d1e..070cc52 100644
--- a/docs/src/upgrade/release-3.1.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
@@ -29,6 +29,24 @@ TinkerPop 3.1.3
 
 Please see the link:https://github.com/apache/incubator-tinkerpop/blob/3.1.2-incubating/CHANGELOG.asciidoc#tinkerpop-313-release-date-MONTH-DAY-YEAR[changelog] for a complete list of all the modifications that are part of this release.
 
+Upgrading for Providers
+~~~~~~~~~~~~~~~~~~~~~~~
+
+IMPORTANT: It is recommended that providers also review all the upgrade instructions specified for users. Many of the
+changes there may prove important for the provider's implementation.
+
+Driver Providers
+^^^^^^^^^^^^^^^^
+
+SASL Mechanism
+++++++++++++++
+
+Note that the Gremlin Driver for Java now passes a new parameter for SASL authentication called `saslMechanism`. This
+is an optional argument and does not represent a breaking change, but it does make the overall implementation more
+complete. While the default authentication implementations packaged with Gremlin Server don't utilize this argument
+other implementations might, so the drivers should be able to pass it as per the SASL specification.
+
+See: https://issues.apache.org/jira/browse/[TINKERPOP-1263]
 
 TinkerPop 3.1.2
 ---------------


[2/4] incubator-tinkerpop git commit: TINKERPOP-1263 Pass SASL mechanism through to server

Posted by sp...@apache.org.
TINKERPOP-1263 Pass SASL mechanism through to server


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

Branch: refs/heads/tp31
Commit: fb62cada9b1cecb41376f074c1dde40e1f07df5f
Parents: beb8c98
Author: Mike Adamson <ma...@datastax.com>
Authored: Thu Apr 14 12:51:17 2016 +0100
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 20 16:46:42 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/driver/Handler.java       | 16 ++++++----
 .../handler/SaslAuthenticationHandler.java      | 33 +++++++++++++++++---
 .../server/GremlinServerAuthIntegrateTest.java  | 11 +++----
 3 files changed, 44 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fb62cada/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 fce658f..977ec1e 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,6 +18,7 @@
  */
 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;
@@ -33,6 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.net.InetSocketAddress;
+import java.nio.charset.StandardCharsets;
 import java.security.PrivilegedExceptionAction;
 import java.security.PrivilegedActionException;
 import java.util.HashMap;
@@ -60,7 +62,7 @@ import javax.security.sasl.SaslException;
 final class Handler {
 
     /**
-     * Generic SASL handler that will authenticate against the gremlin server. 
+     * Generic SASL handler that will authenticate against the gremlin server.
      */
     static class GremlinSaslAuthenticationHandler extends SimpleChannelInboundHandler<ResponseMessage> implements CallbackHandler {
         private static final Logger logger = LoggerFactory.getLogger(GremlinSaslAuthenticationHandler.class);
@@ -87,7 +89,9 @@ final class Handler {
                 if (saslClient.get() == null) {
                     subject.set(login());
                     saslClient.set(saslClient(getHostName(channelHandlerContext)));
-                    saslResponse = saslClient.get().hasInitialResponse() ? evaluateChallenge(subject, saslClient, NULL_CHALLENGE) : null;
+                    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);
                 } else {
                     saslResponse = evaluateChallenge(subject, saslClient, (byte[])response.getResult().getData());
                 }
@@ -113,7 +117,7 @@ final class Handler {
             }
         }
 
-        private byte[] evaluateChallenge(final Attribute<Subject> subject, final Attribute<SaslClient> saslClient, 
+        private byte[] evaluateChallenge(final Attribute<Subject> subject, final Attribute<SaslClient> saslClient,
                                          final byte[] challenge) throws SaslException {
 
             if (subject.get() == null) {
@@ -133,13 +137,13 @@ final class Handler {
             if (authProps.get(AuthProperties.Property.JAAS_ENTRY) != null) {
                 final LoginContext login = new LoginContext(authProps.get(AuthProperties.Property.JAAS_ENTRY));
                 login.login();
-                return login.getSubject();                    
+                return login.getSubject();
             }
             return null;
         }
 
         private SaslClient saslClient(final String hostname) throws SaslException {
-            return Sasl.createSaslClient(new String[] { getMechanism() }, null, authProps.get(AuthProperties.Property.PROTOCOL), 
+            return Sasl.createSaslClient(new String[] { getMechanism() }, null, authProps.get(AuthProperties.Property.PROTOCOL),
                                          hostname, SASL_PROPERTIES, this);
         }
 
@@ -148,7 +152,7 @@ final class Handler {
         }
 
         /**
-         * Work out the Sasl mechanism based on the user supplied parameters. 
+         * Work out the Sasl mechanism based on the user supplied parameters.
          * If we have a username and password use PLAIN otherwise GSSAPI
          */
         private String getMechanism() {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fb62cada/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 de7f624..1d42b28 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,7 +27,9 @@ 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;
@@ -50,6 +52,8 @@ 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;
 
@@ -73,10 +77,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);
-                    final byte[] saslResponse;
-                    
+                    byte[] saslResponse;
+
                     if (saslObject instanceof byte[]) {
                         saslResponse = (byte[]) saslObject;
                     } else if(saslObject instanceof String) {
@@ -88,7 +92,10 @@ 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()) {
@@ -127,6 +134,24 @@ 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();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fb62cada/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
index 144da1b..3e1b7e9 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthIntegrateTest.java
@@ -129,7 +129,6 @@ public class GremlinServerAuthIntegrateTest extends AbstractGremlinServerIntegra
         } catch(Exception ex) {
             final Throwable root = ExceptionUtils.getRootCause(ex);
             assertEquals(GSSException.class, root.getClass());
-            assertThat(root.getMessage(), startsWith("Invalid name provided"));
         } finally {
             cluster.close();
         }
@@ -167,7 +166,7 @@ public class GremlinServerAuthIntegrateTest extends AbstractGremlinServerIntegra
             cluster.close();
         }
     }
-    
+
     @Test
     public void shouldAuthenticateWithPlainTextOverJSONSerialization() throws Exception {
         final Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON).credentials("stephen", "password").create();
@@ -195,7 +194,7 @@ public class GremlinServerAuthIntegrateTest extends AbstractGremlinServerIntegra
             cluster.close();
         }
     }
-    
+
     @Test
     public void shouldAuthenticateAndWorkWithVariablesOverJsonSerialization() throws Exception {
         final Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON).credentials("stephen", "password").create();
@@ -205,14 +204,14 @@ public class GremlinServerAuthIntegrateTest extends AbstractGremlinServerIntegra
             Map vertex = (Map) client.submit("v=graph.addVertex(\"name\", \"stephen\")").all().get().get(0).getObject();
             Map<String, List<Map>> properties = (Map) vertex.get("properties");
             assertEquals("stephen", properties.get("name").get(0).get("value"));
-            
+
             final Map vpName = (Map)client.submit("v.property('name')").all().get().get(0).getObject();
             assertEquals("stephen", vpName.get("value"));
         } finally {
             cluster.close();
         }
     }
-    
+
     @Test
     public void shouldAuthenticateAndWorkWithVariablesOverGraphSONSerialization() throws Exception {
         final Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON_V1D0).credentials("stephen", "password").create();
@@ -222,7 +221,7 @@ public class GremlinServerAuthIntegrateTest extends AbstractGremlinServerIntegra
             Map vertex = (Map) client.submit("v=graph.addVertex('name', 'stephen')").all().get().get(0).getObject();
             Map<String, List<Map>> properties = (Map) vertex.get("properties");
             assertEquals("stephen", properties.get("name").get(0).get("value"));
-            
+
             final Map vpName = (Map)client.submit("v.property('name')").all().get().get(0).getObject();
             assertEquals("stephen", vpName.get("value"));
         } finally {


[3/4] incubator-tinkerpop git commit: Updated CHANGELOG CTR

Posted by sp...@apache.org.
Updated CHANGELOG CTR


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

Branch: refs/heads/tp31
Commit: efd9042916d734e7157fad4e8a274869d15ebb21
Parents: fd9c35d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 20 16:29:14 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 20 16:47:06 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/efd90429/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index b63b28c..4d2e1d4 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 
 * Fixed bug where transaction managed sessions were not properly rolling back transactions for exceptions encountered during script evaluation.
 * Fixed bug in `:uninstall` command if the default `/ext` directory was not used.
+* Added support to Gremlin Driver to allow either plain text or GSSAPI SASL authentication allowing the client to pass the SASL mechanism in the request.
 * Improved dryRun functionality for the docs processor. It's now possible to dry run (or full run) only specific files.
 
 [[release-3-1-2-incubating]]