This is an automated email from the ASF dual-hosted git repository.

abhay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 48b594c  RANGER-2330: Ensure that policy/resource based searches are 
security-zone aware
48b594c is described below

commit 48b594c0aedede17b6bb241155a3a7426c1c92cc
Author: Abhay Kulkarni <>
AuthorDate: Wed Feb 13 09:13:36 2019 -0800

    RANGER-2330: Ensure that policy/resource based searches are security-zone 
aware
---
 .../plugin/policyengine/RangerPolicyEngine.java    |   2 +-
 .../policyengine/RangerPolicyEngineImpl.java       | 275 +++++++++++++++++----
 .../ranger/plugin/service/RangerAuthContext.java   |   2 +-
 .../java/org/apache/ranger/rest/ServiceREST.java   |  12 +-
 4 files changed, 229 insertions(+), 62 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngine.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngine.java
index 02f0d24..63fcbd0 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngine.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngine.java
@@ -80,7 +80,7 @@ public interface RangerPolicyEngine {
 
        List<RangerPolicy> getExactMatchPolicies(RangerAccessResource resource, 
Map<String, Object> evalContext);
 
-       List<RangerPolicy> getExactMatchPolicies(Map<String, 
RangerPolicyResource> resources, Map<String, Object> evalContext);
+       List<RangerPolicy> getExactMatchPolicies(RangerPolicy policy, 
Map<String, Object> evalContext);
 
        List<RangerPolicy> getMatchingPolicies(RangerAccessResource resource);
 
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
index 04286eb..b29f152 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
@@ -362,27 +362,49 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                        LOG.debug("==> 
RangerPolicyEngineImpl.getResourceACLs(request=" + request + ")");
                }
 
-               RangerPerfTracer perf = null;
+               RangerResourceACLs ret  = new RangerResourceACLs();
+
+               RangerPerfTracer   perf = null;
 
                
if(RangerPerfTracer.isPerfTraceEnabled(PERF_POLICYENGINE_GET_ACLS_LOG)) {
                        perf = 
RangerPerfTracer.getPerfTracer(PERF_POLICYENGINE_GET_ACLS_LOG, 
"RangerPolicyEngine.getResourceACLs(requestHashCode=" + 
request.getResource().getAsString() + ")");
                }
 
-               RangerResourceACLs          ret                      = new 
RangerResourceACLs();
-               Set<RangerTagForEval>       tags                     = 
RangerAccessRequestUtil.getRequestTagsFromContext(request.getContext());
-               List<PolicyEvaluatorForTag> tagPolicyEvaluators      = 
tagPolicyRepository == null ? null : 
tagPolicyRepository.getLikelyMatchPolicyEvaluators(tags, 
RangerPolicy.POLICY_TYPE_ACCESS, null);
-               List<RangerPolicyEvaluator> resourcePolicyEvaluators = 
policyRepository.getLikelyMatchPolicyEvaluators(request.getResource(), 
RangerPolicy.POLICY_TYPE_ACCESS);
-               List<RangerPolicyEvaluator> allEvaluators;
-               Map<Long, RangerPolicyResourceMatcher.MatchType> 
tagMatchTypeMap            = null;
-               Set<Long>                                        
policyIdForTemporalTags    = null;
+               String zoneName = trieMap == null ? null : 
getMatchedZoneName(request.getResource());
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
+
+               Collection<RangerPolicyRepository> matchedRepositories = new 
ArrayList<>();
+
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       RangerPolicyRepository policyRepository = 
policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       } else {
+                               matchedRepositories.add(policyRepository);
+                       }
+               } else {
+                       // Search all security zones
+                       matchedRepositories.add(this.policyRepository);
+                       
matchedRepositories.addAll(this.policyRepositories.values());
+               }
+
+               List<RangerPolicyEvaluator>                      allEvaluators  
         = new ArrayList<>();
+               Map<Long, RangerPolicyResourceMatcher.MatchType> 
tagMatchTypeMap         = null;
+               Set<Long>                                        
policyIdForTemporalTags = null;
+
+               Set<RangerTagForEval> tags = 
RangerAccessRequestUtil.getRequestTagsFromContext(request.getContext());
+               List<PolicyEvaluatorForTag> tagPolicyEvaluators = 
tagPolicyRepository == null ? null : 
tagPolicyRepository.getLikelyMatchPolicyEvaluators(tags, 
RangerPolicy.POLICY_TYPE_ACCESS, null);
 
                if (CollectionUtils.isNotEmpty(tagPolicyEvaluators)) {
-                       allEvaluators   = new ArrayList<>();
                        tagMatchTypeMap = new HashMap<>();
 
                        for (PolicyEvaluatorForTag tagEvaluator : 
tagPolicyEvaluators) {
                                RangerPolicyEvaluator evaluator = 
tagEvaluator.getEvaluator();
-                               RangerTagForEval      tag       = 
tagEvaluator.getTag();
+                               RangerTagForEval tag = tagEvaluator.getTag();
 
                                allEvaluators.add(evaluator);
                                tagMatchTypeMap.put(evaluator.getId(), 
tag.getMatchType());
@@ -395,13 +417,16 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                                        
policyIdForTemporalTags.add(evaluator.getId());
                                }
                        }
