You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2023/06/19 07:06:55 UTC
[ranger] branch RANGER-3923 updated: RANGER-4265: updated ServicePolicies to include GDS policies
This is an automated email from the ASF dual-hosted git repository.
madhan pushed a commit to branch RANGER-3923
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/RANGER-3923 by this push:
new a3fc43cfe RANGER-4265: updated ServicePolicies to include GDS policies
a3fc43cfe is described below
commit a3fc43cfeabf9be2e1b3d58502ba6e0f45104fb1
Author: Madhan Neethiraj <ma...@apache.org>
AuthorDate: Sun Jun 18 19:54:51 2023 -0700
RANGER-4265: updated ServicePolicies to include GDS policies
---
.../apache/ranger/plugin/util/ServicePolicies.java | 193 ++++++++++++++++++
.../java/org/apache/ranger/biz/ServiceDBStore.java | 218 ++++++++++++++++-----
2 files changed, 367 insertions(+), 44 deletions(-)
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 e022a1b17..288672a20 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
@@ -63,6 +63,7 @@ public class ServicePolicies implements java.io.Serializable {
private RangerServiceDef serviceDef;
private String auditMode = RangerPolicyEngine.AUDIT_DEFAULT;
private TagPolicies tagPolicies;
+ private GdsPolicies gdsPolicies;
private Map<String, SecurityZoneInfo> securityZones;
private List<RangerPolicyDelta> policyDeltas;
private Map<String, String> serviceConfig;
@@ -168,6 +169,19 @@ public class ServicePolicies implements java.io.Serializable {
this.tagPolicies = tagPolicies;
}
+ /**
+ * @return the gdsPolicies
+ */
+ public ServicePolicies.GdsPolicies getGdsPolicies() {
+ return gdsPolicies;
+ }
+ /**
+ * @param gdsPolicies the gdsPolicies to set
+ */
+ public void setGdsPolicies(ServicePolicies.GdsPolicies gdsPolicies) {
+ this.gdsPolicies = gdsPolicies;
+ }
+
public Map<String, SecurityZoneInfo> getSecurityZones() { return securityZones; }
public void setSecurityZones(Map<String, SecurityZoneInfo> securityZones) {
@@ -195,6 +209,10 @@ public class ServicePolicies implements java.io.Serializable {
tagPolicies.dedupStrings(strTbl);
}
+ if (gdsPolicies != null) {
+ gdsPolicies.dedupStrings(strTbl);
+ }
+
if (securityZones != null) {
for (SecurityZoneInfo securityZoneInfo : securityZones.values()) {
securityZoneInfo.dedupStrings(strTbl);
@@ -216,6 +234,7 @@ public class ServicePolicies implements java.io.Serializable {
+ "policyUpdateTime=" + policyUpdateTime + ", "
+ "policies=" + policies + ", "
+ "tagPolicies=" + tagPolicies + ", "
+ + "gdsPolicies=" + gdsPolicies + ", "
+ "policyDeltas=" + policyDeltas + ", "
+ "serviceDef=" + serviceDef + ", "
+ "auditMode=" + auditMode + ", "
@@ -362,6 +381,142 @@ public class ServicePolicies implements java.io.Serializable {
}
}
+ @JsonAutoDetect(fieldVisibility=Visibility.ANY)
+ @JsonSerialize(include=JsonSerialize.Inclusion.NON_EMPTY)
+ @JsonIgnoreProperties(ignoreUnknown=true)
+ @XmlRootElement
+ @XmlAccessorType(XmlAccessType.FIELD)
+ public static class GdsPolicies implements java.io.Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String serviceName;
+ private Long serviceId;
+ private Long policyVersion;
+ private Date policyUpdateTime;
+ private List<RangerPolicy> policies;
+ private RangerServiceDef serviceDef;
+ private String auditMode = RangerPolicyEngine.AUDIT_DEFAULT;
+ private Map<String, String> serviceConfig;
+
+ /**
+ * @return the serviceName
+ */
+ public String getServiceName() {
+ return serviceName;
+ }
+ /**
+ * @param serviceName the serviceName to set
+ */
+ public void setServiceName(String serviceName) {
+ this.serviceName = serviceName;
+ }
+ /**
+ * @return the serviceId
+ */
+ public Long getServiceId() {
+ return serviceId;
+ }
+ /**
+ * @param serviceId the serviceId to set
+ */
+ public void setServiceId(Long serviceId) {
+ this.serviceId = serviceId;
+ }
+ /**
+ * @return the policyVersion
+ */
+ public Long getPolicyVersion() {
+ return policyVersion;
+ }
+ /**
+ * @param policyVersion the policyVersion to set
+ */
+ public void setPolicyVersion(Long policyVersion) {
+ this.policyVersion = policyVersion;
+ }
+ /**
+ * @return the policyUpdateTime
+ */
+ public Date getPolicyUpdateTime() {
+ return policyUpdateTime;
+ }
+ /**
+ * @param policyUpdateTime the policyUpdateTime to set
+ */
+ public void setPolicyUpdateTime(Date policyUpdateTime) {
+ this.policyUpdateTime = policyUpdateTime;
+ }
+ /**
+ * @return the policies
+ */
+ public List<RangerPolicy> getPolicies() {
+ return policies;
+ }
+ /**
+ * @param policies the policies to set
+ */
+ public void setPolicies(List<RangerPolicy> policies) {
+ this.policies = policies;
+ }
+ /**
+ * @return the serviceDef
+ */
+ public RangerServiceDef getServiceDef() {
+ return serviceDef;
+ }
+ /**
+ * @param serviceDef the serviceDef to set
+ */
+ public void setServiceDef(RangerServiceDef serviceDef) {
+ this.serviceDef = serviceDef;
+ }
+
+ public String getAuditMode() {
+ return auditMode;
+ }
+
+ public void setAuditMode(String auditMode) {
+ this.auditMode = auditMode;
+ }
+
+ public Map<String, String> getServiceConfig() {
+ return serviceConfig;
+ }
+
+ public void setServiceConfig(Map<String, String> serviceConfig) {
+ this.serviceConfig = serviceConfig;
+ }
+
+ public void dedupStrings(Map<String, String> strTbl) {
+ serviceName = StringUtil.dedupString(serviceName, strTbl);
+ auditMode = StringUtil.dedupString(auditMode, strTbl);
+ serviceConfig = StringUtil.dedupStringsMap(serviceConfig, strTbl);
+
+ if (policies != null) {
+ for (RangerPolicy policy : policies) {
+ policy.dedupStrings(strTbl);
+ }
+ }
+
+ if (serviceDef != null) {
+ serviceDef.dedupStrings(strTbl);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "serviceName=" + serviceName + ", "
+ + "serviceId=" + serviceId + ", "
+ + "policyVersion=" + policyVersion + ", "
+ + "policyUpdateTime=" + policyUpdateTime + ", "
+ + "policies=" + policies + ", "
+ + "serviceDef=" + serviceDef + ", "
+ + "auditMode=" + auditMode
+ + "serviceConfig=" + serviceConfig
+ ;
+ }
+ }
+
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
@@ -460,6 +615,10 @@ public class ServicePolicies implements java.io.Serializable {
TagPolicies tagPolicies = copyHeader(source.getTagPolicies(), source.getServiceDef().getName());
ret.setTagPolicies(tagPolicies);
}
+ if (source.getGdsPolicies() != null) {
+ GdsPolicies gdsPolicies = copyHeader(source.getGdsPolicies(), source.getServiceDef().getName());
+ ret.setGdsPolicies(gdsPolicies);
+ }
return ret;
}
@@ -478,11 +637,26 @@ public class ServicePolicies implements java.io.Serializable {
return ret;
}
+ static public GdsPolicies copyHeader(GdsPolicies source, String componentServiceName) {
+ GdsPolicies ret = new GdsPolicies();
+
+ ret.setServiceName(source.getServiceName());
+ ret.setServiceId(source.getServiceId());
+ ret.setPolicyVersion(source.getPolicyVersion());
+ ret.setAuditMode(source.getAuditMode());
+ ret.setServiceDef(ServiceDefUtil.normalizeAccessTypeDefs(source.getServiceDef(), componentServiceName));
+ ret.setPolicyUpdateTime(source.getPolicyUpdateTime());
+ ret.setPolicies(Collections.emptyList());
+
+ return ret;
+ }
+
public static ServicePolicies applyDelta(final ServicePolicies servicePolicies, RangerPolicyEngineImpl policyEngine) {
ServicePolicies ret = copyHeader(servicePolicies);
List<RangerPolicy> oldResourcePolicies = policyEngine.getResourcePolicies();
List<RangerPolicy> oldTagPolicies = policyEngine.getTagPolicies();
+ List<RangerPolicy> oldGdsPolicies = policyEngine.getGdsPolicies();
List<RangerPolicy> newResourcePolicies = RangerPolicyDeltaUtil.applyDeltas(oldResourcePolicies, servicePolicies.getPolicyDeltas(), servicePolicies.getServiceDef().getName());
@@ -505,10 +679,29 @@ public class ServicePolicies implements java.io.Serializable {
LOG.debug("New tag policies:[" + Arrays.toString(newTagPolicies.toArray()) + "]");
}
+ final List<RangerPolicy> newGdsPolicies;
+ if (servicePolicies.getGdsPolicies() != null) {
+ LOG.debug("applyingDeltas for gds policies");
+
+ newGdsPolicies = RangerPolicyDeltaUtil.applyDeltas(oldGdsPolicies, servicePolicies.getPolicyDeltas(), servicePolicies.getGdsPolicies().getServiceDef().getName());
+ } else {
+ LOG.debug("No need to apply deltas for gds policies");
+
+ newGdsPolicies = oldGdsPolicies;
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("New gds policies:[" + Arrays.toString(newGdsPolicies.toArray()) + "]");
+ }
+
if (ret.getTagPolicies() != null) {
ret.getTagPolicies().setPolicies(newTagPolicies);
}
+ if (ret.getGdsPolicies() != null) {
+ ret.getGdsPolicies().setPolicies(newGdsPolicies);
+ }
+
if (MapUtils.isNotEmpty(servicePolicies.getSecurityZones())) {
Map<String, SecurityZoneInfo> newSecurityZones = new HashMap<>();
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 231472143..bd8149f3d 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
@@ -2454,22 +2454,39 @@ public class ServiceDBStore extends AbstractServiceStore {
}
private List<RangerPolicy> searchRangerTagPoliciesOnBasisOfServiceName(List<RangerPolicy> allExceptTagPolicies) throws Exception {
- Set<String> rangerServiceNames = new HashSet<String>();
+ List<RangerPolicy> ret = new ArrayList<>();
+ Set<String> serviceNames = new HashSet<>();
+ Map<String, Long> tagServices = new HashMap<>();
+
for(RangerPolicy pol : allExceptTagPolicies) {
- rangerServiceNames.add(pol.getService());
- }
- List<RangerPolicy> retPolicies = new ArrayList<RangerPolicy>();
- for(String eachRangerService : rangerServiceNames) {
- List<RangerPolicy> policies = new ArrayList<RangerPolicy>();
- RangerService rangerServiceObj = getServiceByName(eachRangerService);
- RangerService rangerTagService = getServiceByName(rangerServiceObj.getTagService());
- if(rangerTagService != null) {
- ServicePolicies servicePolicies = RangerServicePoliciesCache.getInstance().getServicePolicies(rangerTagService.getName(),rangerTagService.getId(), -1L, true, this);
- policies = servicePolicies != null ? servicePolicies.getPolicies() : null;
- retPolicies.addAll(policies);
+ serviceNames.add(pol.getService());
+ }
+
+ for(String serviceName : serviceNames) {
+ RangerService service = getServiceByName(serviceName);
+
+ if (StringUtils.isNotBlank(service.getTagService())) {
+ RangerService tagService = getServiceByName(service.getTagService());
+
+ if (tagService != null) {
+ tagServices.put(tagService.getName(), tagService.getId());
}
}
- return retPolicies;
+ }
+
+ for (Map.Entry<String, Long> entry : tagServices.entrySet()) {
+ String tagServiceName = entry.getKey();
+ Long tagServiceId = entry.getValue();
+
+ ServicePolicies tagServicePolicies = RangerServicePoliciesCache.getInstance().getServicePolicies(tagServiceName, tagServiceId, -1L, true, this);
+ List<RangerPolicy> policies = tagServicePolicies != null ? tagServicePolicies.getPolicies() : null;
+
+ if (policies != null) {
+ ret.addAll(policies);
+ }
+ }
+
+ return ret;
}
@Override
@@ -2897,37 +2914,30 @@ public class ServiceDBStore extends AbstractServiceStore {
if (!serviceDbObj.getIsenabled()) {
ret = ServicePolicies.copyHeader(ret);
ret.setTagPolicies(null);
+ ret.setGdsPolicies(null);
} else {
- boolean isTagServiceActive = true;
+ String tagServiceName = ret.getTagPolicies() != null ? ret.getTagPolicies().getServiceName() : null;
+ String gdsServiceName = ret.getGdsPolicies() != null ? ret.getGdsPolicies().getServiceName() : null;
+ boolean isTagServiceActive = isServiceActive(tagServiceName);
+ boolean isGdsServiceActive = isServiceActive(gdsServiceName);
- if (ret.getTagPolicies() != null) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Checking if tag-service:[" + ret.getTagPolicies().getServiceName() + "] is disabled");
+ if (!isTagServiceActive || !isGdsServiceActive) {
+ ServicePolicies copy = ServicePolicies.copyHeader(ret);
+
+ if (!isTagServiceActive) {
+ copy.setTagPolicies(null);
}
- 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");
- }
- isTagServiceActive = false;
- }
- } else {
- isTagServiceActive = false;
+ if (!isGdsServiceActive) {
+ copy.setGdsPolicies(null);
}
- } else {
- isTagServiceActive = false;
- }
- if (!isTagServiceActive) {
- ServicePolicies copy = ServicePolicies.copyHeader(ret);
- copy.setTagPolicies(null);
- List<RangerPolicy> copyPolicies = ret.getPolicies() != null ? new ArrayList<>(ret.getPolicies()) : 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;
}
}
@@ -3025,14 +3035,21 @@ public class ServiceDBStore extends AbstractServiceStore {
String auditMode = getAuditMode(serviceType, serviceName);
- XXService tagServiceDbObj = null;
- RangerServiceDef tagServiceDef = null;
+ XXService tagServiceDbObj = null;
+ RangerServiceDef tagServiceDef = null;
XXServiceVersionInfo tagServiceVersionInfoDbObj= null;
+ XXService gdsServiceDbObj = null;
+ RangerServiceDef gdsServiceDef = null;
+ XXServiceVersionInfo gdsServiceVersionInfoDbObj= null;
if (serviceDbObj.getTagService() != null) {
tagServiceDbObj = daoMgr.getXXService().getById(serviceDbObj.getTagService());
}
+ if (serviceDbObj.getGdsService() != null) {
+ gdsServiceDbObj = daoMgr.getXXService().getById(serviceDbObj.getGdsService());
+ }
+
if (tagServiceDbObj != null) {
tagServiceDef = getServiceDef(tagServiceDbObj.getType());
@@ -3049,8 +3066,24 @@ public class ServiceDBStore extends AbstractServiceStore {
}
}
+ if (gdsServiceDbObj != null) {
+ gdsServiceDef = getServiceDef(gdsServiceDbObj.getType());
+
+ if (gdsServiceDef == null) {
+ throw new Exception("service-def does not exist. id=" + gdsServiceDbObj.getType());
+ }
+
+ ServiceDefUtil.normalizeAccessTypeDefs(gdsServiceDef, serviceType);
+
+ gdsServiceVersionInfoDbObj = daoMgr.getXXServiceVersionInfo().findByServiceId(serviceDbObj.getGdsService());
+
+ if (gdsServiceVersionInfoDbObj == null) {
+ LOG.warn("serviceVersionInfo does not exist. name=" + gdsServiceDbObj.getName());
+ }
+ }
+
if (isDeltaEnabled) {
- ret = getServicePoliciesWithDeltas(serviceDef, serviceDbObj, tagServiceDef, tagServiceDbObj, lastKnownVersion, maxNeededVersion);
+ ret = getServicePoliciesWithDeltas(serviceDef, serviceDbObj, tagServiceDef, tagServiceDbObj, gdsServiceDef, gdsServiceDbObj, lastKnownVersion, maxNeededVersion);
}
if (ret != null) {
@@ -3060,11 +3093,15 @@ public class ServiceDBStore extends AbstractServiceStore {
ret.getTagPolicies().setPolicyUpdateTime(tagServiceVersionInfoDbObj == null ? null : tagServiceVersionInfoDbObj.getPolicyUpdateTime());
ret.getTagPolicies().setAuditMode(auditMode);
}
+ if (ret.getGdsPolicies() != null) {
+ ret.getGdsPolicies().setPolicyUpdateTime(gdsServiceVersionInfoDbObj == null ? null : gdsServiceVersionInfoDbObj.getPolicyUpdateTime());
+ ret.getGdsPolicies().setAuditMode(auditMode);
+ }
} else if (!getOnlyDeltas) {
ServicePolicies.TagPolicies tagPolicies = null;
+ ServicePolicies.GdsPolicies gdsPolicies = null;
if (tagServiceDbObj != null) {
-
tagPolicies = new ServicePolicies.TagPolicies();
tagPolicies.setServiceId(tagServiceDbObj.getId());
@@ -3075,6 +3112,19 @@ public class ServiceDBStore extends AbstractServiceStore {
tagPolicies.setServiceDef(tagServiceDef);
tagPolicies.setAuditMode(auditMode);
}
+
+ if (gdsServiceDbObj != null) {
+ gdsPolicies = new ServicePolicies.GdsPolicies();
+
+ gdsPolicies.setServiceId(gdsServiceDbObj.getId());
+ gdsPolicies.setServiceName(gdsServiceDbObj.getName());
+ gdsPolicies.setPolicyVersion(gdsServiceVersionInfoDbObj == null ? null : gdsServiceVersionInfoDbObj.getPolicyVersion());
+ gdsPolicies.setPolicyUpdateTime(gdsServiceVersionInfoDbObj == null ? null : gdsServiceVersionInfoDbObj.getPolicyUpdateTime());
+ gdsPolicies.setPolicies(getServicePoliciesFromDb(gdsServiceDbObj));
+ gdsPolicies.setServiceDef(gdsServiceDef);
+ gdsPolicies.setAuditMode(auditMode);
+ }
+
List<RangerPolicy> policies = getServicePoliciesFromDb(serviceDbObj);
ret = new ServicePolicies();
@@ -3087,6 +3137,7 @@ public class ServiceDBStore extends AbstractServiceStore {
ret.setServiceDef(serviceDef);
ret.setAuditMode(auditMode);
ret.setTagPolicies(tagPolicies);
+ ret.setGdsPolicies(gdsPolicies);
}
if (LOG.isDebugEnabled()) {
@@ -3259,7 +3310,7 @@ public class ServiceDBStore extends AbstractServiceStore {
}
- ServicePolicies getServicePoliciesWithDeltas(RangerServiceDef serviceDef, XXService service, RangerServiceDef tagServiceDef, XXService tagService, Long lastKnownVersion, Long maxNeededVersion) {
+ ServicePolicies getServicePoliciesWithDeltas(RangerServiceDef serviceDef, XXService service, RangerServiceDef tagServiceDef, XXService tagService, RangerServiceDef gdsServiceDef, XXService gdsService, Long lastKnownVersion, Long maxNeededVersion) {
ServicePolicies ret = null;
// if lastKnownVersion != -1L : try and get deltas. Get delta for serviceName first. Find id of the delta
@@ -3271,9 +3322,11 @@ public class ServiceDBStore extends AbstractServiceStore {
if (lastKnownVersion != -1L) {
List<RangerPolicyDelta> resourcePolicyDeltas;
- List<RangerPolicyDelta> tagPolicyDeltas = null;
- Long retrievedPolicyVersion = null;
+ List<RangerPolicyDelta> tagPolicyDeltas = null;
+ List<RangerPolicyDelta> gdsPolicyDeltas = null;
+ Long retrievedPolicyVersion = null;
Long retrievedTagPolicyVersion = null;
+ Long retrievedGdsPolicyVersion = null;
String componentServiceType = serviceDef.getName();
@@ -3293,7 +3346,6 @@ public class ServiceDBStore extends AbstractServiceStore {
Long id = resourcePolicyDeltas.get(0).getId();
tagPolicyDeltas = daoMgr.getXXPolicyChangeLog().findGreaterThan(id, maxNeededVersion, tagService.getId());
-
if (CollectionUtils.isNotEmpty(tagPolicyDeltas)) {
String tagServiceType = tagServiceDef.getName();
@@ -3307,6 +3359,23 @@ public class ServiceDBStore extends AbstractServiceStore {
}
}
+ if (isValid && gdsService != null) {
+ Long id = resourcePolicyDeltas.get(0).getId();
+ gdsPolicyDeltas = daoMgr.getXXPolicyChangeLog().findGreaterThan(id, maxNeededVersion, gdsService.getId());
+
+ if (CollectionUtils.isNotEmpty(gdsPolicyDeltas)) {
+ String gdsServiceType = gdsServiceDef.getName();
+
+ isValid = RangerPolicyDeltaUtil.isValidDeltas(gdsPolicyDeltas, gdsServiceType);
+
+ if (isValid) {
+ retrievedGdsPolicyVersion = gdsPolicyDeltas.get(gdsPolicyDeltas.size() - 1).getPoliciesVersion();
+ } else {
+ LOG.warn("Gds policy-Deltas :[" + gdsPolicyDeltas + "] for service-version :[" + lastKnownVersion + "] and delta-id :[" + id + "] are not valid");
+ }
+ }
+ }
+
if (isValid) {
if (CollectionUtils.isNotEmpty(tagPolicyDeltas)) {
// To ensure that resource-policy-deltas with service-type of 'tag' are ignored after validation
@@ -3335,6 +3404,16 @@ public class ServiceDBStore extends AbstractServiceStore {
tagPolicies.setPolicyVersion(retrievedTagPolicyVersion);
ret.setTagPolicies(tagPolicies);
}
+
+ if (gdsServiceDef != null && gdsService != null) {
+ ServicePolicies.GdsPolicies gdsPolicies = new ServicePolicies.GdsPolicies();
+ gdsPolicies.setServiceDef(gdsServiceDef);
+ gdsPolicies.setServiceId(gdsService.getId());
+ gdsPolicies.setServiceName(gdsService.getName());
+ gdsPolicies.setPolicies(null);
+ gdsPolicies.setPolicyVersion(retrievedGdsPolicyVersion);
+ ret.setGdsPolicies(gdsPolicies);
+ }
} else {
LOG.warn("Deltas :[" + resourcePolicyDeltas + "] from version :[" + lastKnownVersion + "] after compressing are null!");
}
@@ -6072,6 +6151,7 @@ public class ServiceDBStore extends AbstractServiceStore {
ret.setPolicyVersion(servicePolicies.getPolicyVersion());
ret.setPolicyUpdateTime(servicePolicies.getPolicyUpdateTime());
ret.setTagPolicies(servicePolicies.getTagPolicies());
+ ret.setGdsPolicies(servicePolicies.getGdsPolicies());
Map<String, ServicePolicies.SecurityZoneInfo> securityZonesInfo = new HashMap<>();
@@ -6183,6 +6263,7 @@ public class ServiceDBStore extends AbstractServiceStore {
ServicePolicies ret = null;
boolean containsDisabledResourcePolicies = false;
boolean containsDisabledTagPolicies = false;
+ boolean containsDisabledGdsPolicies = false;
if (servicePolicies != null) {
List<RangerPolicy> policies = null;
@@ -6209,7 +6290,19 @@ public class ServiceDBStore extends AbstractServiceStore {
}
}
- if (!containsDisabledResourcePolicies && !containsDisabledTagPolicies) {
+ if (servicePolicies.getGdsPolicies() != null) {
+ policies = servicePolicies.getGdsPolicies().getPolicies();
+ if (CollectionUtils.isNotEmpty(policies)) {
+ for (RangerPolicy policy : policies) {
+ if (!policy.getIsEnabled()) {
+ containsDisabledGdsPolicies = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (!containsDisabledResourcePolicies && !containsDisabledTagPolicies && !containsDisabledGdsPolicies) {
ret = servicePolicies;
} else {
ret = new ServicePolicies();
@@ -6221,6 +6314,7 @@ public class ServiceDBStore extends AbstractServiceStore {
ret.setPolicyUpdateTime(servicePolicies.getPolicyUpdateTime());
ret.setPolicies(servicePolicies.getPolicies());
ret.setTagPolicies(servicePolicies.getTagPolicies());
+ ret.setGdsPolicies(servicePolicies.getGdsPolicies());
ret.setSecurityZones(servicePolicies.getSecurityZones());
if (containsDisabledResourcePolicies) {
@@ -6252,6 +6346,26 @@ public class ServiceDBStore extends AbstractServiceStore {
ret.setTagPolicies(tagPolicies);
}
+
+ if (containsDisabledGdsPolicies) {
+ ServicePolicies.GdsPolicies gdsPolicies = new ServicePolicies.GdsPolicies();
+
+ gdsPolicies.setServiceDef(servicePolicies.getGdsPolicies().getServiceDef());
+ gdsPolicies.setServiceId(servicePolicies.getGdsPolicies().getServiceId());
+ gdsPolicies.setServiceName(servicePolicies.getGdsPolicies().getServiceName());
+ gdsPolicies.setPolicyVersion(servicePolicies.getGdsPolicies().getPolicyVersion());
+ gdsPolicies.setPolicyUpdateTime(servicePolicies.getGdsPolicies().getPolicyUpdateTime());
+
+ List<RangerPolicy> filteredPolicies = new ArrayList<>();
+ for (RangerPolicy policy : servicePolicies.getGdsPolicies().getPolicies()) {
+ if (policy.getIsEnabled()) {
+ filteredPolicies.add(policy);
+ }
+ }
+ gdsPolicies.setPolicies(filteredPolicies);
+
+ ret.setGdsPolicies(gdsPolicies);
+ }
}
}
@@ -6409,4 +6523,20 @@ public class ServiceDBStore extends AbstractServiceStore {
}
return roleNames;
}
+
+ private boolean isServiceActive(String serviceName) {
+ boolean ret = false;
+
+ if (StringUtils.isNotBlank(serviceName)) {
+ XXService service = daoMgr.getXXService().findByName(serviceName);
+
+ ret = (service != null && service.getIsenabled());
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("isServiceActive(" + serviceName + "): " + ret);
+ }
+ }
+
+ return ret;
+ }
}