----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/73981/#review224432 -----------------------------------------------------------
agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java Line 966 (original), 966 (patched) <https://reviews.apache.org/r/73981/#comment313233> Please consider renaming newAccessTypes as uniqueAccesses. Also, it can be written as Set<String> uniqueAccesses = new HashSet<>(); agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java Lines 967 (patched) <https://reviews.apache.org/r/73981/#comment313235> Consider naming itrRangerPoicyAccesses simply as accessTypeIterator. agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java Lines 982 (patched) <https://reviews.apache.org/r/73981/#comment313234> The following rewrite will avoid checking validity of a duplicate access-type repeatedly. if (uniqueAccesses.contains(access.getType()) { itrRangerPolicyAcccess.remove(); } else { valid = isValidPolicyItemAccess(access, failures, accessTypes) && valid; uniqueAccesses.add(access.getType()); } - Abhay Kulkarni On May 10, 2022, 7:43 a.m., Pradeep Agrawal wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/73981/ > ----------------------------------------------------------- > > (Updated May 10, 2022, 7:43 a.m.) > > > Review request for ranger, bhavik patel, Dhaval Shah, Abhay Kulkarni, Madhan > Neethiraj, Ramesh Mani, Sailaja Polavarapu, and Velmurugan Periasamy. > > > Bugs: RANGER-3752 > https://issues.apache.org/jira/browse/RANGER-3752 > > > Repository: ranger > > > Description > ------- > > **Problem Statement:** While making a REST request to create Ranger policy, > it is possible that user can put same access type more than one. Since there > is no validation or restriction on duplicate entry of access type in the same > policy resource-policy items, policy get created successfully and policy text > json contains duplicate entries. > When user makes a GET request then duplicate entries are also shown. To > display the policy content, policy is read from policy text column of > x_policy table, since json entry also contains duplicate entry user will get > duplicate entry of access permission as response. > > This is not an issue if user uses create/update policy rest from Ranger UI as > restriction is placed from UI itself. > > **Steps to reproduce:** > 1. Make the following request to create ranger policy in the "dev_hive" > service (if needed, please change the request data as per you env) > > curl -ivk --header text/json -H 'Content-Type: text/json' -u admin:admin -X > POST http://localhost:6080/service/public/v2/api/policy -d > '{"service":"dev_hive","name":"URL policy: > /dev/db/table/resource","policyType":0,"policyPriority":0,"isAuditEnabled":true,"resources":{"url":{"values":["hdfs://localhost/dev/db/table/resource"],"isExcludes":false,"isRecursive":true}},"policyItems":[{"accesses":[{"type":"alter","isAllowed":true},{"type":"drop","isAllowed":true},{"type":"select","isAllowed":true},{"type":"create","isAllowed":true},{"type":"update","isAllowed":true},{"type":"lock","isAllowed":true},{"type":"all","isAllowed":true},{"type":"alter","isAllowed":true},{"type":"drop","isAllowed":true},{"type":"select","isAllowed":true},{"type":"create","isAllowed":true},{"type":"update","isAllowed":true},{"type":"lock","isAllowed":true},{"type":"all","isAllowed":true}],"users":[],"groups":["public"],"roles":[],"conditions":[],"delegateAdmin":true}],"denyPolicyItems":[],"allowExceptions":[], "denyExceptions":[{"accesses":[{"type":"alter","isAllowed":true},{"type":"drop","isAllowed":true},{"type":"select","isAllowed":true},{"type":"create","isAllowed":true},{"type":"update","isAllowed":true},{"type":"lock","isAllowed":true},{"type":"all","isAllowed":true},{"type":"alter","isAllowed":true},{"type":"drop","isAllowed":true},{"type":"select","isAllowed":true},{"type":"create","isAllowed":true},{"type":"update","isAllowed":true},{"type":"lock","isAllowed":true},{"type":"all","isAllowed":true}],"users":[],"groups":["public"],"roles":[],"conditions":[],"delegateAdmin":true}],"dataMaskPolicyItems":[],"rowFilterPolicyItems":[],"serviceType":"hive","options":{},"validitySchedules":[],"policyLabels":[],"zoneName":"","isDenyAllElse":false}' > > > 2. make a curl request to get the policy and compare the json. json content > will be having the duplicate entries of access permissions as provided in the > create policy request. > > **Proposed solution:** > Option-1: Since policy validation is done before policy creation, hence > during validation phase we can filter out duplicate access permissions. > Option-2: Add a validation to detect duplicate entries of access-permissions > and if there are any duplicate entries then fail the policy request. > > I have provided the patch with option-1 mentioned above. > > > Diffs > ----- > > > agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java > fb6556b59 > > > Diff: https://reviews.apache.org/r/73981/diff/1/ > > > Testing > ------- > > With patch tested the create policy request with duplicate access-permissions > entries, policy was created successfully and get request is not having > duplicate access-permissions entries. > With patch tested the update policy request with duplicate access-permissions > entries, policy was updated successfully and get request is not having > duplicate access-permissions entries. > > > Thanks, > > Pradeep Agrawal > >