[ 
https://issues.apache.org/jira/browse/HBASE-7623?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13557527#comment-13557527
 ] 

Gary Helmling commented on HBASE-7623:
--------------------------------------

Okay, my concern was more that this might be a temporary condition where the 
user is not initially available but then could be available later, potentially 
indicating a deeper problem, rather than running in an environment with no 
user.  Is there a more specific exception to handle in the Windows case?

>From what I can see, if hadoop.security.authorization is set to "true", even 
>with simple auth, we may get an NPE server side when we call down to 
>{{ServiceAuthorizationManager.authorize()}} if the user is null.

We could modify {{HBaseServer.authorize()}} to do something like the following:
{code:java}
if (authorize) {
+  if (user == null) {
+    // when configured for authorization, some username is required
+    throw new AuthorizationException("Unable to authorize, no user is 
associated with connection");
+  }
  Class<?> protocol = null;
  try {
    protocol = getProtocolClass(connection.getProtocol(), getConf());
  } catch (ClassNotFoundException cfne) {
    throw new AuthorizationException("Unknown protocol: " +
                                     connection.getProtocol());
  }
-  authManager.authorize(user != null ? user : null,
-    protocol, getConf(), addr);
+  authManager.authorize(user, protocol, getConf(), addr);
}
{code}

It seems like the right approach that a user is required if we're configured to 
do authorization.  The second change is just a cleanup since the conditional 
does nothing in that case.

If we're not configured to do authorization and only doing simple auth, then a 
null user looks to be okay.
                
> Username is not available for HConnectionManager to use in HConnectionKey
> -------------------------------------------------------------------------
>
>                 Key: HBASE-7623
>                 URL: https://issues.apache.org/jira/browse/HBASE-7623
>             Project: HBase
>          Issue Type: Improvement
>          Components: Client, security
>            Reporter: Jimmy Xiang
>            Assignee: Jimmy Xiang
>            Priority: Minor
>         Attachments: trunk-7623.patch
>
>
> Sometimes, some non-IOException prevents User.getCurrent() to get a username. 
>  It makes it impossible to create a HConnection.  We should catch all 
> exception here:
> {noformat}
>       try {
>         User currentUser = User.getCurrent();
>         if (currentUser != null) {
>           username = currentUser.getName();
>         }
>       } catch (IOException ioe) {
>         LOG.warn("Error obtaining current user, skipping username in 
> HConnectionKey",
>             ioe);
>       }
> {noformat}
> Not just IOException, so that client can move forward.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to