[
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)