Repository: ranger
Updated Branches:
  refs/heads/master f7230f70a -> 1b4e78b0d


RANGER-1737: Fixed RANGER-1181 by providing correct set of parameters to Hdfs 
Native Authorizer in case of fall-back


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

Branch: refs/heads/master
Commit: 1b4e78b0dcfad74b7fd2baea16364b7daf32159e
Parents: f7230f7
Author: Abhay Kulkarni <akulka...@hortonworks.com>
Authored: Wed Aug 16 13:14:32 2017 -0700
Committer: Abhay Kulkarni <akulka...@hortonworks.com>
Committed: Wed Aug 16 13:14:32 2017 -0700

----------------------------------------------------------------------
 .../hadoop/RangerHdfsAuthorizer.java            | 110 +++++++++++--------
 1 file changed, 65 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/1b4e78b0/hdfs-agent/src/main/java/org/apache/ranger/authorization/hadoop/RangerHdfsAuthorizer.java
----------------------------------------------------------------------
diff --git 
a/hdfs-agent/src/main/java/org/apache/ranger/authorization/hadoop/RangerHdfsAuthorizer.java
 
b/hdfs-agent/src/main/java/org/apache/ranger/authorization/hadoop/RangerHdfsAuthorizer.java
index f82fd57..97fd5cd 100644
--- 
a/hdfs-agent/src/main/java/org/apache/ranger/authorization/hadoop/RangerHdfsAuthorizer.java
+++ 
b/hdfs-agent/src/main/java/org/apache/ranger/authorization/hadoop/RangerHdfsAuthorizer.java
@@ -279,7 +279,7 @@ public class RangerHdfsAuthorizer extends 
INodeAttributeProvider {
                                                if (authzStatus == 
AuthzStatus.NOT_DETERMINED) {
                                                        authzStatus = 
checkDefaultEnforcer(fsOwner, superGroup, ugi, inodeAttrs, inodes,
                                                                                
        pathByNameArr, snapshotId, path, ancestorIndex, doCheckOwner,
-                                                                               
        ancestorAccess, FsAction.NONE, FsAction.NONE, FsAction.NONE, 
ignoreEmptyDir,
+                                                                               
        ancestorAccess, null, null, null, ignoreEmptyDir,
                                                                                
        isTraverseOnlyCheck, ancestor, parent, inode, auditHandler);
                                                }
                                        }
@@ -292,7 +292,7 @@ public class RangerHdfsAuthorizer extends 
INodeAttributeProvider {
                                                if (authzStatus == 
AuthzStatus.NOT_DETERMINED) {
                                                        authzStatus = 
checkDefaultEnforcer(fsOwner, superGroup, ugi, inodeAttrs, inodes,
                                                                                
        pathByNameArr, snapshotId, path, ancestorIndex, doCheckOwner,
-                                                                               
        FsAction.NONE, parentAccess, FsAction.NONE, FsAction.NONE, 
ignoreEmptyDir,
+                                                                               
        null, parentAccess, null, null, ignoreEmptyDir,
                                                                                
        isTraverseOnlyCheck, ancestor, parent, inode, auditHandler);
                                                }
                                        }
@@ -305,7 +305,7 @@ public class RangerHdfsAuthorizer extends 
INodeAttributeProvider {
                                                if (authzStatus == 
AuthzStatus.NOT_DETERMINED) {
                                                        authzStatus = 
checkDefaultEnforcer(fsOwner, superGroup, ugi, inodeAttrs, inodes,
                                                                                
        pathByNameArr, snapshotId, path, ancestorIndex, doCheckOwner,
-                                                                               
        FsAction.NONE, FsAction.NONE, access, FsAction.NONE, ignoreEmptyDir,
+                                                                               
        null, null, access, null, ignoreEmptyDir,
                                                                                
        isTraverseOnlyCheck, ancestor, parent, inode, auditHandler);
                                                }
                                        }