+               }
+
+               for (RangerPolicyRepository policyRepository : 
matchedRepositories) {
+                       List<RangerPolicyEvaluator> resourcePolicyEvaluators = 
policyRepository.getLikelyMatchPolicyEvaluators(request.getResource(), 
RangerPolicy.POLICY_TYPE_ACCESS);
 
                        allEvaluators.addAll(resourcePolicyEvaluators);
-                       
allEvaluators.sort(RangerPolicyEvaluator.EVAL_ORDER_COMPARATOR);
-               } else {
-                       allEvaluators = resourcePolicyEvaluators;
                }
 
+               allEvaluators.sort(RangerPolicyEvaluator.EVAL_ORDER_COMPARATOR);
+
                if (CollectionUtils.isNotEmpty(allEvaluators)) {
                        Integer policyPriority = null;
 
@@ -585,17 +610,44 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> RangerPolicyEngineImpl.isAccessAllowed(" 
+ resource + ", " + user + ", " + userGroups + ", " + accessType + ")");
                }
+               boolean ret = false;
 
                RangerPerfTracer perf = null;
 
                
if(RangerPerfTracer.isPerfTraceEnabled(PERF_POLICYENGINE_REQUEST_LOG)) {
                        perf = 
RangerPerfTracer.getPerfTracer(PERF_POLICYENGINE_REQUEST_LOG, 
"RangerPolicyEngine.isAccessAllowed(user=" + user + ",accessType=" + accessType 
+ "resource=" + resource.getAsString() + ")");
                }
-               boolean ret = false;
 
-               for (RangerPolicyEvaluator evaluator : 
policyRepository.getLikelyMatchPolicyEvaluators(resource, 
RangerPolicy.POLICY_TYPE_ACCESS)) {
-                       ret = evaluator.isAccessAllowed(resource, user, 
userGroups, accessType);
+               String zoneName = trieMap == null ? null : 
getMatchedZoneName(resource);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
+
+               Collection<RangerPolicyRepository> matchedRepositories = new 
ArrayList<>();
+
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       RangerPolicyRepository policyRepository = 
policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       } else {
+                               matchedRepositories.add(policyRepository);
+                       }
+               } else {
+                       // Search all security zones
+                       matchedRepositories.add(this.policyRepository);
+                       
matchedRepositories.addAll(this.policyRepositories.values());
+               }
+
+               for (RangerPolicyRepository policyRepository : 
matchedRepositories) {
+                       for (RangerPolicyEvaluator evaluator : 
policyRepository.getLikelyMatchPolicyEvaluators(resource, 
RangerPolicy.POLICY_TYPE_ACCESS)) {
+                               ret = evaluator.isAccessAllowed(resource, user, 
userGroups, accessType);
 
+                               if (ret) {
+                                       break;
+                               }
+                       }
                        if (ret) {
                                break;
                        }
@@ -628,9 +680,36 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                        perf = 
RangerPerfTracer.getPerfTracer(PERF_POLICYENGINE_REQUEST_LOG, 
"RangerPolicyEngine.isAccessAllowed(user=" + user + "," + userGroups + 
",accessType=" + accessType + ")");
                }
 
