This is an automated email from the ASF dual-hosted git repository.
madhan 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 cbdd054d5 RANGER-4286: allow security-zone to exist without any
services/resources assigned
cbdd054d5 is described below
commit cbdd054d59a94de787c6d8f980859982d22f467a
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Thu Jun 8 22:32:56 2023 -0700
RANGER-4286: allow security-zone to exist without any services/resources
assigned
---
.../validation/RangerSecurityZoneValidator.java | 369 +++++++++------------
.../validation/RangerZoneResourceMatcher.java | 10 +-
.../plugin/store/SecurityZonePredicateUtil.java | 33 +-
.../apache/ranger/plugin/util/SearchFilter.java | 1 +
.../RangerSecurityZoneValidatorTest.java | 112 ++++++-
5 files changed, 292 insertions(+), 233 deletions(-)
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidator.java
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidator.java
index cb4f37cc0..1a2b3160b 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidator.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidator.java
@@ -23,10 +23,11 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.plugin.errors.ValidationErrorCode;
-import org.apache.ranger.plugin.model.RangerPolicy;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
import org.apache.ranger.plugin.model.RangerSecurityZone;
import org.apache.ranger.plugin.model.RangerService;
import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef;
import
org.apache.ranger.plugin.model.RangerSecurityZone.RangerSecurityZoneService;
import org.apache.ranger.plugin.policyengine.RangerAccessResourceImpl;
import org.apache.ranger.plugin.policyengine.RangerResourceTrie;
@@ -37,6 +38,7 @@ import org.apache.ranger.plugin.store.SecurityZoneStore;
import org.apache.ranger.plugin.store.ServiceStore;
import org.apache.ranger.plugin.util.RangerResourceEvaluatorsRetriever;
import org.apache.ranger.plugin.util.SearchFilter;
+import org.apache.ranger.plugin.util.ServiceDefUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,6 +50,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import static org.apache.ranger.plugin.model.RangerPolicy.POLICY_TYPES;
+
public class RangerSecurityZoneValidator extends RangerValidator {
private static final Logger LOG =
LoggerFactory.getLogger(RangerSecurityZoneValidator.class);
@@ -55,28 +59,27 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
public RangerSecurityZoneValidator(ServiceStore store, SecurityZoneStore
securityZoneStore) {
super(store);
+
this.securityZoneStore = securityZoneStore;
}
public void validate(RangerSecurityZone securityZone, Action action)
throws Exception {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==> RangerPolicyValidator.validate(%s,
%s)", securityZone, action));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.validate(%s, %s)", securityZone, action));
}
List<ValidationFailureDetails> failures = new ArrayList<>();
+ boolean valid = isValid(securityZone,
action, failures);
- boolean valid = isValid(securityZone, action, failures);
-
- String message;
try {
if (!valid) {
- message = serializeFailures(failures);
+ String message = serializeFailures(failures);
+
throw new Exception(message);
}
-
} finally {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<==
RangerPolicyValidator.validate(%s, %s)", securityZone, action));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.validate(%s, %s)", securityZone, action));
}
}
}
@@ -84,7 +87,7 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
@Override
boolean isValid(String name, Action action, List<ValidationFailureDetails>
failures) {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==> RangerPolicyValidator.isValid(%s, %s,
%s)", name, action, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.isValid(%s, %s, %s)", name, action, failures));
}
boolean ret = true;
@@ -94,24 +97,20 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
failures.add(new
ValidationFailureDetailsBuilder().isAnInternalError().becauseOf(error.getMessage()).errorCode(error.getErrorCode()).build());
ret = false;
- } else {
- if (StringUtils.isEmpty(name)) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_FIELD;
+ } else if (StringUtils.isEmpty(name)) {
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_FIELD;
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone name was
null/missing").field("name").isMissing().errorCode(error.getErrorCode()).becauseOf(error.getMessage("name")).build());
- ret = false;
- } else {
- if (getSecurityZone(name) == null) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_ZONE_ID;
+ failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone name was
null/missing").field("name").isMissing().errorCode(error.getErrorCode()).becauseOf(error.getMessage("name")).build());
+ ret = false;
+ } else if (getSecurityZone(name) == null) {
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_ZONE_ID;
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone does not
exist").field("name").errorCode(error.getErrorCode()).becauseOf(error.getMessage(name)).build());
- ret = false;
- }
- }
+ failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone does not
exist").field("name").errorCode(error.getErrorCode()).becauseOf(error.getMessage(name)).build());
+ ret = false;
}
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<== RangerPolicyValidator.isValid(%s, %s,
%s) : %s", name, action, failures, ret));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.isValid(%s, %s, %s) : %s", name, action, failures,
ret));
}
return ret;
@@ -120,7 +119,7 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
@Override
boolean isValid(Long id, Action action, List<ValidationFailureDetails>
failures) {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==> RangerPolicyValidator.isValid(%s, %s,
%s)", id, action, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.isValid(%s, %s, %s)", id, action, failures));
}
boolean ret = true;
@@ -136,32 +135,31 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone id was
null/missing").field("id").isMissing().errorCode(error.getErrorCode()).becauseOf(error.getMessage("id")).build());
ret = false;
} else if (getSecurityZone(id) == null) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_ZONE_ID;
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_ZONE_ID;
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone id does not
exist").field("id").errorCode(error.getErrorCode()).becauseOf(error.getMessage(id)).build());
- ret = false;
+ failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone id does not
exist").field("id").errorCode(error.getErrorCode()).becauseOf(error.getMessage(id)).build());
+ ret = false;
}
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<== RangerPolicyValidator.isValid(%s, %s,
%s) : %s", id, action, failures, ret));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.isValid(%s, %s, %s) : %s", id, action, failures,
ret));
}
return ret;
}
- boolean isValid(RangerSecurityZone securityZone, Action action,
List<ValidationFailureDetails> failures) {
+ private boolean isValid(RangerSecurityZone securityZone, Action action,
List<ValidationFailureDetails> failures) {
if(LOG.isDebugEnabled()) {
- LOG.debug(String.format("==> RangerPolicyValidator.isValid(%s, %s,
%s)", securityZone, action, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.isValid(%s, %s, %s)", securityZone, action,
failures));
}
if (!(action == Action.CREATE || action == Action.UPDATE)) {
- throw new IllegalArgumentException("isValid(RangerPolicy, ...) is
only supported for create/update");
+ throw new IllegalArgumentException("isValid(RangerSecurityZone,
...) is only supported for create/update");
}
- boolean ret = true;
-
- RangerSecurityZone existingZone;
+ boolean ret = true;
final String zoneName = securityZone.getName();
+
if (StringUtils.isEmpty(StringUtils.trim(zoneName))) {
ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_FIELD;
@@ -169,9 +167,13 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
ret = false;
}
+ RangerSecurityZone existingZone;
+
if (action == Action.CREATE) {
securityZone.setId(-1L);
+
existingZone = getSecurityZone(zoneName);
+
if (existingZone != null) {
ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ZONE_NAME_CONFLICT;
@@ -179,7 +181,8 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
ret = false;
}
} else {
- Long zoneId = securityZone.getId();
+ Long zoneId = securityZone.getId();
+
existingZone = getSecurityZone(zoneId);
if (existingZone == null) {
@@ -191,12 +194,10 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
existingZone = getSecurityZone(zoneName);
if (existingZone != null) {
- if (!StringUtils.equals(existingZone.getName(), zoneName))
{
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ZONE_NAME_CONFLICT;
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ZONE_NAME_CONFLICT;
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone
name").field("name").errorCode(error.getErrorCode()).becauseOf(error.getMessage(existingZone.getId())).build());
- ret = false;
- }
+ failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone
name").field("name").errorCode(error.getErrorCode()).becauseOf(error.getMessage(existingZone.getId())).build());
+ ret = false;
}
}
}
@@ -206,7 +207,7 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
ret = ret && validateAgainstAllSecurityZones(securityZone, action,
failures);
if(LOG.isDebugEnabled()) {
- LOG.debug(String.format("<== RangerPolicyValidator.isValid(%s, %s,
%s) : %s", securityZone, action, failures, ret));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.isValid(%s, %s, %s) : %s", securityZone, action,
failures, ret));
}
return ret;
@@ -214,25 +215,11 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
private boolean validateWithinSecurityZone(RangerSecurityZone
securityZone, Action action, List<ValidationFailureDetails> failures) {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==>
RangerPolicyValidator.validateWithinSecurityZone(%s, %s, %s)", securityZone,
action, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.validateWithinSecurityZone(%s, %s, %s)",
securityZone, action, failures));
}
boolean ret = true;
- // Validate each service for existence, not being tag-service and each
resource-spec for validity
- if (MapUtils.isNotEmpty(securityZone.getServices())) {
- for (Map.Entry<String,
RangerSecurityZone.RangerSecurityZoneService> serviceSpecification :
securityZone.getServices().entrySet()) {
- String serviceName
= serviceSpecification.getKey();
- RangerSecurityZone.RangerSecurityZoneService
securityZoneService = serviceSpecification.getValue();
-
- ret = ret && validateSecurityZoneService(serviceName,
securityZoneService, failures);
- }
- } else {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_SERVICES;
-
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf("security zone
services").isMissing().field("services").errorCode(error.getErrorCode()).becauseOf(error.getMessage(securityZone.getName())).build());
- ret = false;
- }
// admin users, user-groups and roles collections can't be empty
if (CollectionUtils.isEmpty(securityZone.getAdminUsers()) &&
CollectionUtils.isEmpty(securityZone.getAdminUserGroups()) &&
CollectionUtils.isEmpty(securityZone.getAdminRoles())) {
ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_USER_AND_GROUPS_AND_ROLES;
@@ -248,90 +235,83 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
ret = false;
}
- if (securityZone.getServices() != null) {
- for (Map.Entry<String, RangerSecurityZoneService>
serviceResourceMapEntry : securityZone.getServices()
- .entrySet()) {
- if
(serviceResourceMapEntry.getValue().getResources() != null) {
- for (Map<String, List<String>> resource
: serviceResourceMapEntry.getValue().getResources()) {
- if (resource != null) {
- for (Map.Entry<String,
List<String>> entry : resource.entrySet()) {
- if
(CollectionUtils.isEmpty(entry.getValue())) {
-
ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_RESOURCES;
-
failures.add(new ValidationFailureDetailsBuilder().field("security zone
resources")
-
.subField("resources").isMissing()
-
.becauseOf(error.getMessage(serviceResourceMapEntry.getKey()))
-
.errorCode(error.getErrorCode()).build());
- ret =
false;
- }
- }
- }
- }
- }
- }
- }
+ // Validate each service for existence, not being tag-service and each
resource-spec for validity
+ if (MapUtils.isNotEmpty(securityZone.getServices())) {
+ for (Map.Entry<String, RangerSecurityZoneService> entry :
securityZone.getServices().entrySet()) {
+ String serviceName = entry.getKey();
+ RangerSecurityZoneService securityZoneService =
entry.getValue();
+
+ ret = validateSecurityZoneService(serviceName,
securityZoneService, failures) && ret;
+ }
+ }
+
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<==
RangerPolicyValidator.validateWithinSecurityZone(%s, %s, %s) : %s",
securityZone, action, failures, ret));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.validateWithinSecurityZone(%s, %s, %s) : %s",
securityZone, action, failures, ret));
}
+
return ret;
}
private boolean validateAgainstAllSecurityZones(RangerSecurityZone
securityZone, Action action, List<ValidationFailureDetails> failures) {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==>
RangerPolicyValidator.validateAgainstAllSecurityZones(%s, %s, %s)",
securityZone, action, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.validateAgainstAllSecurityZones(%s, %s, %s)",
securityZone, action, failures));
}
- boolean ret = true;
-
+ boolean ret = true;
final String zoneName;
if (securityZone.getId() != -1L) {
RangerSecurityZone existingZone =
getSecurityZone(securityZone.getId());
+
zoneName = existingZone.getName();
} else {
zoneName = securityZone.getName();
}
- for (Map.Entry<String, RangerSecurityZone.RangerSecurityZoneService>
entry: securityZone.getServices().entrySet()) {
- String serviceName =
entry.getKey();
- RangerSecurityZone.RangerSecurityZoneService serviceResources =
entry.getValue();
+ for (Map.Entry<String, RangerSecurityZoneService> entry:
securityZone.getServices().entrySet()) {
+ String serviceName = entry.getKey();
+ RangerSecurityZoneService securityZoneService = entry.getValue();
- if (CollectionUtils.isNotEmpty(serviceResources.getResources())) {
- SearchFilter filter = new SearchFilter();
- List<RangerSecurityZone> zones = null;
+ if (CollectionUtils.isEmpty(securityZoneService.getResources())) {
+ continue;
+ }
- filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
- filter.setParam(SearchFilter.ZONE_NAME, zoneName);
+ SearchFilter filter = new SearchFilter();
+ List<RangerSecurityZone> zones = null;
- try {
- zones = securityZoneStore.getSecurityZones(filter);
- } catch (Exception excp) {
- LOG.error("Failed to get Security-Zones", excp);
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INTERNAL_ERROR;
+ filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
+ filter.setParam(SearchFilter.NOT_ZONE_NAME, zoneName);
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf(error.getMessage(excp.getMessage())).errorCode(error.getErrorCode()).build());
- ret = false;
- }
+ try {
+ zones = securityZoneStore.getSecurityZones(filter);
+ } catch (Exception excp) {
+ LOG.error("Failed to get Security-Zones", excp);
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INTERNAL_ERROR;
+
+ failures.add(new
ValidationFailureDetailsBuilder().becauseOf(error.getMessage(excp.getMessage())).errorCode(error.getErrorCode()).build());
+ ret = false;
+ }
- if (CollectionUtils.isNotEmpty(zones)) {
- RangerService service = getService(serviceName);
- RangerServiceDef serviceDef = service != null ?
getServiceDef(service.getType()) : null;
+ if (CollectionUtils.isEmpty(zones)) {
+ continue;
+ }
- if (serviceDef == null) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INTERNAL_ERROR;
+ RangerService service = getService(serviceName);
+ RangerServiceDef serviceDef = service != null ?
getServiceDef(service.getType()) : null;
- failures.add(new
ValidationFailureDetailsBuilder().becauseOf(error.getMessage(serviceName)).errorCode(error.getErrorCode()).build());
- ret = false;
+ if (serviceDef == null) {
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INTERNAL_ERROR;
- } else {
- zones.add(securityZone);
- ret = ret && validateZoneServiceInAllZones(zones,
serviceName, serviceDef, failures);
- }
- }
+ failures.add(new
ValidationFailureDetailsBuilder().becauseOf(error.getMessage(serviceName)).errorCode(error.getErrorCode()).build());
+ ret = false;
+ } else {
+ zones.add(securityZone);
+ ret = ret && validateZoneServiceInAllZones(zones, serviceName,
serviceDef, failures);
}
}
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<==
RangerPolicyValidator.validateAgainstAllSecurityZones(%s, %s, %s) : %s",
securityZone, action, failures, ret));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.validateAgainstAllSecurityZones(%s, %s, %s) : %s",
securityZone, action, failures, ret));
}
return ret;
@@ -339,7 +319,7 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
private boolean validateZoneServiceInAllZones(List<RangerSecurityZone>
zones, String serviceName, RangerServiceDef serviceDef,
List<ValidationFailureDetails> failures) {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==>
RangerPolicyValidator.validateZoneServiceInAllZones(%s, %s, %s, %s)", zones,
serviceName, serviceDef, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.validateZoneServiceInAllZones(%s, %s, %s, %s)",
zones, serviceName, serviceDef, failures));
}
boolean ret = true;
@@ -351,22 +331,26 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
// add this to list-of-evaluators
Map<String, List<RangerZoneResourceMatcher>> matchersForResourceDef =
new HashMap<>();
+ RangerServiceDefHelper serviceDefHelper =
new RangerServiceDefHelper(serviceDef);
for (RangerSecurityZone zone : zones) {
- List<HashMap<String, List<String>>> resources =
zone.getServices().get(serviceName).getResources();
+ Map<String, RangerSecurityZoneService> zoneServices =
zone.getServices();
+ RangerSecurityZoneService zoneService = zoneServices
!= null ? zoneServices.get(serviceName) : null;
+ List<HashMap<String, List<String>>> resources = zoneService
!= null ? zoneService.getResources() : null;
+
+ if (CollectionUtils.isEmpty(resources)) {
+ continue;
+ }
for (Map<String, List<String>> resource : resources) {
- Map<String, RangerPolicy.RangerPolicyResource> policyResources
= new HashMap<>();
+ Map<String, RangerPolicyResource> policyResources = new
HashMap<>();
for (Map.Entry<String, List<String>> entry :
resource.entrySet()) {
String resourceDefName = entry.getKey();
List<String> resourceValues = entry.getValue();
- RangerPolicy.RangerPolicyResource policyResource = new
RangerPolicy.RangerPolicyResource();
+ RangerPolicyResource policyResource = new
RangerPolicyResource(resourceValues, false,
EmbeddedServiceDefsUtil.isRecursiveEnabled(serviceDef, resourceDefName));
- policyResource.setIsExcludes(false);
-
policyResource.setIsRecursive(EmbeddedServiceDefsUtil.isRecursiveEnabled(serviceDef,
resourceDefName));
- policyResource.setValues(resourceValues);
policyResources.put(resourceDefName, policyResource);
if (matchersForResourceDef.get(resourceDefName) == null) {
@@ -374,7 +358,7 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
}
}
- RangerZoneResourceMatcher matcher = new
RangerZoneResourceMatcher(zone.getName(), policyResources, serviceDef);
+ RangerZoneResourceMatcher matcher = new
RangerZoneResourceMatcher(zone.getName(), policyResources, serviceDefHelper);
for (String resourceDefName : resource.keySet()) {
matchersForResourceDef.get(resourceDefName).add(matcher);
@@ -385,21 +369,13 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
// Build a map of trie with list-of-evaluators with one entry
corresponds to one resource-def if it exists in the list-of-resources
Map<String, RangerResourceTrie<RangerZoneResourceMatcher>> trieMap =
new HashMap<>();
- List<RangerServiceDef.RangerResourceDef> resourceDefs =
serviceDef.getResources();
for (Map.Entry<String, List<RangerZoneResourceMatcher>> entry :
matchersForResourceDef.entrySet()) {
- String resourceDefName =
entry.getKey();
- List<RangerZoneResourceMatcher> matchers =
entry.getValue();
- RangerServiceDef.RangerResourceDef resourceDef = null;
-
- for (RangerServiceDef.RangerResourceDef element : resourceDefs) {
- if (StringUtils.equals(element.getName(), resourceDefName)) {
- resourceDef = element;
- break;
- }
- }
+ String resourceDefName = entry.getKey();
+ List<RangerZoneResourceMatcher> matchers = entry.getValue();
+ RangerResourceDef resourceDef =
ServiceDefUtil.getResourceDef(serviceDef, resourceDefName);
- trieMap.put(entry.getKey(), new RangerResourceTrie<>(resourceDef,
matchers));
+ trieMap.put(resourceDefName, new RangerResourceTrie<>(resourceDef,
matchers));
}
// For each zone, get list-of-resources corresponding to serviceName
@@ -413,7 +389,6 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
List<HashMap<String, List<String>>> resources =
zone.getServices().get(serviceName).getResources();
for (Map<String, List<String>> resource : resources) {
-
Collection<RangerZoneResourceMatcher> smallestList =
RangerResourceEvaluatorsRetriever.getEvaluators(trieMap, resource);
if (LOG.isDebugEnabled()) {
@@ -464,20 +439,18 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
}
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<==
RangerPolicyValidator.validateZoneServiceInAllZones(%s, %s, %s, %s) : %s",
zones, serviceName, serviceDef, failures, ret));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.validateZoneServiceInAllZones(%s, %s, %s, %s) :
%s", zones, serviceName, serviceDef, failures, ret));
}
return ret;
}
- private boolean validateSecurityZoneService(String serviceName,
RangerSecurityZone.RangerSecurityZoneService securityZoneService,
List<ValidationFailureDetails> failures) {
+ private boolean validateSecurityZoneService(String serviceName,
RangerSecurityZoneService securityZoneService, List<ValidationFailureDetails>
failures) {
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==>
RangerPolicyValidator.validateSecurityZoneService(%s, %s, %s)", serviceName,
securityZoneService, failures));
+ LOG.debug(String.format("==>
RangerSecurityZoneValidator.validateSecurityZoneService(%s, %s, %s)",
serviceName, securityZoneService, failures));
}
- boolean ret = true;
-
- // Verify service with serviceName exists - get the service-type
- RangerService service = getService(serviceName);
+ boolean ret = true;
+ RangerService service = getService(serviceName); // Verify service
with serviceName exists
if (service == null) {
ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_SERVICE_NAME;
@@ -489,68 +462,54 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
if (serviceDef == null) {
ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_SERVICE_TYPE;
+
failures.add(new
ValidationFailureDetailsBuilder().field("security zone resource
service-type").becauseOf(error.getMessage(service.getType())).errorCode(error.getErrorCode()).build());
ret = false;
} else {
- String serviceType = serviceDef.getName();
-
- if (StringUtils.equals(serviceType,
EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
- if
(CollectionUtils.isNotEmpty(securityZoneService.getResources())) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_UNEXPECTED_RESOURCES;
- failures.add(new
ValidationFailureDetailsBuilder().field("security zone
resources").becauseOf(error.getMessage(serviceName)).errorCode(error.getErrorCode()).build());
- ret = false;
- }
- } else {
- if
(CollectionUtils.isEmpty(securityZoneService.getResources())) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_RESOURCES;
- failures.add(new
ValidationFailureDetailsBuilder().field("security zone
resources").isMissing().becauseOf(error.getMessage(serviceName)).errorCode(error.getErrorCode()).build());
- ret = false;
- } else {
- // For each resource-spec, verify that it forms valid
hierarchy for some policy-type
- for (Map<String, List<String>> resource :
securityZoneService.getResources()) {
- Set<String> resourceDefNames = resource.keySet();
- RangerServiceDefHelper serviceDefHelper = new
RangerServiceDefHelper(serviceDef);
- boolean isValidHierarchy = false;
-
- for (int policyType : RangerPolicy.POLICY_TYPES) {
- Set<List<RangerServiceDef.RangerResourceDef>>
resourceHierarchies = serviceDefHelper.getResourceHierarchies(policyType,
resourceDefNames);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("Size of resourceHierarchies for
resourceDefNames:[" + resourceDefNames + ", policyType=" + policyType + "] = "
+ resourceHierarchies.size());
- }
-
- for (List<RangerServiceDef.RangerResourceDef>
resourceHierarchy : resourceHierarchies) {
-
- if
(RangerDefaultPolicyResourceMatcher.isHierarchyValidForResources(resourceHierarchy,
resource)) {
- isValidHierarchy = true;
- break;
- } else {
- LOG.info("gaps found in resource,
skipping hierarchy:[" + resourceHierarchies + "]");
- }
- }
+ if
(CollectionUtils.isNotEmpty(securityZoneService.getResources())) {
+ // For each resource-spec, verify that it forms valid
hierarchy for some policy-type
+ for (Map<String, List<String>> resource :
securityZoneService.getResources()) {
+ Set<String> resourceDefNames =
resource.keySet();
+ RangerServiceDefHelper serviceDefHelper = new
RangerServiceDefHelper(serviceDef);
+ boolean isValidHierarchy = false;
+
+ for (int policyType : POLICY_TYPES) {
+ Set<List<RangerResourceDef>> resourceHierarchies =
serviceDefHelper.getResourceHierarchies(policyType, resourceDefNames);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Size of resourceHierarchies for
resourceDefNames:[" + resourceDefNames + ", policyType=" + policyType + "] = "
+ resourceHierarchies.size());
}
- if (!isValidHierarchy) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_RESOURCE_HIERARCHY;
-
- failures.add(new
ValidationFailureDetailsBuilder().field("security zone resource
hierarchy").becauseOf(error.getMessage(serviceName,
resourceDefNames)).errorCode(error.getErrorCode()).build());
- ret = false;
+ for (List<RangerResourceDef> resourceHierarchy :
resourceHierarchies) {
+ if
(RangerDefaultPolicyResourceMatcher.isHierarchyValidForResources(resourceHierarchy,
resource)) {
+ isValidHierarchy = true;
+ break;
+ } else {
+ LOG.info("gaps found in resource, skipping
hierarchy:[" + resourceHierarchies + "]");
+ }
}
+ }
- /*
- * Ignore this check. It should be possible to have
all wildcard resource in a zone if zone-admin so desires
- *
- boolean isValidResourceSpec =
isAnyNonWildcardResource(resource, failures);
-
- if (!isValidResourceSpec) {
- ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ALL_WILDCARD_RESOURCE_VALUES;
+ if (!isValidHierarchy) {
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_INVALID_RESOURCE_HIERARCHY;
- failures.add(new
ValidationFailureDetailsBuilder().field("security zone resource
values").becauseOf(error.getMessage(serviceName)).errorCode(error.getErrorCode()).build());
+ failures.add(new
ValidationFailureDetailsBuilder().field("security zone resource
hierarchy").becauseOf(error.getMessage(serviceName,
resourceDefNames)).errorCode(error.getErrorCode()).build());
ret = false;
-
LOG.warn("RangerPolicyValidator.validateSecurityZoneService() : All wildcard
resource-values specified for service :[" + serviceName + "]");
}
- */
+ for (Map.Entry<String, List<String>> resourceEntry :
resource.entrySet()) {
+ String resourceName =
resourceEntry.getKey();
+ List<String> resourceValues =
resourceEntry.getValue();
+
+ if (CollectionUtils.isEmpty(resourceValues)) {
+ ValidationErrorCode error =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_RESOURCES;
+
+ failures.add(new
ValidationFailureDetailsBuilder().field("security zone resources")
+ .subField("resources").isMissing()
+
.becauseOf(error.getMessage(resourceName))
+
.errorCode(error.getErrorCode()).build());
+ ret = false;
+ }
}
}
}
@@ -558,41 +517,9 @@ public class RangerSecurityZoneValidator extends
RangerValidator {
}
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<==
RangerPolicyValidator.validateSecurityZoneService(%s, %s, %s) : %s",
serviceName, securityZoneService, failures, ret));
- }
-
- return ret;
- }
-
- /*
- private boolean isAnyNonWildcardResource(Map<String, List<String>>
resource, List<ValidationFailureDetails> failures) {
- if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("==>
RangerPolicyValidator.isAnyNonWildcardResource(%s, %s)", resource, failures));
+ LOG.debug(String.format("<==
RangerSecurityZoneValidator.validateSecurityZoneService(%s, %s, %s) : %s",
serviceName, securityZoneService, failures, ret));
}
- boolean ret = false;
-
- for (Map.Entry<String, List<String>> resourceDefValue :
resource.entrySet()) {
- boolean wildCardResourceFound = false;
- List<String> resourceValues = resourceDefValue.getValue();
-
- for (String resourceValue : resourceValues) {
- if (StringUtils.equals(resourceValue,
RangerDefaultResourceMatcher.WILDCARD_ASTERISK)) {
- wildCardResourceFound = true;
- break;
- }
- }
-
- if (!wildCardResourceFound) {
- ret = true;
- break;
- }
- }
-
- if (LOG.isDebugEnabled()) {
- LOG.debug(String.format("<==
RangerPolicyValidator.isAnyNonWildcardResource(%s, %s) : %s", resource,
failures, ret));
- }
return ret;
}
- */
}
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerZoneResourceMatcher.java
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerZoneResourceMatcher.java
index e079b7c46..bf4247660 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerZoneResourceMatcher.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerZoneResourceMatcher.java
@@ -42,11 +42,13 @@ public class RangerZoneResourceMatcher implements
RangerResourceEvaluator {
private RangerServiceDef.RangerResourceDef
leafResourceDef;
public RangerZoneResourceMatcher(final String securityZoneName, final
Map<String, RangerPolicy.RangerPolicyResource> policyResource, final
RangerServiceDef serviceDef) {
+ this(securityZoneName, policyResource, new
RangerServiceDefHelper(serviceDef));
+ }
- RangerServiceDefHelper serviceDefHelper = new
RangerServiceDefHelper(serviceDef);
- final Collection<String> resourceKeys =
policyResource.keySet();
-
- RangerDefaultPolicyResourceMatcher matcher = new
RangerDefaultPolicyResourceMatcher();
+ public RangerZoneResourceMatcher(final String securityZoneName, final
Map<String, RangerPolicy.RangerPolicyResource> policyResource, final
RangerServiceDefHelper serviceDefHelper) {
+ final RangerServiceDef serviceDef =
serviceDefHelper.getServiceDef();
+ final Collection<String> resourceKeys =
policyResource.keySet();
+ final RangerDefaultPolicyResourceMatcher matcher = new
RangerDefaultPolicyResourceMatcher();
matcher.setServiceDef(serviceDef);
matcher.setServiceDefHelper(serviceDefHelper);
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/store/SecurityZonePredicateUtil.java
b/agents-common/src/main/java/org/apache/ranger/plugin/store/SecurityZonePredicateUtil.java
index f2c381925..df5fc7956 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/store/SecurityZonePredicateUtil.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/store/SecurityZonePredicateUtil.java
@@ -38,7 +38,8 @@ public class SecurityZonePredicateUtil extends
AbstractPredicateUtil {
addPredicateForServiceName(filter.getParam(SearchFilter.SERVICE_NAME),
predicates);
addPredicateForMatchingZoneId(filter.getParam(SearchFilter.ZONE_ID),
predicates);
-
addPredicateForNonMatchingZoneName(filter.getParam(SearchFilter.ZONE_NAME),
predicates);
+
addPredicateForMatchingZoneName(filter.getParam(SearchFilter.ZONE_NAME),
predicates);
+
addPredicateForNonMatchingZoneName(filter.getParam(SearchFilter.NOT_ZONE_NAME),
predicates);
}
private Predicate addPredicateForServiceName(final String serviceName,
List<Predicate> predicates) {
@@ -105,6 +106,36 @@ public class SecurityZonePredicateUtil extends
AbstractPredicateUtil {
return ret;
}
+ private Predicate addPredicateForMatchingZoneName(final String zoneName,
List<Predicate> predicates) {
+
+ Predicate ret = new Predicate() {
+ @Override
+ public boolean evaluate(Object object) {
+ if(object == null) {
+ return false;
+ }
+
+ boolean ret = false;
+
+ if(object instanceof RangerSecurityZone) {
+ RangerSecurityZone securityZone = (RangerSecurityZone)
object;
+
+ if (StringUtils.equals(zoneName, securityZone.getName())) {
+ ret = true;
+ }
+ }
+
+ return ret;
+ }
+ };
+
+ if(predicates != null) {
+ predicates.add(ret);
+ }
+
+ return ret;
+ }
+
private Predicate addPredicateForNonMatchingZoneName(final String
zoneName, List<Predicate> predicates) {
Predicate ret = new Predicate() {
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
index 4653dc31a..61f879894 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
@@ -59,6 +59,7 @@ public class SearchFilter {
public static final String POLICY_LABEL_ID = "policyLabelId";
// search, sort
public static final String ZONE_ID = "zoneId"; //
search, sort
public static final String ZONE_NAME = "zoneName"; //
search, sort
+ public static final String NOT_ZONE_NAME = "notZoneName"; //
search
public static final String ROLE_ID = "roleId"; //
search, sort
public static final String ROLE_NAME = "roleName"; //
search, sort
public static final String GROUP_NAME = "groupName"; //
search, sort
diff --git
a/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidatorTest.java
b/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidatorTest.java
index dcc970c47..ef95c69aa 100644
---
a/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidatorTest.java
+++
b/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/RangerSecurityZoneValidatorTest.java
@@ -19,11 +19,17 @@
package org.apache.ranger.plugin.model.validation;
import static org.mockito.Mockito.mock;
+
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ranger.plugin.errors.ValidationErrorCode;
import org.apache.ranger.plugin.model.RangerSecurityZone;
import org.apache.ranger.plugin.model.RangerService;
import org.apache.ranger.plugin.model.RangerServiceDef;
@@ -34,6 +40,7 @@ import
org.apache.ranger.plugin.model.RangerServiceDef.RangerEnumDef;
import
org.apache.ranger.plugin.model.RangerServiceDef.RangerPolicyConditionDef;
import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef;
import org.apache.ranger.plugin.model.RangerServiceDef.RangerServiceConfigDef;
+import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
import org.apache.ranger.plugin.store.SecurityZoneStore;
import org.apache.ranger.plugin.store.ServiceStore;
import org.apache.ranger.plugin.util.SearchFilter;
@@ -108,7 +115,7 @@ public class RangerSecurityZoneValidatorTest {
try{
rangerSecurityZoneValidator.validate(suppliedSecurityZone,
RangerValidator.Action.DELETE);
}catch(IllegalArgumentException ex){
- Assert.assertEquals(ex.getMessage(),
"isValid(RangerPolicy, ...) is only supported for create/update");
+ Assert.assertEquals(ex.getMessage(),
"isValid(RangerSecurityZone, ...) is only supported for create/update");
}
}
@@ -161,9 +168,11 @@ public class RangerSecurityZoneValidatorTest {
rangerSecurityZoneValidator.validate(suppliedSecurityZone,
RangerValidator.Action.CREATE);
} catch (Exception ex) {
- Assert.assertEquals(
- ex.getMessage(),
- "(0) Validation failure: error
code[3044], reason[No services specified for security-zone:[MyZone]],
field[services], subfield[null], type[missing] (1) Validation failure: error
code[3038], reason[users, user-groups and roles collections for the security
zone were null/empty], field[security zone admin users/user-groups/roles],
subfield[null], type[missing] (2) Validation failure: error code[3038],
reason[users, user-groups and roles collections for the security zone were
null/empty [...]
+ String failureMessage = ex.getMessage();
+ ValidationErrorCode expectedError =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_MISSING_USER_AND_GROUPS_AND_ROLES;
+ boolean hasExpectedError =
StringUtils.contains(failureMessage, expectedError.getErrorCode() + "");
+
+ Assert.assertTrue("validation failure message didn't
include expected error code " + expectedError.getErrorCode() + ". Failure
message: " + failureMessage, hasExpectedError);
}
}
@@ -357,8 +366,83 @@ public class RangerSecurityZoneValidatorTest {
Assert.assertFalse(isValid);
}
-
-
+ @Test
+ public void testValidatePathResourceInMultipleSecurityZones() throws
Exception {
+ List<HashMap<String, List<String>>> zone1Resources = new
ArrayList<>();
+ List<HashMap<String, List<String>>> zone2Resources = new
ArrayList<>();
+
+ zone1Resources.add(new HashMap<String, List<String>>() {{
put("hdfs", Arrays.asList("/zone1")); }});
+ zone2Resources.add(new HashMap<String, List<String>>() {{
put("hdfs", Arrays.asList("/zone1/a")); }});
+
+ RangerServiceDef svcDef = rangerServiceDef();
+ RangerService svc = getRangerService();
+ RangerSecurityZoneService zone1HdfsSvc = new
RangerSecurityZoneService(zone1Resources);
+ RangerSecurityZoneService zone2HdfsSvc = new
RangerSecurityZoneService(zone2Resources);
+
+ RangerSecurityZone zone1 = new RangerSecurityZone("zone1",
Collections.singletonMap(svc.getName(), zone1HdfsSvc), null,
Arrays.asList("admin"), null, Arrays.asList("auditor"), null, "Zone 1");
+ RangerSecurityZone zone2 = new RangerSecurityZone("zone2",
Collections.singletonMap(svc.getName(), zone2HdfsSvc), null,
Arrays.asList("admin"), null, Arrays.asList("auditor"), null, "Zone 1");
+
+ zone1.setId(1L);
+ zone2.setId(2L);
+
+ List<RangerSecurityZone> zones = new
ArrayList<RangerSecurityZone>() {{ add(zone1); }};
+
+
Mockito.when(_store.getServiceByName(svc.getName())).thenReturn(svc);
+
Mockito.when(_store.getServiceDefByName(svc.getType())).thenReturn(svcDef);
+ Mockito.when(_store.getSecurityZone(2L)).thenReturn(zone2);
+
Mockito.when(_securityZoneStore.getSecurityZones(Mockito.any())).thenReturn(zones);
+
+ try {
+ rangerSecurityZoneValidator.validate(zone2,
RangerValidator.Action.UPDATE);
+
+ Assert.assertFalse("security-zone update should have
failed in validation", true);
+ } catch (Exception excp) {
+ String failureMessage =
excp.getMessage();
+ ValidationErrorCode expectedError =
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ZONE_RESOURCE_CONFLICT;
+ boolean hasExpectedError =
StringUtils.contains(failureMessage, expectedError.getErrorCode() + "");
+
+ Assert.assertTrue("validation failure message didn't
include expected error code " + expectedError.getErrorCode() + ". Failure
message: " + failureMessage, hasExpectedError);
+ }
+ }
+
+ @Test
+ public void testValidateHiveResourceInMultipleSecurityZones() throws
Exception {
+ List<HashMap<String, List<String>>> zone1Resources = new
ArrayList<>();
+ List<HashMap<String, List<String>>> zone2Resources = new
ArrayList<>();
+
+ zone1Resources.add(new HashMap<String, List<String>>() {{
put("database", Arrays.asList("db1")); }});
+ zone2Resources.add(new HashMap<String, List<String>>() {{
put("database", Arrays.asList("db1")); put("table", Arrays.asList("tbl1")); }});
+
+ RangerServiceDef svcDef = getHiveServiceDef();
+ RangerService svc = getHiveService();
+ RangerSecurityZoneService zone1HiveSvc = new
RangerSecurityZoneService(zone1Resources);
+ RangerSecurityZoneService zone2HiveSvc = new
RangerSecurityZoneService(zone2Resources);
+
+ RangerSecurityZone zone1 = new RangerSecurityZone("zone1",
Collections.singletonMap(svc.getName(), zone1HiveSvc), null,
Arrays.asList("admin"), null, Arrays.asList("auditor"), null, "Zone 1");
+ RangerSecurityZone zone2 = new RangerSecurityZone("zone2",
Collections.singletonMap(svc.getName(), zone2HiveSvc), null,
Arrays.asList("admin"), null, Arrays.asList("auditor"), null, "Zone 1");
+
+ zone1.setId(1L);
+ zone2.setId(2L);
+
+ List<RangerSecurityZone> zones = new
ArrayList<RangerSecurityZone>() {{ add(zone1); }};
+
+
Mockito.when(_store.getServiceByName(svc.getName())).thenReturn(svc);
+
Mockito.when(_store.getServiceDefByName(svc.getType())).thenReturn(svcDef);
+ Mockito.when(_store.getSecurityZone(2L)).thenReturn(zone2);
+
Mockito.when(_securityZoneStore.getSecurityZones(Mockito.any())).thenReturn(zones);
+
+ try {
+ rangerSecurityZoneValidator.validate(zone2,
RangerValidator.Action.UPDATE);
+
+ Assert.assertFalse("security-zone update should have
failed in validation", true);
+ } catch (Exception excp) {
+ String failureMessage = excp.getMessage();
+ boolean hasResourceConflictError =
StringUtils.contains(failureMessage,
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ZONE_RESOURCE_CONFLICT.getErrorCode()
+ "");
+
+ Assert.assertTrue("validation failure message didn't
include expected error code " +
ValidationErrorCode.SECURITY_ZONE_VALIDATION_ERR_ZONE_RESOURCE_CONFLICT.getErrorCode()
+ ". Failure message: " + excp.getMessage(), hasResourceConflictError);
+ }
+ }
+
private RangerService getRangerService() {
Map<String, String> configs = new HashMap<String, String>();
configs.put("username", "servicemgr");
@@ -393,6 +477,8 @@ public class RangerSecurityZoneValidatorTest {
RangerResourceDef rangerResourceDef = new RangerResourceDef();
rangerResourceDef.setName("hdfs");
+ rangerResourceDef.setRecursiveSupported(true);
+
rangerResourceDef.setMatcher("org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher");
List<RangerServiceConfigDef> configs = new
ArrayList<RangerServiceConfigDef>();
List<RangerResourceDef> resources = new
ArrayList<RangerResourceDef>();
@@ -421,6 +507,18 @@ public class RangerSecurityZoneValidatorTest {
return rangerServiceDef;
}
+ private RangerService getHiveService() {
+ RangerService ret = new
RangerService(EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_HIVE_NAME, "hiveSvc",
"Test Hive Service", null, new HashMap<>());
+
+ ret.setId(1L);
+
+ return ret;
+ }
+
+ private RangerServiceDef getHiveServiceDef() throws Exception {
+ return
EmbeddedServiceDefsUtil.instance().getEmbeddedServiceDef(EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_HIVE_NAME);
+ }
+
private RangerSecurityZone getRangerSecurityZone(){
List<String> resourceList = new ArrayList<String>();
resourceList.add("/path/myfolder");
@@ -466,7 +564,7 @@ public class RangerSecurityZoneValidatorTest {
SearchFilter filter = new SearchFilter();
filter.setParam(SearchFilter.SERVICE_NAME, "hdfsSvc");
- filter.setParam(SearchFilter.ZONE_NAME, "MyZone");
+ filter.setParam(SearchFilter.NOT_ZONE_NAME, "MyZone");
return filter;
}