You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2013/02/12 22:49:06 UTC

svn commit: r1445405 - /hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java

Author: tedyu
Date: Tue Feb 12 21:49:06 2013
New Revision: 1445405

URL: http://svn.apache.org/r1445405
Log:
HBASE-7814 Port HBASE-6963 'unable to run hbck on a secure cluster' to 0.94


Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java?rev=1445405&r1=1445404&r2=1445405&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java Tue Feb 12 21:49:06 2013
@@ -23,6 +23,7 @@ import java.io.DataInputStream;
 import java.io.EOFException;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -1200,7 +1201,19 @@ public abstract class FSUtils {
    */
   public static void checkAccess(UserGroupInformation ugi, FileStatus file,
       FsAction action) throws AccessControlException {
-    if (ugi.getUserName().equals(file.getOwner())) {
+    // See HBASE-7814. UserGroupInformation from hadoop 0.20.x may not support getShortUserName().
+    String username;
+    try {
+      Method m = UserGroupInformation.class.getMethod("getShortUserName", new Class<?>[]{});
+      username = (String) m.invoke(ugi);
+    } catch (NoSuchMethodException e) {
+      username = ugi.getUserName();
+    } catch (InvocationTargetException e) {
+      username = ugi.getUserName();      
+    } catch (IllegalAccessException iae) {
+      username = ugi.getUserName();      
+    }
+    if (username.equals(file.getOwner())) {
       if (file.getPermission().getUserAction().implies(action)) {
         return;
       }
@@ -1212,7 +1225,7 @@ public abstract class FSUtils {
       return;
     }
     throw new AccessControlException("Permission denied:" + " action=" + action
-        + " path=" + file.getPath() + " user=" + ugi.getUserName());
+        + " path=" + file.getPath() + " user=" + username);
   }
 
   private static boolean contains(String[] groups, String user) {