[ 
https://issues.apache.org/jira/browse/DRILL-4335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15957896#comment-15957896
 ] 

ASF GitHub Bot commented on DRILL-4335:
---------------------------------------

Github user sudheeshkatkam commented on a diff in the pull request:

    https://github.com/apache/drill/pull/773#discussion_r109957575
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/rpc/security/AuthenticationOutcomeListener.java
 ---
    @@ -243,4 +247,43 @@ public SaslMessage process(SaslChallengeContext 
context) throws Exception {
           }
         }
       }
    +
    +  private static void handleSuccess(SaslChallengeContext context) throws 
SaslException {
    +    final ClientConnection connection = context.connection;
    +    final SaslClient saslClient = connection.getSaslClient();
    +
    +    if (connection.isEncrypted()) {
    +      try {
    +        // Check if connection was marked for being secure then verify for 
negotiated QOP value for
    +        // correctness.
    +        final String negotiatedQOP = 
saslClient.getNegotiatedProperty(Sasl.QOP).toString();
    +        assert 
(negotiatedQOP.equals(SaslProperties.QualityOfProtection.PRIVACY.getSaslQop()));
    +
    +        // Update the rawWrapChunkSize with the negotiated buffer size 
since we cannot call encode with more than
    +        // negotiated size of buffer.
    +        final int negotiatedRawSendSize = Integer.parseInt(saslClient
    +                                                            
.getNegotiatedProperty(SaslProperties.WRAP_RAW_SEND_SIZE)
    +                                                            .toString());
    +        if(negotiatedRawSendSize <= 0) {
    +          throw new SaslException(String.format("Negotiated rawSendSize: 
%d is invalid. Please check the configured " +
    +              "value of sasl.encryption.encodesize. It might be configured 
to a very small value.",
    +            negotiatedRawSendSize));
    +        }
    +        connection.setRawWrapSendSize(negotiatedRawSendSize);
    +        connection.addSecurityHandlers();
    +      } catch (Exception e) {
    +        throw new SaslException(String.format("Unexpected failure while 
retrieving negotiated property values (%s)",
    +          e.getMessage()), e);
    +      }
    +    } else {
    +      // Encryption is not required hence we don't need to hold on to 
saslClient object.
    +      if (saslClient != null) {
    --- End diff --
    
    Although `dispose` is documented to be idempotent,  should `dispose` be 
called only once (at connection closure) to keep this logic in one place?


> Apache Drill should support network encryption
> ----------------------------------------------
>
>                 Key: DRILL-4335
>                 URL: https://issues.apache.org/jira/browse/DRILL-4335
>             Project: Apache Drill
>          Issue Type: New Feature
>            Reporter: Keys Botzum
>            Assignee: Sorabh Hamirwasia
>              Labels: security
>         Attachments: ApacheDrillEncryptionUsingSASLDesign.pdf
>
>
> This is clearly related to Drill-291 but wanted to make explicit that this 
> needs to include network level encryption and not just authentication. This 
> is particularly important for the client connection to Drill which will often 
> be sending passwords in the clear until there is encryption.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to