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

pradeep 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 2c8a947  RANGER-2430 : Zoneadmin User is able to create policy for 
those services which is not associated to zone
2c8a947 is described below

commit 2c8a947f800d705867f5f6a22e6d738b3c5a3d19
Author: Bhavik Patel <[email protected]>
AuthorDate: Mon May 20 15:49:38 2019 +0530

    RANGER-2430 : Zoneadmin User is able to create policy for those services 
which is not associated to zone
    
    Signed-off-by: Pradeep <[email protected]>
---
 .../ranger/plugin/errors/ValidationErrorCode.java  |  1 +
 .../model/validation/RangerPolicyValidator.java    | 12 ++++
 .../validation/TestRangerPolicyValidator.java      | 64 ++++++++++++++++++++++
 3 files changed, 77 insertions(+)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
index 3111037..800b3c4 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
@@ -98,6 +98,7 @@ public enum ValidationErrorCode {
     POLICY_VALIDATION_ERR_POLICY_INVALID_PRIORITY(3030, "Invalid priority 
value"),
     POLICY_VALIDATION_ERR_UPDATE_ZONE_NAME_NOT_ALLOWED(3032, "Update of Zone 
name from={0} to={1} in policy is not supported"),
     POLICY_VALIDATION_ERR_NONEXISTANT_ZONE_NAME(3033, "Non-existent Zone 
name={0} in policy create"),
+    POLICY_VALIDATION_ERR_SERVICE_NOT_ASSOCIATED_TO_ZONE(3048, "Service name = 
{0} is not associated to Zone name = {1}"),
 
     // SECURITY_ZONE Validations
     SECURITY_ZONE_VALIDATION_ERR_UNSUPPORTED_ACTION(3034, "Internal error: 
unsupported action[{0}]; isValid() is only supported for DELETE"),
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
index 990aab0..5316bae 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java
@@ -210,6 +210,18 @@ public class RangerPolicyValidator extends RangerValidator 
{
                                                        .build());
                                        valid = false;
                                }
+                               List<String> tagSvcList = zone.getTagServices();
+                               Set<String> svcNameSet = 
zone.getServices().keySet();
+                               if(!svcNameSet.contains(serviceName) && 
!tagSvcList.contains(serviceName)){
+                                       ValidationErrorCode error = 
ValidationErrorCode.POLICY_VALIDATION_ERR_SERVICE_NOT_ASSOCIATED_TO_ZONE;
+                                       failures.add(new 
ValidationFailureDetailsBuilder()
+                                                       .field("zoneName")
+                                                       
.isSemanticallyIncorrect()
+                                                       
.becauseOf(error.getMessage(serviceName, zoneName))
+                                                       
.errorCode(error.getErrorCode())
+                                                       .build());
+                                       valid = false;
+                               }
                        }
 
                        if (StringUtils.isBlank(policyName)) {
diff --git 
a/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerPolicyValidator.java
 
b/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerPolicyValidator.java
index 2c1de4e..e6d90a4 100644
--- 
a/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerPolicyValidator.java
+++ 
b/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerPolicyValidator.java
@@ -806,6 +806,70 @@ public class TestRangerPolicyValidator {
                _utils.checkFailureForSemanticError(_failures, "policy 
resources", "missing mandatory");
        }
        
+       @Test
+       public final void test_isValidServiceWithZone_happyPath() throws 
Exception{
+               boolean isAdmin = true;
+               when(_policy.getId()).thenReturn(1L);
+               when(_policy.getName()).thenReturn("my-all");
+               when(_policy.getService()).thenReturn("hdfssvc");
+               when(_policy.getZoneName()).thenReturn("zone1");
+               when(_policy.getResources()).thenReturn(null);
+               when(_policy.getIsAuditEnabled()).thenReturn(Boolean.TRUE);
+               when(_policy.getIsEnabled()).thenReturn(Boolean.FALSE);
+               RangerService service = new RangerService();
+               service.setType("service-type");
+               service.setId(2L);
+               Action action = Action.CREATE;
+               List<String> tagSvcList = new ArrayList<String>();
+               tagSvcList.add("hdfssvc");
+               when(_store.getServiceByName("hdfssvc")).thenReturn(service);
+               RangerSecurityZone securityZone = new RangerSecurityZone();
+               securityZone.setName("zone1");
+               securityZone.setId(1L);
+               securityZone.setTagServices(tagSvcList);
+               when(_store.getSecurityZone("zone1")).thenReturn(securityZone);
+               when(_store.getPolicyId(2L, "my-all", 1L)).thenReturn(null);
+               RangerServiceDef svcDef = new RangerServiceDef();
+               svcDef.setName("my-svc-def");
+               
when(_store.getServiceDefByName("service-type")).thenReturn(svcDef);
+               RangerPolicyResourceSignature policySignature = 
mock(RangerPolicyResourceSignature.class);
+               
when(_factory.createPolicyResourceSignature(_policy)).thenReturn(policySignature);
+               Assert.assertTrue(_validator.isValid(_policy, action, isAdmin, 
_failures));
+       }
+
+       @Test
+       public final void test_isValidServiceWithZone_failurePath() throws 
Exception{
+               boolean isAdmin = true;
+               when(_policy.getId()).thenReturn(1L);
+               when(_policy.getName()).thenReturn("my-all");
+               when(_policy.getService()).thenReturn("hdfssvc1");
+               when(_policy.getZoneName()).thenReturn("zone1");
+               when(_policy.getResources()).thenReturn(null);
+               when(_policy.getIsAuditEnabled()).thenReturn(Boolean.TRUE);
+               when(_policy.getIsEnabled()).thenReturn(Boolean.FALSE);
+               RangerService service = new RangerService();
+               service.setType("service-type");
+               service.setId(2L);
+               Action action = Action.CREATE;
+               List<String> tagSvcList = new ArrayList<String>();
+               tagSvcList.add("hdfssvc");
+               when(_store.getServiceByName("hdfssvc1")).thenReturn(service);
+               RangerSecurityZone securityZone = new RangerSecurityZone();
+               securityZone.setName("zone1");
+               securityZone.setId(1L);
+               securityZone.setTagServices(tagSvcList);
+               when(_store.getSecurityZone("zone1")).thenReturn(securityZone);
+               when(_store.getPolicyId(2L, "my-all", 1L)).thenReturn(null);
+               RangerServiceDef svcDef = new RangerServiceDef();
+               svcDef.setName("my-svc-def");
+               
when(_store.getServiceDefByName("service-type")).thenReturn(svcDef);
+               RangerPolicyResourceSignature policySignature = 
mock(RangerPolicyResourceSignature.class);
+               
when(_factory.createPolicyResourceSignature(_policy)).thenReturn(policySignature);
+               boolean isValid = _validator.isValid(_policy, action, isAdmin, 
_failures);
+               Assert.assertFalse(isValid);
+               Assert.assertEquals(_failures.get(0)._errorCode, 3048);
+               Assert.assertEquals(_failures.get(0)._reason,"Service name = 
hdfssvc1 is not associated to Zone name = zone1");
+       }
        
        private ValidationTestUtils _utils = new ValidationTestUtils();
        private List<ValidationFailureDetails> _failures = new 
ArrayList<ValidationFailureDetails>();

Reply via email to