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 <[email protected]>
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;
+ }
}