HDFS-10685: libhdfs++: return explicit error when non-secured client connects 
to secured server.  Contributed by Kai Jiang.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/58de2df8
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/58de2df8
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/58de2df8

Branch: refs/heads/trunk
Commit: 58de2df8606cd598b41785c0c5c6bf98d66ebc15
Parents: 69d5534
Author: James <[email protected]>
Authored: Wed Jan 11 10:54:50 2017 -0500
Committer: James Clampffer <[email protected]>
Committed: Thu Mar 22 17:19:47 2018 -0400

----------------------------------------------------------------------
 .../src/main/native/libhdfspp/include/hdfspp/status.h    |  1 +
 .../src/main/native/libhdfspp/lib/common/status.cc       | 11 ++++++++++-
 .../main/native/libhdfspp/lib/rpc/cyrus_sasl_engine.cc   |  2 +-
 .../src/main/native/libhdfspp/lib/rpc/rpc_connection.cc  |  6 +++++-
 4 files changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/58de2df8/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/include/hdfspp/status.h
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/include/hdfspp/status.h
 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/include/hdfspp/status.h
index 39cf8c6..d2c32b2 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/include/hdfspp/status.h
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/include/hdfspp/status.h
@@ -43,6 +43,7 @@ class Status {
   static Status Exception(const char *exception_class_name, const char 
*exception_details);
   static Status Error(const char *error_message);
   static Status AuthenticationFailed();
+  static Status AuthenticationFailed(const char *msg);
   static Status Canceled();
   static Status PathNotFound(const char *msg);
   static Status InvalidOffset(const char *msg);

http://git-wip-us.apache.org/repos/asf/hadoop/blob/58de2df8/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/status.cc
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/status.cc
 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/status.cc
index 15d304a..590a036 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/status.cc
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/common/status.cc
@@ -131,7 +131,16 @@ Status Status::Error(const char *error_message) {
 }
 
 Status Status::AuthenticationFailed() {
-  return Status(kAuthenticationFailed, "Authentication failed");
+  return Status::AuthenticationFailed(nullptr);
+}
+
+Status Status::AuthenticationFailed(const char *msg) {
+  std::string formatted = "AuthenticationFailed";
+  if(msg) {
+    formatted += ": ";
+    formatted += msg;
+  }
+  return Status(kAuthenticationFailed, formatted.c_str());
 }
 
 Status Status::Canceled() {

http://git-wip-us.apache.org/repos/asf/hadoop/blob/58de2df8/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/cyrus_sasl_engine.cc
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/cyrus_sasl_engine.cc
 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/cyrus_sasl_engine.cc
index ca82305..69b2267 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/cyrus_sasl_engine.cc
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/cyrus_sasl_engine.cc
@@ -91,7 +91,7 @@ Status make_status(int rc) {
   if (rc != SASL_OK &&
       rc != SASL_CONTINUE &&
       rc != SASL_INTERACT) {
-     return Status::Error(errStr(rc).c_str());
+     return Status::AuthenticationFailed(errStr(rc).c_str());
   }
   return Status::OK();
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/58de2df8/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.cc
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.cc
 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.cc
index 2068614..f629d1f 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.cc
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.cc
@@ -293,7 +293,11 @@ Status 
RpcConnection::HandleRpcResponse(std::shared_ptr<Response> response) {
   auto req = RemoveFromRunningQueue(h.callid());
   if (!req) {
     LOG_WARN(kRPC, << "RPC response with Unknown call id " << h.callid());
-    return Status::Error("Rpc response with unknown call id");
+    if((int32_t)h.callid() == RpcEngine::kCallIdSasl) {
+      return Status::AuthenticationFailed("You have an unsecured client 
connecting to a secured server");
+    } else {
+      return Status::Error("Rpc response with unknown call id");
+    }
   }
 
   Status status;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to