Repository: incubator-ranger
Updated Branches:
  refs/heads/ranger-0.6 4a64c4fa1 -> ecfa86caa


RANGER-1126 : Authorization checks for non existent file/directory should not 
be recursive in Ranger Hive authorizer


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/ecfa86ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/ecfa86ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/ecfa86ca

Branch: refs/heads/ranger-0.6
Commit: ecfa86caa1fea9e58c8d175bb48e667a64077397
Parents: 4a64c4f
Author: rmani <rm...@hortonworks.com>
Authored: Wed Jul 27 14:40:28 2016 -0700
Committer: rmani <rm...@hortonworks.com>
Committed: Mon Oct 24 16:28:31 2016 -0700

----------------------------------------------------------------------
 .../hive/authorizer/RangerHiveAuthorizer.java   | 22 ++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ecfa86ca/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
----------------------------------------------------------------------
diff --git 
a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
 
b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
index 9329020..ae4c237 100644
--- 
a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
+++ 
b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
@@ -1006,14 +1006,24 @@ public class RangerHiveAuthorizer extends 
RangerHiveAuthorizerBase {
             try {
                 Path       filePath   = new Path(uri);
                 FileSystem fs         = FileSystem.get(filePath.toUri(), conf);
-                // Path       path       = 
FileUtils.getPathOrParentThatExists(fs, filePath);
-                // FileStatus fileStatus = fs.getFileStatus(path);
-                FileStatus fileStatus = 
FileUtils.getPathOrParentThatExists(fs, filePath);
+                FileStatus[] filestat = fs.globStatus(filePath);
 
-                if (FileUtils.isOwnerOfFileHierarchy(fs, fileStatus, 
userName)) {
+                if(filestat != null && filestat.length > 0) {
+                    ret = true;
+
+                    for(FileStatus file : filestat) {
+                        ret = FileUtils.isOwnerOfFileHierarchy(fs, file, 
userName) ||
+                              FileUtils.isActionPermittedForFileHierarchy(fs, 
file, userName, action);
+
+                        if(! ret) {
+                            break;
+                        }
+                     }
+                } else { // if given path does not exist then check for parent
+                    FileStatus file = FileUtils.getPathOrParentThatExists(fs, 
filePath);
+
+                    FileUtils.checkFileAccessWithImpersonation(fs, file, 
action, userName);
                     ret = true;
-                } else {
-                    ret = FileUtils.isActionPermittedForFileHierarchy(fs, 
fileStatus, userName, action);
                 }
             } catch(Exception excp) {
                 LOG.error("Error getting permissions for " + uri, excp);

Reply via email to