[ 
https://issues.apache.org/jira/browse/TINKERPOP3-855?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dylan Millikin updated TINKERPOP3-855:
--------------------------------------
    Description: 
The documentation states :
{quote}The password should be an encoded sequence of UTF-8 bytes{quote}

Thus the {{SaslAuthenticationHandler}} expects to receive a {{byte[]}} type var.
 
However, using gremlin-server with {{GraphSonMessageSerializer}}, if I send the 
payload with the sasl argument (say {{\x00stephen\x00password}}) in response to 
a gremlin-server {{407}} authentication challenge, I will get the following 
error:

{code}
java.lang.ClassCastException: java.lang.String cannot be cast to [B
        at 
org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler.channelRead(SaslAuthenticationHandler.java:74)
{code}

This seems "normal" in that Json does not support any binary dataType and the 
sasl argument will automatically be converted to {{String}}.

I quickly tested a correction locally by changing [this 
line|https://github.com/apache/incubator-tinkerpop/blob/tp30/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java#L74]
 to :
{code}
final String saslString = (String) 
requestMessage.getArgs().get(Tokens.ARGS_SASL);
final byte[] saslResponse = saslString.getBytes(Charset.forName("UTF-8"));{code}

This is clearly a breaking change, but it solved the Json issue. 

If you have any ideas on the way you want to go with this (or If I'm totally 
doing something wrong) let me know. I could probably make a PR for this.

  was:
The documentation states :
{quote}The password should be an encoded sequence of UTF-8 bytes{quote}

Thus the {{SaslAuthenticationHandler}} expects to receive a {{byte[]}} type var.
 
However, using gremlin-server with {{GraphSonMessageSerializer}}, if I send the 
payload with the sasl argument (say {{\x00stephen\x00password}}) in response to 
a gremlin-server {{407}} authentication challenge, I will get the following 
error:

{code}
java.lang.ClassCastException: java.lang.String cannot be cast to [B
        at 
org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler.channelRead(SaslAuthenticationHandler.java:74)
{code}

This seems "normal" in that Json does not support any binary dataType and the 
sasl argument will automatically be converted to {{String}}.

I quickly tested a correction locally by changing [this 
line|https://github.com/apache/incubator-tinkerpop/blob/tp30/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java#L74]
 to :
{code}
final String saslString = new 
String(requestMessage.getArgs().get(Tokens.ARGS_SASL));
final byte[] saslResponse = saslString.getBytes(Charset.forName("UTF-8"));{code}

And this seems to work (though clearly not the cleanest because of the 
potential roundtrip). I haven't run the full test suit but I would expect this 
to pass as it shouldn't be BC breaking.

If you have any other ideas (or If I'm totally doing something wrong) let me 
know. I could probably make a PR for this.


> sasl authentication type error due to Json format
> -------------------------------------------------
>
>                 Key: TINKERPOP3-855
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP3-855
>             Project: TinkerPop 3
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.0.1-incubating
>            Reporter: Dylan Millikin
>            Assignee: stephen mallette
>
> The documentation states :
> {quote}The password should be an encoded sequence of UTF-8 bytes{quote}
> Thus the {{SaslAuthenticationHandler}} expects to receive a {{byte[]}} type 
> var.
>  
> However, using gremlin-server with {{GraphSonMessageSerializer}}, if I send 
> the payload with the sasl argument (say {{\x00stephen\x00password}}) in 
> response to a gremlin-server {{407}} authentication challenge, I will get the 
> following error:
> {code}
> java.lang.ClassCastException: java.lang.String cannot be cast to [B
>       at 
> org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler.channelRead(SaslAuthenticationHandler.java:74)
> {code}
> This seems "normal" in that Json does not support any binary dataType and the 
> sasl argument will automatically be converted to {{String}}.
> I quickly tested a correction locally by changing [this 
> line|https://github.com/apache/incubator-tinkerpop/blob/tp30/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java#L74]
>  to :
> {code}
> final String saslString = (String) 
> requestMessage.getArgs().get(Tokens.ARGS_SASL);
> final byte[] saslResponse = 
> saslString.getBytes(Charset.forName("UTF-8"));{code}
> This is clearly a breaking change, but it solved the Json issue. 
> If you have any ideas on the way you want to go with this (or If I'm totally 
> doing something wrong) let me know. I could probably make a PR for this.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to