HDFS-11730: libhdfs++: RpcConnection should handle authorization error call id. Contributed by James Clampffer
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b584e34f Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b584e34f Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b584e34f Branch: refs/heads/HDFS-8707 Commit: b584e34f2f626c72b1a632bfc82da1247ff438d8 Parents: fdb88eb Author: James <[email protected]> Authored: Wed May 3 12:03:29 2017 -0400 Committer: James Clampffer <[email protected]> Committed: Thu Mar 22 17:19:47 2018 -0400 ---------------------------------------------------------------------- .../src/main/native/libhdfspp/include/hdfspp/status.h | 2 ++ .../src/main/native/libhdfspp/lib/common/status.cc | 13 +++++++++++++ .../native/libhdfspp/lib/rpc/rpc_connection_impl.cc | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/b584e34f/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 d2c32b2..6fc00b1 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 @@ -44,6 +44,8 @@ class Status { static Status Error(const char *error_message); static Status AuthenticationFailed(); static Status AuthenticationFailed(const char *msg); + static Status AuthorizationFailed(); + static Status AuthorizationFailed(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/b584e34f/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 590a036..5903553 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 @@ -143,6 +143,19 @@ Status Status::AuthenticationFailed(const char *msg) { return Status(kAuthenticationFailed, formatted.c_str()); } +Status Status::AuthorizationFailed() { + return Status::AuthorizationFailed(nullptr); +} + +Status Status::AuthorizationFailed(const char *msg) { + std::string formatted = "AuthorizationFailed"; + if(msg) { + formatted += ": "; + formatted += msg; + } + return Status(kPermissionDenied, formatted.c_str()); +} + Status Status::Canceled() { return Status(kOperationCanceled, "Operation canceled"); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/b584e34f/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc index 7accaf8..1012a37 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc @@ -175,9 +175,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()); + LOG_WARN(kRPC, << "RPC response with Unknown call id " << (int32_t)h.callid()); if((int32_t)h.callid() == RpcEngine::kCallIdSasl) { return Status::AuthenticationFailed("You have an unsecured client connecting to a secured server"); + } else if((int32_t)h.callid() == RpcEngine::kCallIdAuthorizationFailed) { + return Status::AuthorizationFailed("RPC call id indicates an authorization failure"); } else { return Status::Error("Rpc response with unknown call id"); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
