HBASE-23722 Real user might be null in non-proxy-user case
Closes #1085
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Viraj Jasani <vjasani@apache.org>
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java
index 8d20171..752003d 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/BuiltInProviderSelector.java
@@ -29,6 +29,7 @@
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.util.Pair;
import org.apache.hadoop.io.Text;
+import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.TokenIdentifier;
import org.apache.yetus.audience.InterfaceAudience;
@@ -124,8 +125,11 @@
}
}
// Unwrap PROXY auth'n method if that's what we have coming in.
- if (user.getUGI().hasKerberosCredentials() ||
- user.getUGI().getRealUser().hasKerberosCredentials()) {
+ final UserGroupInformation currentUser = user.getUGI();
+ // May be null if Hadoop AuthenticationMethod is PROXY
+ final UserGroupInformation realUser = currentUser.getRealUser();
+ if (currentUser.hasKerberosCredentials() ||
+ (realUser != null && realUser.hasKerberosCredentials())) {
return new Pair<>(krbAuth, null);
}
// This indicates that a client is requesting some authentication mechanism which the servers