Repository: ranger Updated Branches: refs/heads/master c85ef5476 -> aca4c3b54
RANGER-2000: NPE in ValiditySchedule validation Project: http://git-wip-us.apache.org/repos/asf/ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/aca4c3b5 Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/aca4c3b5 Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/aca4c3b5 Branch: refs/heads/master Commit: aca4c3b5438e0e52b1e2d24a7e322278d36c7ffc Parents: c85ef54 Author: Abhay Kulkarni <akulka...@hortonworks.com> Authored: Thu Mar 8 11:00:31 2018 -0800 Committer: Abhay Kulkarni <akulka...@hortonworks.com> Committed: Thu Mar 8 11:00:31 2018 -0800 ---------------------------------------------------------------------- .../RangerValidityScheduleValidator.java | 21 +++--- .../test-validity-schedules-invalid.json | 70 +++++++++++++++++++- ...validity-schedules-valid-and-applicable.json | 6 +- 3 files changed, 83 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ranger/blob/aca4c3b5/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidityScheduleValidator.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidityScheduleValidator.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidityScheduleValidator.java index 63e8bc0..4557b9f 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidityScheduleValidator.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerValidityScheduleValidator.java @@ -141,7 +141,7 @@ public class RangerValidityScheduleValidator { for (RangerValidityRecurrence recurrence : validitySchedule.getRecurrences()) { ret = validateValidityInterval(recurrence, validationFailures) && ret; - if (RangerValidityRecurrence.ValidityInterval.getValidityIntervalInMinutes(recurrence.getInterval()) > 0) { + if (ret) { ret = validateFieldSpec(recurrence, RangerValidityRecurrence.RecurrenceSchedule.ScheduleFieldSpec.minute, validationFailures) && ret; ret = validateFieldSpec(recurrence, RangerValidityRecurrence.RecurrenceSchedule.ScheduleFieldSpec.hour, validationFailures) && ret; ret = validateFieldSpec(recurrence, RangerValidityRecurrence.RecurrenceSchedule.ScheduleFieldSpec.dayOfMonth, validationFailures) && ret; @@ -156,7 +156,6 @@ public class RangerValidityScheduleValidator { getNormalizedValue(recurrence, RangerValidityRecurrence.RecurrenceSchedule.ScheduleFieldSpec.month), getNormalizedValue(recurrence, RangerValidityRecurrence.RecurrenceSchedule.ScheduleFieldSpec.year)); RangerValidityRecurrence normalizedRecurrence = new RangerValidityRecurrence(schedule, recurrence.getInterval()); normalizedValiditySchedule.getRecurrences().add(normalizedRecurrence); - } } } @@ -174,22 +173,24 @@ public class RangerValidityScheduleValidator { } private boolean validateValidityInterval(RangerValidityRecurrence recurrence, List<ValidationFailureDetails> validationFailures) { - boolean ret = true; - RangerValidityRecurrence.ValidityInterval validityInterval = recurrence.getInterval(); - if (validityInterval != null) { + boolean ret = recurrence.getInterval() != null && recurrence.getSchedule() != null; + + if (ret) { + RangerValidityRecurrence.ValidityInterval validityInterval = recurrence.getInterval(); + if (validityInterval.getDays() < 0 - || (validityInterval.getHours() < 0 || validityInterval.getHours() > 23) - || (validityInterval.getMinutes() < 0 || validityInterval.getMinutes() > 59)) { + || (validityInterval.getHours() < 0 || validityInterval.getHours() > 23) + || (validityInterval.getMinutes() < 0 || validityInterval.getMinutes() > 59)) { validationFailures.add(new ValidationFailureDetails(0, "interval", "", false, true, false, "invalid interval")); ret = false; } - } - int validityIntervalInMinutes = RangerValidityRecurrence.ValidityInterval.getValidityIntervalInMinutes(validityInterval); - if (validityIntervalInMinutes > 0) { + if (StringUtils.isBlank(recurrence.getSchedule().getDayOfMonth()) && StringUtils.isBlank(recurrence.getSchedule().getDayOfWeek())) { validationFailures.add(new ValidationFailureDetails(0, "validitySchedule", "", false, true, false, "empty dayOfMonth and dayOfWeek")); ret = false; } + } else { + validationFailures.add(new ValidationFailureDetails(0, "recurrence", "schedule/interval", true, true, false, "empty schedule/interval in recurrence spec")); } return ret; } http://git-wip-us.apache.org/repos/asf/ranger/blob/aca4c3b5/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-invalid.json ---------------------------------------------------------------------- diff --git a/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-invalid.json b/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-invalid.json index ed62828..321df65 100644 --- a/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-invalid.json +++ b/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-invalid.json @@ -95,7 +95,7 @@ "result": { "isValid": false, "isApplicable": false, - "validationFailureCount": 1 + "validationFailureCount": 2 } }, { @@ -143,4 +143,72 @@ "validationFailureCount": 1 } } + , + { + "name": "schedule blank", + + "validitySchedules": [ + { + "startTime": "2018/01/12 14:32:00", + "endTime": "2020/01/23 06:30:00", + "recurrences": [ + { + "interval": {"minutes": 10 } + } + ] + } + ], + "accessTime": "20180112-14:32:27.000-0800", + "result": { + "isValid": false, + "isApplicable": false, + "validationFailureCount": 1 + } + } + , + { + "name": "interval blank", + + "validitySchedules": [ + { + "startTime": "2018/01/12 14:32:00", + "endTime": "2020/01/23 06:30:00", + "recurrences": [ + { + "schedule": {"minute": "45, 30, 1, 14", "hour": "*, 0,20, 21", "dayOfMonth": "", "dayOfWeek": "2", "month": "12, 1-2", "year": "2018"} + } + ] + } + ], + "accessTime": "20180112-14:32:27.000-0800", + "result": { + "isValid": false, + "isApplicable": false, + "validationFailureCount": 1 + } + }, + { + "name": "schedule and interval blank", + + "validitySchedules": [ + { + "startTime": "2018/01/12 14:32:00", + "endTime": "2020/01/23 06:30:00", + "recurrences": [ + { + "schedule": {"minute": "45, 30, 1, 14", "hour": "*, 0,20, 21", "dayOfMonth": "", "dayOfWeek": "2", "month": "12, 1-2", "year": "2018"} + }, + { + "interval": {"minutes": 10 } + } + ] + } + ], + "accessTime": "20180112-14:32:27.000-0800", + "result": { + "isValid": false, + "isApplicable": false, + "validationFailureCount": 2 + } + } ] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ranger/blob/aca4c3b5/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-valid-and-applicable.json ---------------------------------------------------------------------- diff --git a/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-valid-and-applicable.json b/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-valid-and-applicable.json index 38921d7..7df6fcf 100644 --- a/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-valid-and-applicable.json +++ b/agents-common/src/test/resources/policyengine/validityscheduler/test-validity-schedules-valid-and-applicable.json @@ -8,7 +8,7 @@ "recurrences": [ { "schedule": { - "minute": "60", + "minute": "30", "hour": "*", "dayOfMonth": "*", "dayOfWeek": "5, 7", @@ -16,7 +16,7 @@ "year": "2018" }, "interval": { - "minutes": 0 + "minutes": 10 } } ] @@ -45,7 +45,7 @@ "month": "*", "year": "2018" }, - "inteval": { + "interval": { "minutes": 9 } }