-               for (RangerPolicyEvaluator evaluator : 
policyRepository.getPolicyEvaluators()) {
-                       ret = evaluator.isAccessAllowed(policy, user, 
userGroups, accessType);
+               String zoneName = trieMap == null ? null : policy.getZoneName();
 
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
+
+               Collection<RangerPolicyRepository> matchedRepositories = new 
ArrayList<>();
+
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       RangerPolicyRepository policyRepository = 
policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       } else {
+                               matchedRepositories.add(policyRepository);
+                       }
+               } else {
+                       // Search all security zones
+                       matchedRepositories.add(this.policyRepository);
+                       
matchedRepositories.addAll(this.policyRepositories.values());
+               }
+
+               for (RangerPolicyRepository policyRepository : 
matchedRepositories) {
+                       for (RangerPolicyEvaluator evaluator : 
policyRepository.getPolicyEvaluators()) {
+                               ret = evaluator.isAccessAllowed(policy, user, 
userGroups, accessType);
+
+                               if (ret) {
+                                       break;
+                               }
+                       }
                        if (ret) {
                                break;
                        }
@@ -656,13 +735,31 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
 
                List<RangerPolicy> ret = null;
 
-               for (RangerPolicyEvaluator evaluator : 
policyRepository.getPolicyEvaluators()) {
-                       if (evaluator.isCompleteMatch(resource, evalContext)) {
-                               if(ret == null) {
-                                       ret = new ArrayList<>();
-                               }
+               RangerPolicyRepository policyRepository = this.policyRepository;
+
+               String zoneName = trieMap == null ? null : 
getMatchedZoneName(resource);
 
-                               ret.add(evaluator.getPolicy());
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
+
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       policyRepository = policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       }
+               }
+
+               if (policyRepository != null) {
+                       for (RangerPolicyEvaluator evaluator : 
policyRepository.getPolicyEvaluators()) {
+                               if (evaluator.isCompleteMatch(resource, 
evalContext)) {
+                                       if (ret == null) {
+                                               ret = new ArrayList<>();
+                                       }
+
+                                       ret.add(evaluator.getPolicy());
+                               }
                        }
                }
 
@@ -678,25 +775,44 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
        */
 
        @Override
-       public List<RangerPolicy> getExactMatchPolicies(Map<String, 
RangerPolicyResource> resources, Map<String, Object> evalContext) {
+       public List<RangerPolicy> getExactMatchPolicies(RangerPolicy policy, 
Map<String, Object> evalContext) {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> 
RangerPolicyEngineImpl.getExactMatchPolicies(" + resources + ", " + evalContext 
+ ")");
+                       LOG.debug("==> 
RangerPolicyEngineImpl.getExactMatchPolicies(" + policy + ", " + evalContext + 
")");
                }
 
                List<RangerPolicy> ret = null;
+               RangerPolicyRepository policyRepository = this.policyRepository;
 
-               for (RangerPolicyEvaluator evaluator : 
policyRepository.getPolicyEvaluators()) {
-                       if (evaluator.isCompleteMatch(resources, evalContext)) {
-                               if(ret == null) {
-                                       ret = new ArrayList<>();
-                               }
+               String zoneName = trieMap == null ? null : policy.getZoneName();
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
 
-                               ret.add(evaluator.getPolicy());
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       policyRepository = policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       }
+               }
+
+               if (policyRepository != null) {
+                       Map<String, RangerPolicyResource> resources = 
policy.getResources();
+
+                       for (RangerPolicyEvaluator evaluator : 
policyRepository.getPolicyEvaluators()) {
+                               if (evaluator.isCompleteMatch(resources, 
evalContext)) {
+                                       if (ret == null) {
+                                               ret = new ArrayList<>();
+                                       }
+
+                                       ret.add(evaluator.getPolicy());
+                               }
                        }
                }
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== 
RangerPolicyEngineImpl.getExactMatchPolicies(" + resources + ", " + evalContext 
+ "): " + ret);
+                       LOG.debug("<== 
RangerPolicyEngineImpl.getExactMatchPolicies(" + policy + ", " + evalContext + 
"): " + ret);
                }
 
                return ret;
@@ -733,14 +849,36 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
 
                List<RangerPolicy> ret = new ArrayList<>();
 
+               String zoneName = trieMap == null ? null : 
getMatchedZoneName(request.getResource());
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
+
+               Collection<RangerPolicyRepository> matchedRepositories = new 
ArrayList<>();
+
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       RangerPolicyRepository policyRepository = 
policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       } else {
+                               matchedRepositories.add(policyRepository);
+                       }
+               } else {
+                       // Search all security zones
+                       matchedRepositories.add(this.policyRepository);
+                       
matchedRepositories.addAll(this.policyRepositories.values());
+               }
+
                if (hasTagPolicies(tagPolicyRepository)) {
                        Set<RangerTagForEval> tags = 
RangerAccessRequestUtil.getRequestTagsFromContext(request.getContext());
 
                        if (CollectionUtils.isNotEmpty(tags)) {
                                for (RangerTagForEval tag : tags) {
-                                       RangerAccessRequest         
tagEvalRequest            = new RangerTagAccessRequest(tag, 
tagPolicyRepository.getServiceDef(), request);
-                                       RangerAccessResource        tagResource 
              = tagEvalRequest.getResource();
-                                       List<RangerPolicyEvaluator> 
likelyEvaluators          = 
tagPolicyRepository.getLikelyMatchPolicyEvaluators(tagResource);
+                                       RangerAccessRequest tagEvalRequest = 
new RangerTagAccessRequest(tag, tagPolicyRepository.getServiceDef(), request);
+                                       RangerAccessResource tagResource = 
tagEvalRequest.getResource();
+                                       List<RangerPolicyEvaluator> 
likelyEvaluators = 
tagPolicyRepository.getLikelyMatchPolicyEvaluators(tagResource);
 
                                        for (RangerPolicyEvaluator evaluator : 
likelyEvaluators) {
                                                RangerPolicyResourceMatcher 
matcher = evaluator.getPolicyResourceMatcher();
@@ -754,19 +892,23 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                        }
                }
 
-               if (hasResourcePolicies(policyRepository)) {
-                       List<RangerPolicyEvaluator> likelyEvaluators = 
policyRepository.getLikelyMatchPolicyEvaluators(request.getResource());
+               for (RangerPolicyRepository policyRepository : 
matchedRepositories) {
 
-                       for (RangerPolicyEvaluator evaluator : 
likelyEvaluators) {
-                               RangerPolicyResourceMatcher matcher = 
evaluator.getPolicyResourceMatcher();
-                               if (matcher != null &&
-                                               (request.isAccessTypeAny() ? 
matcher.isMatch(request.getResource(), 
RangerPolicyResourceMatcher.MatchScope.ANY, null) : 
matcher.isMatch(request.getResource(), null))) {
-                                       ret.add(evaluator.getPolicy());
+                       if (hasResourcePolicies(policyRepository)) {
+                               List<RangerPolicyEvaluator> likelyEvaluators = 
policyRepository.getLikelyMatchPolicyEvaluators(request.getResource());
+
+                               for (RangerPolicyEvaluator evaluator : 
likelyEvaluators) {
+                                       RangerPolicyResourceMatcher matcher = 
evaluator.getPolicyResourceMatcher();
+                                       if (matcher != null &&
+                                                       
(request.isAccessTypeAny() ? matcher.isMatch(request.getResource(), 
RangerPolicyResourceMatcher.MatchScope.ANY, null) : 
matcher.isMatch(request.getResource(), null))) {
+                                               ret.add(evaluator.getPolicy());
+                                       }
                                }
-                       }
 
+                       }
                }
 
+
                if (LOG.isDebugEnabled()) {
                        LOG.debug("<== 
RangerPolicyEngineImpl.getMatchingPolicies(" + request + ") : " + ret.size());
                }
@@ -785,13 +927,35 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
 
                RangerResourceAccessInfo ret = new 
RangerResourceAccessInfo(request);
 
+               String zoneName = trieMap == null ? null : 
getMatchedZoneName(request.getResource());
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("zoneName:[" + zoneName + "]");
+               }
+
+               Collection<RangerPolicyRepository> matchedRepositories = new 
ArrayList<>();
+
+               if (StringUtils.isNotEmpty(zoneName)) {
+                       RangerPolicyRepository policyRepository = 
policyRepositories.get(zoneName);
+
+                       if (policyRepository == null) {
+                               LOG.error("policyRepository for zoneName:[" + 
zoneName + "] is null!! ERROR!");
+                       } else {
+                               matchedRepositories.add(policyRepository);
+                       }
+               } else {
+                       // Search all security zones
+                       matchedRepositories.add(this.policyRepository);
+                       
matchedRepositories.addAll(this.policyRepositories.values());
+               }
+
                List<RangerPolicyEvaluator> tagPolicyEvaluators = 
tagPolicyRepository == null ? null : tagPolicyRepository.getPolicyEvaluators();
 
                if (CollectionUtils.isNotEmpty(tagPolicyEvaluators)) {
 
                        Set<RangerTagForEval> tags = 
RangerAccessRequestUtil.getRequestTagsFromContext(request.getContext());
 
-                       if(CollectionUtils.isNotEmpty(tags)) {
+                       if (CollectionUtils.isNotEmpty(tags)) {
                                for (RangerTagForEval tag : tags) {
                                        RangerAccessRequest tagEvalRequest = 
new RangerTagAccessRequest(tag, tagPolicyRepository.getServiceDef(), request);
 
@@ -804,16 +968,19 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                        }
                }
 
-               List<RangerPolicyEvaluator> resPolicyEvaluators = 
policyRepository.getLikelyMatchPolicyEvaluators(request.getResource(), 
RangerPolicy.POLICY_TYPE_ACCESS);
+               for (RangerPolicyRepository policyRepository : 
matchedRepositories) {
 
-               if(CollectionUtils.isNotEmpty(resPolicyEvaluators)) {
-                       for (RangerPolicyEvaluator evaluator : 
resPolicyEvaluators) {
-                               evaluator.getResourceAccessInfo(request, ret);
+                       List<RangerPolicyEvaluator> resPolicyEvaluators = 
policyRepository.getLikelyMatchPolicyEvaluators(request.getResource(), 
RangerPolicy.POLICY_TYPE_ACCESS);
+
+                       if (CollectionUtils.isNotEmpty(resPolicyEvaluators)) {
+                               for (RangerPolicyEvaluator evaluator : 
resPolicyEvaluators) {
+                                       
evaluator.getResourceAccessInfo(request, ret);
+                               }
                        }
-               }
 
-               ret.getAllowedUsers().removeAll(ret.getDeniedUsers());
-               ret.getAllowedGroups().removeAll(ret.getDeniedGroups());
+                       ret.getAllowedUsers().removeAll(ret.getDeniedUsers());
+                       ret.getAllowedGroups().removeAll(ret.getDeniedGroups());
+               }
 
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== 
RangerPolicyEngineImpl.getResourceAccessInfo(" + request + "): " + ret);
@@ -823,7 +990,7 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
        }
 
        /*
-        * This API is used by test-code
+        * This API is used by test-code; checks only policies within default 
security-zone
         */
 
        @Override
@@ -858,7 +1025,7 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
        }
 
        /*
-       * This API is used only by test-code
+       * This API is used only by test-code; checks only policies within 
default security-zone
        */
 
        @Override
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
index 265d7a6..6869d6f 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerAuthContext.java
@@ -234,7 +234,7 @@ public class RangerAuthContext implements 
RangerPolicyEngine {
     }
 
     @Override
-    public List<RangerPolicy> getExactMatchPolicies(Map<String, 
RangerPolicy.RangerPolicyResource> resources, Map<String, Object> evalContext) {
+    public List<RangerPolicy> getExactMatchPolicies(RangerPolicy policy, 
Map<String, Object> evalContext) {
         return null;
     }
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 6dc6962..a43d076 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -1646,7 +1646,7 @@ public class ServiceREST {
                                }
 
                                String user = request.getRemoteUser();
-                               RangerPolicy existingPolicy = 
getExactMatchPolicyForResource(policy.getService(), policy.getResources(), 
StringUtils.isNotBlank(user) ? user :"admin");
+                               RangerPolicy existingPolicy = 
getExactMatchPolicyForResource(policy, StringUtils.isNotBlank(user) ? user 
:"admin");
 
                                if (existingPolicy == null) {
                                        ret = createPolicy(policy, null);
@@ -2964,18 +2964,18 @@ public class ServiceREST {
                return ret;
        }
 
-       private RangerPolicy getExactMatchPolicyForResource(String serviceName, 
Map<String, RangerPolicyResource> resources, String user) throws Exception {
+       private RangerPolicy getExactMatchPolicyForResource(RangerPolicy 
policy, String user) throws Exception {
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("==> 
ServiceREST.getExactMatchPolicyForResource(" + resources + ", " + user + ")");
+                       LOG.debug("==> 
ServiceREST.getExactMatchPolicyForResource(" + policy + ", " + user + ")");
                }
 
                RangerPolicy       ret          = null;
-               RangerPolicyEngine policyEngine = getPolicyEngine(serviceName);
+               RangerPolicyEngine policyEngine = 
getPolicyEngine(policy.getService());
 
                Map<String, Object> evalContext = new HashMap<String, Object>();
                RangerAccessRequestUtil.setCurrentUserInContext(evalContext, 
user);
 
-               List<RangerPolicy> policies     = policyEngine != null ? 
policyEngine.getExactMatchPolicies(resources, evalContext) : null;
+               List<RangerPolicy> policies     = policyEngine != null ? 
policyEngine.getExactMatchPolicies(policy, evalContext) : null;
 
                if(CollectionUtils.isNotEmpty(policies)) {
                        // at this point, ret is a policy in policy-engine; the 
caller might update the policy (for grant/revoke); so get a copy from the store
@@ -2983,7 +2983,7 @@ public class ServiceREST {
                }
 
                if(LOG.isDebugEnabled()) {
-                       LOG.debug("<== 
ServiceREST.getExactMatchPolicyForResource(" + resources + ", " + user + "): " 
+ ret);
+                       LOG.debug("<== 
ServiceREST.getExactMatchPolicyForResource(" + policy + ", " + user + "): " + 
ret);
                }
 
                return ret;

Reply via email to