@@ -345,18 +345,12 @@ public class RangerHdfsAuthorizer extends 
INodeAttributeProvider {
                                                        }
                                                }
                                                if (authzStatus == 
AuthzStatus.NOT_DETERMINED) {
-                                                       RangerPerfTracer 
hadoopAuthPerf = null;
-
-                                                       
if(RangerPerfTracer.isPerfTraceEnabled(PERF_HDFSAUTH_REQUEST_LOG)) {
-                                                               hadoopAuthPerf 
= RangerPerfTracer.getPerfTracer(PERF_HDFSAUTH_REQUEST_LOG, 
"defaultEnforcer.checkPermission(path=" + path + ")");
-                                                       }
 
                                                        authzStatus = 
checkDefaultEnforcer(fsOwner, superGroup, ugi, inodeAttrs, inodes,
                                                                                
        pathByNameArr, snapshotId, path, ancestorIndex, doCheckOwner,
-                                                                               
        FsAction.NONE, FsAction.NONE, FsAction.NONE, subAccess, ignoreEmptyDir,
+                                                                               
        null, null, null, subAccess, ignoreEmptyDir,
                                                                                
        isTraverseOnlyCheck, ancestor, parent, inode, auditHandler);
 
-                                                       
RangerPerfTracer.log(hadoopAuthPerf);
                                                }
                                        }
 
