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 a4afbe9  RANGER-2396: Inconsistency in policy operations in a disabled 
Ranger service
a4afbe9 is described below

commit a4afbe9ac9067435aecbd7ac370c6b99c0b7593f
Author: Abhay Kulkarni <[email protected]>
AuthorDate: Sun Apr 7 15:24:33 2019 -0700

    RANGER-2396: Inconsistency in policy operations in a disabled Ranger service
---
 .../policyengine/RangerPolicyEngineImpl.java       |  38 +++---
 .../apache/ranger/plugin/util/ServicePolicies.java |   7 +-
 .../java/org/apache/ranger/biz/ServiceDBStore.java | 143 ++++++++++++---------
 .../ranger/common/RangerServicePoliciesCache.java  |  25 ++--
 4 files changed, 120 insertions(+), 93 deletions(-)

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 5e10e0d..be256a9 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
@@ -165,26 +165,32 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                        this.policyRepository = other.policyRepository;
                        other.isPolicyRepositoryShared = true;
                }
-               if 
(CollectionUtils.isNotEmpty(defaultZoneDeltasForTagPolicies)) {
+               if (servicePolicies.getTagPolicies() == null) {
+                       this.tagPolicyRepository = null;
                        if (other.tagPolicyRepository != null) {
-                               this.tagPolicyRepository = new 
RangerPolicyRepository(other.tagPolicyRepository, 
defaultZoneDeltasForTagPolicies, policyVersion);
-                       } else {
-                               // Only creates are expected
-                               List<RangerPolicy> tagPolicies = new 
ArrayList<>();
-                               for (RangerPolicyDelta delta : 
defaultZoneDeltasForTagPolicies) {
-                                       if (delta.getChangeType() == 
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE) {
-                                               
tagPolicies.add(delta.getPolicy());
-                                       } else {
-                                               LOG.warn("Expected 
changeType:[" + RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE + "], found 
policy-change-delta:[" + delta +"]");
+                               other.isTagPolicyRepositoryShared = false;
+                       }
+               } else {
+                       if 
(CollectionUtils.isNotEmpty(defaultZoneDeltasForTagPolicies)) {
+                               if (other.tagPolicyRepository != null) {
+                                       this.tagPolicyRepository = new 
RangerPolicyRepository(other.tagPolicyRepository, 
defaultZoneDeltasForTagPolicies, policyVersion);
+                               } else {
+                                       // Only creates are expected
+                                       List<RangerPolicy> tagPolicies = new 
ArrayList<>();
+                                       for (RangerPolicyDelta delta : 
defaultZoneDeltasForTagPolicies) {
+                                               if (delta.getChangeType() == 
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE) {
+                                                       
tagPolicies.add(delta.getPolicy());
+                                               } else {
+                                                       LOG.warn("Expected 
changeType:[" + RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE + "], found 
policy-change-delta:[" + delta + "]");
+                                               }
                                        }
+                                       
servicePolicies.getTagPolicies().setPolicies(tagPolicies);
+                                       this.tagPolicyRepository = new 
RangerPolicyRepository(other.policyRepository.getAppId(), 
servicePolicies.getTagPolicies(), other.policyRepository.getOptions(), 
servicePolicies.getServiceDef(), servicePolicies.getServiceName());
                                }
-                               
servicePolicies.getTagPolicies().setPolicies(tagPolicies);
-                               this.tagPolicyRepository = new 
RangerPolicyRepository(other.policyRepository.getAppId(), 
servicePolicies.getTagPolicies(), other.policyRepository.getOptions(), 
servicePolicies.getServiceDef(), servicePolicies.getServiceName());
-
+                       } else {
+                               this.tagPolicyRepository = 
other.tagPolicyRepository;
+                               other.isTagPolicyRepositoryShared = true;
                        }
-               } else {
-                       this.tagPolicyRepository = other.tagPolicyRepository;
-                       other.isTagPolicyRepositoryShared = true;
                }
 
                List<RangerContextEnricher> tmpList;
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/ServicePolicies.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/ServicePolicies.java
index 3ce9212..cbd2cb0 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/ServicePolicies.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/ServicePolicies.java
@@ -341,7 +341,7 @@ public class ServicePolicies implements 
java.io.Serializable {
                                        ;
                }
        }
-       private static ServicePolicies copyHeader(ServicePolicies source) {
+       static public ServicePolicies copyHeader(ServicePolicies source) {
                ServicePolicies ret = new ServicePolicies();
 
                ret.setServiceName(source.getServiceName());
@@ -350,8 +350,9 @@ public class ServicePolicies implements 
java.io.Serializable {
                ret.setAuditMode(source.getAuditMode());
                ret.setServiceDef(source.getServiceDef());
                ret.setPolicyUpdateTime(source.getPolicyUpdateTime());
-               ret.setPolicyDeltas(Collections.emptyList());
+               ret.setSecurityZones(source.getSecurityZones());
                ret.setPolicies(Collections.emptyList());
+               ret.setPolicyDeltas(null);
                if (source.getTagPolicies() != null) {
                        TagPolicies tagPolicies = 
copyHeader(source.getTagPolicies());
                        ret.setTagPolicies(tagPolicies);
@@ -360,7 +361,7 @@ public class ServicePolicies implements 
java.io.Serializable {
                return ret;
        }
 
-       private static TagPolicies copyHeader(TagPolicies source) {
+       static public TagPolicies copyHeader(TagPolicies source) {
                TagPolicies ret = new TagPolicies();
 
                ret.setServiceName(source.getServiceName());
diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 4b1c0c4..574166c 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -2435,13 +2435,42 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                        ret = 
RangerServicePoliciesCache.getInstance().getServicePolicies(serviceName, 
serviceDbObj.getId(), lastKnownVersion, needsBackwardCompatibility, this);
                }
 
+               if (LOG.isDebugEnabled()) {
+                       RangerServicePoliciesCache.getInstance().dump();
+               }
+
                if (ret != null && lastKnownVersion != null && 
lastKnownVersion.equals(ret.getPolicyVersion())) {
                        // ServicePolicies are not changed
                        ret = null;
                }
 
-               if (LOG.isDebugEnabled()) {
-                       RangerServicePoliciesCache.getInstance().dump();
+               if (ret != null) {
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("Checking if resource-service:[" + 
ret.getServiceName() +"] is disabled");
+                       }
+                       if (!serviceDbObj.getIsenabled()) {
+                               ret = ServicePolicies.copyHeader(ret);
+                       } else if (ret.getTagPolicies() != null) {
+                               if (LOG.isDebugEnabled()) {
+                                       LOG.debug("Checking if tag-service:[" + 
ret.getTagPolicies().getServiceName() +"] is disabled");
+                               }
+                               String tagServiceName = 
ret.getTagPolicies().getServiceName();
+                               if (StringUtils.isNotEmpty(tagServiceName)) {
+                                       XXService tagService = 
daoMgr.getXXService().findByName(tagServiceName);
+                                       if (tagService == null || 
!tagService.getIsenabled()) {
+                                               if (LOG.isDebugEnabled()) {
+                                                       
LOG.debug("tag-service:[" + tagServiceName +"] is disabled");
+                                               }
+                                               ServicePolicies copy = 
ServicePolicies.copyHeader(ret);
+                                               copy.setTagPolicies(null);
+                                               List<RangerPolicy> copyPolicies 
= ret.getPolicies() != null ? new ArrayList<>(ret.getPolicies()) : null;
+                                               List<RangerPolicyDelta> 
copyPolicyDeltas = ret.getPolicyDeltas() != null ? new 
ArrayList<>(ret.getPolicyDeltas()) : null;
+                                               copy.setPolicies(copyPolicies);
+                                               
copy.setPolicyDeltas(copyPolicyDeltas);
+                                               ret = copy;
+                                       }
+                               }
+                       }
                }
 
                if (LOG.isDebugEnabled()) {
@@ -2499,78 +2528,72 @@ public class ServiceDBStore extends 
AbstractServiceStore {
 
                String auditMode = getAuditMode(serviceType, serviceName);
 
-               if (serviceDbObj.getIsenabled()) {
-
-                       XXService tagServiceDbObj = null;
-                       RangerServiceDef tagServiceDef = null;
-                       XXServiceVersionInfo tagServiceVersionInfoDbObj= null;
-
-                       if (serviceDbObj.getTagService() != null) {
-                               tagServiceDbObj = 
daoMgr.getXXService().getById(serviceDbObj.getTagService());
-                               if (tagServiceDbObj != null && 
!tagServiceDbObj.getIsenabled()) {
-                                       tagServiceDbObj = null;
-                               }
-                       }
-
-                       if (tagServiceDbObj != null) {
-                               tagServiceDef = 
getServiceDef(tagServiceDbObj.getType());
+               XXService tagServiceDbObj = null;
+               RangerServiceDef tagServiceDef = null;
+               XXServiceVersionInfo tagServiceVersionInfoDbObj= null;
 
-                               if (tagServiceDef == null) {
-                                       throw new Exception("service-def does 
not exist. id=" + tagServiceDbObj.getType());
-                               }
+               if (serviceDbObj.getTagService() != null) {
+                       tagServiceDbObj = 
daoMgr.getXXService().getById(serviceDbObj.getTagService());
+               }
 
-                               tagServiceVersionInfoDbObj = 
daoMgr.getXXServiceVersionInfo().findByServiceId(serviceDbObj.getTagService());
+               if (tagServiceDbObj != null) {
+                       tagServiceDef = 
getServiceDef(tagServiceDbObj.getType());
 
-                               if (tagServiceVersionInfoDbObj == null) {
-                                       LOG.warn("serviceVersionInfo does not 
exist. name=" + tagServiceDbObj.getName());
-                               }
+                       if (tagServiceDef == null) {
+                               throw new Exception("service-def does not 
exist. id=" + tagServiceDbObj.getType());
                        }
 
-                       if (LOG.isDebugEnabled()) {
-                               LOG.debug("Support for incremental policy 
updates enabled using \"ranger.admin.supports.policy.deltas\" configuation 
parameter :[" + SUPPORTS_POLICY_DELTAS +"]");
-                       }
+                       tagServiceVersionInfoDbObj = 
daoMgr.getXXServiceVersionInfo().findByServiceId(serviceDbObj.getTagService());
 
-                       if (SUPPORTS_POLICY_DELTAS) {
-                               ret = getServicePoliciesWithDeltas(serviceDef, 
serviceDbObj, tagServiceDef, tagServiceDbObj, lastKnownVersion);
+                       if (tagServiceVersionInfoDbObj == null) {
+                               LOG.warn("serviceVersionInfo does not exist. 
name=" + tagServiceDbObj.getName());
                        }
+               }
 
-                       if (ret != null) {
-                               ret.setPolicyVersion(serviceVersionInfoDbObj == 
null ? null : serviceVersionInfoDbObj.getPolicyVersion());
-                               ret.setPolicyUpdateTime(serviceVersionInfoDbObj 
== null ? null : serviceVersionInfoDbObj.getPolicyUpdateTime());
-                               ret.setAuditMode(auditMode);
-                               if (ret.getTagPolicies() != null) {
-                                       
ret.getTagPolicies().setPolicyVersion(tagServiceVersionInfoDbObj == null ? null 
: tagServiceVersionInfoDbObj.getPolicyVersion());
-                                       
ret.getTagPolicies().setPolicyUpdateTime(tagServiceVersionInfoDbObj == null ? 
null : tagServiceVersionInfoDbObj.getPolicyUpdateTime());
-                                       
ret.getTagPolicies().setAuditMode(auditMode);
-                               }
-                       } else if (!getOnlyDeltas) {
-                               ServicePolicies.TagPolicies tagPolicies = null;
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("Support for incremental policy updates 
enabled using \"ranger.admin.supports.policy.deltas\" configuation parameter 
:[" + SUPPORTS_POLICY_DELTAS +"]");
+               }
 
-                               if (tagServiceDbObj != null) {
+               if (SUPPORTS_POLICY_DELTAS) {
+                       ret = getServicePoliciesWithDeltas(serviceDef, 
serviceDbObj, tagServiceDef, tagServiceDbObj, lastKnownVersion);
+               }
 
-                                       tagPolicies = new 
ServicePolicies.TagPolicies();
+               if (ret != null) {
+                       ret.setPolicyVersion(serviceVersionInfoDbObj == null ? 
null : serviceVersionInfoDbObj.getPolicyVersion());
+                       ret.setPolicyUpdateTime(serviceVersionInfoDbObj == null 
? null : serviceVersionInfoDbObj.getPolicyUpdateTime());
+                       ret.setAuditMode(auditMode);
+                       if (ret.getTagPolicies() != null) {
+                               
ret.getTagPolicies().setPolicyVersion(tagServiceVersionInfoDbObj == null ? null 
: tagServiceVersionInfoDbObj.getPolicyVersion());
+                               
ret.getTagPolicies().setPolicyUpdateTime(tagServiceVersionInfoDbObj == null ? 
null : tagServiceVersionInfoDbObj.getPolicyUpdateTime());
+                               ret.getTagPolicies().setAuditMode(auditMode);
+                       }
+               } else if (!getOnlyDeltas) {
+                       ServicePolicies.TagPolicies tagPolicies = null;
 
-                                       
tagPolicies.setServiceId(tagServiceDbObj.getId());
-                                       
tagPolicies.setServiceName(tagServiceDbObj.getName());
-                                       
tagPolicies.setPolicyVersion(tagServiceVersionInfoDbObj == null ? null : 
tagServiceVersionInfoDbObj.getPolicyVersion());
-                                       
tagPolicies.setPolicyUpdateTime(tagServiceVersionInfoDbObj == null ? null : 
tagServiceVersionInfoDbObj.getPolicyUpdateTime());
-                                       
tagPolicies.setPolicies(getServicePoliciesFromDb(tagServiceDbObj));
-                                       
tagPolicies.setServiceDef(tagServiceDef);
-                                       tagPolicies.setAuditMode(auditMode);
-                               }
-                               List<RangerPolicy> policies = 
getServicePoliciesFromDb(serviceDbObj);
+                       if (tagServiceDbObj != null) {
 
-                               ret = new ServicePolicies();
+                               tagPolicies = new ServicePolicies.TagPolicies();
 
-                               ret.setServiceId(serviceDbObj.getId());
-                               ret.setServiceName(serviceDbObj.getName());
-                               ret.setPolicyVersion(serviceVersionInfoDbObj == 
null ? null : serviceVersionInfoDbObj.getPolicyVersion());
-                               ret.setPolicyUpdateTime(serviceVersionInfoDbObj 
== null ? null : serviceVersionInfoDbObj.getPolicyUpdateTime());
-                               ret.setPolicies(policies);
-                               ret.setServiceDef(serviceDef);
-                               ret.setAuditMode(auditMode);
-                               ret.setTagPolicies(tagPolicies);
+                               
tagPolicies.setServiceId(tagServiceDbObj.getId());
+                               
tagPolicies.setServiceName(tagServiceDbObj.getName());
+                               
tagPolicies.setPolicyVersion(tagServiceVersionInfoDbObj == null ? null : 
tagServiceVersionInfoDbObj.getPolicyVersion());
+                               
tagPolicies.setPolicyUpdateTime(tagServiceVersionInfoDbObj == null ? null : 
tagServiceVersionInfoDbObj.getPolicyUpdateTime());
+                               
tagPolicies.setPolicies(getServicePoliciesFromDb(tagServiceDbObj));
+                               tagPolicies.setServiceDef(tagServiceDef);
+                               tagPolicies.setAuditMode(auditMode);
                        }
+                       List<RangerPolicy> policies = 
getServicePoliciesFromDb(serviceDbObj);
+
+                       ret = new ServicePolicies();
+
+                       ret.setServiceId(serviceDbObj.getId());
+                       ret.setServiceName(serviceDbObj.getName());
+                       ret.setPolicyVersion(serviceVersionInfoDbObj == null ? 
null : serviceVersionInfoDbObj.getPolicyVersion());
+                       ret.setPolicyUpdateTime(serviceVersionInfoDbObj == null 
? null : serviceVersionInfoDbObj.getPolicyUpdateTime());
+                       ret.setPolicies(policies);
+                       ret.setServiceDef(serviceDef);
+                       ret.setAuditMode(auditMode);
+                       ret.setTagPolicies(tagPolicies);
                }
 
                if (LOG.isDebugEnabled()) {
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
 
b/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
index 86b3c00..8942b4e 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/common/RangerServicePoliciesCache.java
@@ -65,25 +65,22 @@ public class RangerServicePoliciesCache {
        }
 
        public void dump() {
-               if (LOG.isDebugEnabled()) {
-
-                       final Set<String> serviceNames;
-
-                       synchronized (this) {
-                               serviceNames = servicePoliciesMap.keySet();
-                       }
+               final Set<String> serviceNames;
 
-                       if (CollectionUtils.isNotEmpty(serviceNames)) {
+               synchronized (this) {
+                       serviceNames = servicePoliciesMap.keySet();
+               }
 
-                               for (String serviceName : serviceNames) {
-                                       final ServicePoliciesWrapper 
cachedServicePoliciesWrapper;
+               if (CollectionUtils.isNotEmpty(serviceNames)) {
 
-                                       synchronized (this) {
-                                               cachedServicePoliciesWrapper = 
servicePoliciesMap.get(serviceName);
-                                       }
-                                       LOG.debug("serviceName:" + serviceName 
+ ", Cached-MetaData:" + cachedServicePoliciesWrapper);
+                       for (String serviceName : serviceNames) {
+                               final ServicePoliciesWrapper 
cachedServicePoliciesWrapper;
 
+                               synchronized (this) {
+                                       cachedServicePoliciesWrapper = 
servicePoliciesMap.get(serviceName);
                                }
+                               LOG.debug("serviceName:" + serviceName + ", 
Cached-MetaData:" + cachedServicePoliciesWrapper);
+
                        }
                }
        }

Reply via email to