summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/providers/ad/ad_access.c8
-rw-r--r--src/tests/cmocka/test_ad_access_filter.c16
2 files changed, 24 insertions, 0 deletions
diff --git a/src/providers/ad/ad_access.c b/src/providers/ad/ad_access.c
index c16f04942..6995172db 100644
--- a/src/providers/ad/ad_access.c
+++ b/src/providers/ad/ad_access.c
@@ -169,12 +169,20 @@ ad_parse_access_filter(TALLOC_CTX *mem_ctx,
int flags;
TALLOC_CTX *tmp_ctx;
+ if (_filter == NULL) return EINVAL;
+
tmp_ctx = talloc_new(mem_ctx);
if (tmp_ctx == NULL) {
ret = ENOMEM;
goto done;
}
+ if (filter_list == NULL) {
+ *_filter = NULL;
+ ret = EOK;
+ goto done;
+ }
+
ret = split_on_separator(tmp_ctx, filter_list, '?', true, true,
&filters, &nfilters);
if (ret != EOK) {
diff --git a/src/tests/cmocka/test_ad_access_filter.c b/src/tests/cmocka/test_ad_access_filter.c
index e31f2dc37..3f4e44f14 100644
--- a/src/tests/cmocka/test_ad_access_filter.c
+++ b/src/tests/cmocka/test_ad_access_filter.c
@@ -99,6 +99,18 @@ done:
talloc_free(tmp_ctx);
}
+/* Test that setting no filter lets all access through
+ */
+void test_no_filter(void **state)
+{
+ struct filter_parse_result expected = {
+ .result = EOK,
+ .best_match = NULL
+ };
+
+ test_parse_filter_generic(NULL, &expected);
+}
+
/* Test that if one filter is provided, it is returned as-is
*/
void test_single_filter(void **state)
@@ -304,6 +316,10 @@ int main(int argc, const char *argv[])
parse_test_setup,
parse_test_teardown),
+ unit_test_setup_teardown(test_no_filter,
+ ad_access_filter_test_setup,
+ ad_access_filter_test_teardown),
+
unit_test_setup_teardown(test_single_filter,
ad_access_filter_test_setup,
ad_access_filter_test_teardown),