[ https://issues.apache.org/jira/browse/DRILL-4335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15991393#comment-15991393 ]
ASF GitHub Bot commented on DRILL-4335: --------------------------------------- Github user sohami commented on a diff in the pull request: https://github.com/apache/drill/pull/773#discussion_r113378601 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/rpc/security/ServerAuthenticationHandler.java --- @@ -251,25 +255,67 @@ void process(SaslResponseContext<S, T> context) throws Exception { private static <S extends ServerConnection<S>, T extends EnumLite> void handleSuccess(final SaslResponseContext<S, T> context, final SaslMessage.Builder challenge, final SaslServer saslServer) throws IOException { - context.connection.changeHandlerTo(context.requestHandler); - context.connection.finalizeSaslSession(); - context.sender.send(new Response(context.saslResponseType, challenge.build())); - // setup security layers here.. + final S connection = context.connection; + connection.changeHandlerTo(context.requestHandler); + connection.finalizeSaslSession(); + + // Check the negotiated property before sending the response back to client + try { + final String negotiatedQOP = saslServer.getNegotiatedProperty(Sasl.QOP).toString(); + final String expectedQOP = (connection.isEncryptionEnabled()) + ? SaslProperties.QualityOfProtection.PRIVACY.getSaslQop() + : SaslProperties.QualityOfProtection.AUTHENTICATION.getSaslQop(); + + if (!(negotiatedQOP.equals(expectedQOP))) { + throw new SaslException(String.format("Mismatch in negotiated QOP value: %s and Expected QOP value: %s", + negotiatedQOP, expectedQOP)); + } + + // Update the rawWrapSendSize with the negotiated rawSendSize since we cannot call encode with more than the + // negotiated size of buffer + if (connection.isEncryptionEnabled()) { + final int negotiatedRawSendSize = Integer.parseInt( + saslServer.getNegotiatedProperty(Sasl.RAW_SEND_SIZE).toString()); + if (negotiatedRawSendSize <= 0) { + throw new SaslException(String.format("Negotiated rawSendSize: %d is invalid. Please check the configured " + + "value of encryption.sasl.max_wrapped_size. It might be configured to a very small value.", + negotiatedRawSendSize)); + } + connection.setWrapSizeLimit(negotiatedRawSendSize); --- End diff -- Good catch!. Previous logic of having a new EncryptionContext object with each connection was taking care of it. Didn't realized this while making the change. Will have a separate EncryptionContext object for each connection and initialize it with the passed object in constructor. > 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)