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) {