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

Daryn Sharp updated HADOOP-8999:
--------------------------------

    Attachment: HADOOP-8999.patch

Fixing this issue "correctly" by always ending the SASL handshake with a 
success/failure introduces an rpc incompatibility.  Purely for short-term 
compatibility, the rpc server will send a final success response to the client 
if and only if the SASL method is PLAIN.  The client code is also changed to 
ensure that at least one rpc response is always read.

The reason why the currently supported KERBEROS and DIGEST methods work is they 
exchange multiple challenge/responses.  This guarantees an exception response 
or a switch-to-simple message will be read since they will tend to occur on the 
first exchange.

The PLAIN method however involves a single exchange.  The client sends an 
initial response and considers itself done - which means no rpc response will 
be read.  The server handles the response and also considers itself done.  
However, the server may have responded with an exception or a switch to simple 
message.  But the client won't read it until the next proxy call where it will 
generate a protobuf exception.

Hence why this patch forces the server to send a success response for PLAIN, 
and to require the client to read at least one rpc so it can read the success 
or error message from the server.

In the long term, the server should always send a final success response for 
authentication.  Ideally there should also be an intermediate RPC state for 
SASL to disambiguate if negotiation is occurring or has completed.
                
> SASL negotiation is flawed
> --------------------------
>
>                 Key: HADOOP-8999
>                 URL: https://issues.apache.org/jira/browse/HADOOP-8999
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: ipc
>            Reporter: Daryn Sharp
>            Assignee: Daryn Sharp
>         Attachments: HADOOP-8999.patch
>
>
> The RPC protocol used for SASL negotiation is flawed.  The server's RPC 
> response contains the next SASL challenge token, but a SASL server can return 
> null (I'm done) or a N-many byte challenge.  The server currently will not 
> send a RPC success response to the client if the SASL server returns null, 
> which causes the client to hang until it times out.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to