You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-issues@hadoop.apache.org by "Daryn Sharp (JIRA)" <ji...@apache.org> on 2012/11/13 01:31:13 UTC

[jira] [Updated] (HADOOP-8999) SASL negotiation is flawed

     [ 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