You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2020/06/23 09:03:54 UTC
[hbase] branch branch-2.2 updated: HBASE-24579: Failed SASL
authentication does not result in an exception on client side (#1951)
This is an automated email from the ASF dual-hosted git repository.
wchevreuil pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.2 by this push:
new 76ed6e9 HBASE-24579: Failed SASL authentication does not result in an exception on client side (#1951)
76ed6e9 is described below
commit 76ed6e905ffd486e7c53f369b634abd1461f40fa
Author: BukrosSzabolcs <bu...@gmail.com>
AuthorDate: Tue Jun 23 11:03:38 2020 +0200
HBASE-24579: Failed SASL authentication does not result in an exception on client side (#1951)
Signed-off-by: Wellington Chevreuil <wc...@apache.org>
Signed-off-by: Viraj Jasani <vj...@apache.org>
---
.../hadoop/hbase/security/HBaseSaslRpcClient.java | 10 ++++++++
.../hbase/security/TestHBaseSaslRpcClient.java | 29 ++++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java
index 37d3cdd..06f0adb 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java
@@ -144,6 +144,16 @@ public class HBaseSaslRpcClient extends AbstractHBaseSaslRpcClient {
inStream.readFully(saslToken);
}
}
+
+ try {
+ readStatus(inStream);
+ }
+ catch (IOException e){
+ if(e instanceof RemoteException){
+ LOG.debug("Sasl connection failed: ", e);
+ throw e;
+ }
+ }
if (LOG.isDebugEnabled()) {
LOG.debug("SASL client context established. Negotiated QoP: "
+ saslClient.getNegotiatedProperty(Sasl.QOP));
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
index 5e97ada..c3db8b5 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
@@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.DataInputBuffer;
import org.apache.hadoop.io.DataOutputBuffer;
+import org.apache.hadoop.io.WritableUtils;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.TokenIdentifier;
import org.apache.log4j.Level;
@@ -308,4 +309,32 @@ public class TestHBaseSaslRpcClient {
private Token<? extends TokenIdentifier> createTokenMock() {
return mock(Token.class);
}
+
+ @Test(expected = IOException.class)
+ public void testFailedEvaluateResponse() throws IOException {
+ //prep mocking the SaslClient
+ HBaseSaslRpcClient rpcClient = new HBaseSaslRpcClient(AuthMethod.DIGEST,
+ createTokenMockWithCredentials("principal", "password"), "principal", false) {
+ @Override
+ public SaslClient createDigestSaslClient(String[] mechanismNames,
+ String saslDefaultRealm, CallbackHandler saslClientCallbackHandler)
+ throws IOException {
+ return Mockito.mock(SaslClient.class);
+ }
+ };
+
+ //simulate getting an error from a failed saslServer.evaluateResponse
+ DataOutputBuffer errorBuffer = new DataOutputBuffer();
+ errorBuffer.writeInt(SaslStatus.ERROR.state);
+ WritableUtils.writeString(errorBuffer, IOException.class.getName());
+ WritableUtils.writeString(errorBuffer, "Invalid Token");
+
+ DataInputBuffer in = new DataInputBuffer();
+ in.reset(errorBuffer.getData(), 0, errorBuffer.getLength());
+ DataOutputBuffer out = new DataOutputBuffer();
+
+ //simulate that authentication exchange has completed quickly after sending the token
+ Mockito.when(rpcClient.saslClient.isComplete()).thenReturn(true);
+ rpcClient.saslConnect(in, out);
+ }
}