@@ -412,50 +406,76 @@ public class RangerHdfsAuthorizer extends 
INodeAttributeProvider {
                                     boolean isTraverseOnlyCheck, INode 
ancestor,
                                                                                
                 INode parent, INode inode, RangerHdfsAuditHandler auditHandler
                                                                                
                 ) throws AccessControlException {
-                           AuthzStatus authzStatus = 
AuthzStatus.NOT_DETERMINED;
-                               if(RangerHdfsPlugin.isHadoopAuthEnabled() && 
defaultEnforcer != null) {
-
-                                       try {
-                                               
defaultEnforcer.checkPermission(fsOwner, superGroup, ugi, inodeAttrs, inodes,
-                                                                               
                                pathByNameArr, snapshotId, path, ancestorIndex, 
doCheckOwner,
-                                                                               
                                ancestorAccess, parentAccess, access, 
subAccess, ignoreEmptyDir);
-
-                                               authzStatus = AuthzStatus.ALLOW;
-                                       } finally {
-                                               if(auditHandler != null) {
-                                                       INode    nodeChecked = 
inode;
-                                                       FsAction action      = 
access;
-                                                       if(isTraverseOnlyCheck) 
{
-                                                               if(nodeChecked 
== null || nodeChecked.isFile()) {
-                                                                       
if(parent != null) {
-                                                                               
nodeChecked = parent;
-                                                                       } else 
if(ancestor != null) {
-                                                                               
nodeChecked = ancestor;
-                                                                       }
-                                                               }
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("==> 
RangerAccessControlEnforcer.checkDefaultEnforcer("
+                                               + "fsOwner=" + fsOwner + "; 
superGroup=" + superGroup + ", inodesCount=" + (inodes != null ? inodes.length 
: 0)
+                                               + ", snapshotId=" + snapshotId 
+ ", path=" + path + ", ancestorIndex=" + ancestorIndex
+                                               + ", doCheckOwner=" + 
doCheckOwner + ", ancestorAccess=" + ancestorAccess + ", parentAccess=" + 
parentAccess
+                                               + ", access=" + access + ", 
subAccess=" + subAccess + ", ignoreEmptyDir=" + ignoreEmptyDir
+                                               + ", isTraverseOnlyCheck=" + 
isTraverseOnlyCheck + ",ancestor=" + (ancestor == null ? null : 
ancestor.getFullPathName())
+                                               + ", parent=" + (parent == null 
? null : parent.getFullPathName()) + ", inode=" + (inode == null ? null : 
inode.getFullPathName())
+                                               + ")");
+                       }
+
+                       AuthzStatus authzStatus = AuthzStatus.NOT_DETERMINED;
+                       if(RangerHdfsPlugin.isHadoopAuthEnabled() && 
defaultEnforcer != null) {
+
+                               RangerPerfTracer hadoopAuthPerf = null;
+
+                               
if(RangerPerfTracer.isPerfTraceEnabled(PERF_HDFSAUTH_REQUEST_LOG)) {
+                                       hadoopAuthPerf = 
RangerPerfTracer.getPerfTracer(PERF_HDFSAUTH_REQUEST_LOG, 
"RangerAccessControlEnforcer.checkDefaultEnforcer(path=" + path + ")");
+                               }
 
-                                                               action = 
FsAction.EXECUTE;
-                                                       } else if(action == 
null || action == FsAction.NONE)  {
-                                                               if(parentAccess 
!= null && parentAccess != FsAction.NONE ) {
+                               try {
+                                       
defaultEnforcer.checkPermission(fsOwner, superGroup, ugi, inodeAttrs, inodes,
+                                                       pathByNameArr, 
snapshotId, path, ancestorIndex, doCheckOwner,
+                                                       ancestorAccess, 
parentAccess, access, subAccess, ignoreEmptyDir);
+
+                                       authzStatus = AuthzStatus.ALLOW;
+                               } finally {
+                                       if (auditHandler != null) {
+                                               INode nodeChecked = inode;
+                                               FsAction action = access;
+                                               if (isTraverseOnlyCheck) {
+                                                       if (nodeChecked == null 
|| nodeChecked.isFile()) {
+                                                               if (parent != 
null) {
                                                                        
nodeChecked = parent;
-                                                                       action  
    = parentAccess;
-                                                               } else 
if(ancestorAccess != null  && ancestorAccess != FsAction.NONE ) {
+                                                               } else if 
(ancestor != null) {
                                                                        
nodeChecked = ancestor;
-                                                                       action  
    = ancestorAccess;
-                                                               } else 
if(subAccess != null && subAccess != FsAction.NONE ) {
-                                                                       action 
= subAccess;
                                                                }
                                                        }
 
-                                                       String pathChecked = 
nodeChecked != null ? nodeChecked.getFullPathName() : path;
-
-                                                       
auditHandler.logHadoopEvent(pathChecked, action, authzStatus == 
AuthzStatus.ALLOW);
+                                                       action = 
FsAction.EXECUTE;
+                                               } else if (action == null || 
action == FsAction.NONE) {
+                                                       if (parentAccess != 
null && parentAccess != FsAction.NONE) {
+                                                               nodeChecked = 
parent;
+                                                               action = 
parentAccess;
+                                                       } else if 
(ancestorAccess != null && ancestorAccess != FsAction.NONE) {
+                                                               nodeChecked = 
ancestor;
+                                                               action = 
ancestorAccess;
+                                                       } else if (subAccess != 
null && subAccess != FsAction.NONE) {
+                                                               action = 
subAccess;
+                                                       }
                                                }
+
+                                               String pathChecked = 
nodeChecked != null ? nodeChecked.getFullPathName() : path;
+
+                                               
auditHandler.logHadoopEvent(pathChecked, action, authzStatus == 
AuthzStatus.ALLOW);
                                        }
-                                        return authzStatus;
+                                       RangerPerfTracer.log(hadoopAuthPerf);
                                }
-                                return authzStatus;
-                }
+                       }
+                       LOG.debug("<== 
RangerAccessControlEnforcer.checkDefaultEnforcer("
+                                       + "fsOwner=" + fsOwner + "; 
superGroup=" + superGroup + ", inodesCount=" + (inodes != null ? inodes.length 
: 0)
+                                       + ", snapshotId=" + snapshotId + ", 
path=" + path + ", ancestorIndex=" + ancestorIndex
+                                       + ", doCheckOwner="+ doCheckOwner + ", 
ancestorAccess=" + ancestorAccess + ", parentAccess=" + parentAccess
+                                       + ", access=" + access + ", subAccess=" 
+ subAccess + ", ignoreEmptyDir=" + ignoreEmptyDir
+                                       + ", isTraverseOnlyCheck=" + 
isTraverseOnlyCheck + ",ancestor=" + (ancestor == null ? null : 
ancestor.getFullPathName())
+                                       + ", parent=" + (parent == null ? null 
: parent.getFullPathName()) + ", inode=" + (inode == null ? null : 
inode.getFullPathName())
+                                       + ") : " + authzStatus );
+
+                       return authzStatus;
+               }
 
                private AuthzStatus isAccessAllowed(INode inode, 
INodeAttributes inodeAttribs, FsAction access, String user, Set<String> groups, 
RangerHdfsPlugin plugin, RangerHdfsAuditHandler auditHandler) {
                        AuthzStatus ret       = null;

Reply via email to