Fabiano Fidêncio 3ad9e21
From 2b965403ecc5a6685602859945a4b73d0f5cddcd Mon Sep 17 00:00:00 2001
Fabiano Fidêncio 3ad9e21
From: Jakub Hrozek <jhrozek@redhat.com>
Fabiano Fidêncio 3ad9e21
Date: Wed, 2 May 2018 11:37:55 +0200
Fabiano Fidêncio 3ad9e21
Subject: [PATCH] CACHE_REQ: Do not fail the domain locator plugin if ID
Fabiano Fidêncio 3ad9e21
 outside the domain range is looked up
Fabiano Fidêncio 3ad9e21
MIME-Version: 1.0
Fabiano Fidêncio 3ad9e21
Content-Type: text/plain; charset=UTF-8
Fabiano Fidêncio 3ad9e21
Content-Transfer-Encoding: 8bit
Fabiano Fidêncio 3ad9e21
Fabiano Fidêncio 3ad9e21
A fix for upstream bug #3569 and the domain-locator feature were both
Fabiano Fidêncio 3ad9e21
developed in the context of the same upstream version and therefore
Fabiano Fidêncio 3ad9e21
touched the same code, but the domain locator did not account for the
Fabiano Fidêncio 3ad9e21
ERR_ID_OUTSIDE_RANGE error code.
Fabiano Fidêncio 3ad9e21
Fabiano Fidêncio 3ad9e21
Therefore lookups for IDs that are outside the range for the domain
Fabiano Fidêncio 3ad9e21
caused the whole lookup to fail instead of carrying on to the next
Fabiano Fidêncio 3ad9e21
domain.
Fabiano Fidêncio 3ad9e21
Fabiano Fidêncio 3ad9e21
This patch just handles ERR_ID_OUTSIDE_RANGE the same way as if the ID
Fabiano Fidêncio 3ad9e21
was not found at all. Also some whitespace errors are fixed.
Fabiano Fidêncio 3ad9e21
Fabiano Fidêncio 3ad9e21
Resolves:
Fabiano Fidêncio 3ad9e21
https://pagure.io/SSSD/sssd/issue/3728
Fabiano Fidêncio 3ad9e21
Fabiano Fidêncio 3ad9e21
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
Fabiano Fidêncio 3ad9e21
(cherry picked from commit 2952de740f2ec1da9cbd682fb1d9219e5370e6a1)
Fabiano Fidêncio 3ad9e21
---
Fabiano Fidêncio 3ad9e21
 src/responder/common/cache_req/cache_req.c    |  1 +
Fabiano Fidêncio 3ad9e21
 .../cache_req/plugins/cache_req_common.c      |  2 +-
Fabiano Fidêncio 3ad9e21
 .../cache_req/plugins/cache_req_group_by_id.c |  2 +-
Fabiano Fidêncio 3ad9e21
 src/tests/cmocka/test_responder_cache_req.c   | 32 +++++++++++++++++++
Fabiano Fidêncio 3ad9e21
 4 files changed, 35 insertions(+), 2 deletions(-)
Fabiano Fidêncio 3ad9e21
Fabiano Fidêncio 3ad9e21
diff --git a/src/responder/common/cache_req/cache_req.c b/src/responder/common/cache_req/cache_req.c
Fabiano Fidêncio 3ad9e21
index 134688b0f..28b563392 100644
Fabiano Fidêncio 3ad9e21
--- a/src/responder/common/cache_req/cache_req.c
Fabiano Fidêncio 3ad9e21
+++ b/src/responder/common/cache_req/cache_req.c
Fabiano Fidêncio 3ad9e21
@@ -523,6 +523,7 @@ static void cache_req_locate_dom_cache_done(struct tevent_req *subreq)
Fabiano Fidêncio 3ad9e21
         DEBUG(SSSDBG_TRACE_INTERNAL, "Result found in the cache\n");
Fabiano Fidêncio 3ad9e21
         tevent_req_done(req);
Fabiano Fidêncio 3ad9e21
         return;
Fabiano Fidêncio 3ad9e21
+    case ERR_ID_OUTSIDE_RANGE:
Fabiano Fidêncio 3ad9e21
     case ENOENT:
Fabiano Fidêncio 3ad9e21
         /* Not cached and locator was requested, run the locator
Fabiano Fidêncio 3ad9e21
          * DP request plugin
Fabiano Fidêncio 3ad9e21
diff --git a/src/responder/common/cache_req/plugins/cache_req_common.c b/src/responder/common/cache_req/plugins/cache_req_common.c
Fabiano Fidêncio 3ad9e21
index 240416803..d19ca8912 100644
Fabiano Fidêncio 3ad9e21
--- a/src/responder/common/cache_req/plugins/cache_req_common.c
Fabiano Fidêncio 3ad9e21
+++ b/src/responder/common/cache_req/plugins/cache_req_common.c
Fabiano Fidêncio 3ad9e21
@@ -27,7 +27,7 @@
Fabiano Fidêncio 3ad9e21
 #include "responder/common/cache_req/cache_req_plugin.h"
Fabiano Fidêncio 3ad9e21
 
Fabiano Fidêncio 3ad9e21
 errno_t cache_req_idminmax_check(struct cache_req_data *data,
Fabiano Fidêncio 3ad9e21
-	                         struct sss_domain_info *domain)
Fabiano Fidêncio 3ad9e21
+                                 struct sss_domain_info *domain)
Fabiano Fidêncio 3ad9e21
 {
Fabiano Fidêncio 3ad9e21
    if (((domain->id_min != 0) && (data->id < domain->id_min)) ||
Fabiano Fidêncio 3ad9e21
        ((domain->id_max != 0) && (data->id > domain->id_max))) {
Fabiano Fidêncio 3ad9e21
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
Fabiano Fidêncio 3ad9e21
index 3fb81032b..e0c6b6515 100644
Fabiano Fidêncio 3ad9e21
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
Fabiano Fidêncio 3ad9e21
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
Fabiano Fidêncio 3ad9e21
@@ -85,7 +85,7 @@ cache_req_group_by_id_lookup(TALLOC_CTX *mem_ctx,
Fabiano Fidêncio 3ad9e21
 
Fabiano Fidêncio 3ad9e21
     ret = cache_req_idminmax_check(data, domain);
Fabiano Fidêncio 3ad9e21
     if (ret != EOK) {
Fabiano Fidêncio 3ad9e21
-	return ret;
Fabiano Fidêncio 3ad9e21
+        return ret;
Fabiano Fidêncio 3ad9e21
     }
Fabiano Fidêncio 3ad9e21
     return sysdb_getgrgid_with_views(mem_ctx, domain, data->id, _result);
Fabiano Fidêncio 3ad9e21
 }
Fabiano Fidêncio 3ad9e21
diff --git a/src/tests/cmocka/test_responder_cache_req.c b/src/tests/cmocka/test_responder_cache_req.c
Fabiano Fidêncio 3ad9e21
index 252d89dad..45d71b83b 100644
Fabiano Fidêncio 3ad9e21
--- a/src/tests/cmocka/test_responder_cache_req.c
Fabiano Fidêncio 3ad9e21
+++ b/src/tests/cmocka/test_responder_cache_req.c
Fabiano Fidêncio 3ad9e21
@@ -1827,6 +1827,37 @@ void test_group_by_id_multiple_domains_notfound(void **state)
Fabiano Fidêncio 3ad9e21
     assert_true(test_ctx->dp_called);
Fabiano Fidêncio 3ad9e21
 }
Fabiano Fidêncio 3ad9e21
 
Fabiano Fidêncio 3ad9e21
+void test_group_by_id_multiple_domains_outside_id_range(void **state)
Fabiano Fidêncio 3ad9e21
+{
Fabiano Fidêncio 3ad9e21
+    struct cache_req_test_ctx *test_ctx = NULL;
Fabiano Fidêncio 3ad9e21
+    struct sss_domain_info *domain = NULL;
Fabiano Fidêncio 3ad9e21
+    struct sss_domain_info *domain_a = NULL;
Fabiano Fidêncio 3ad9e21
+
Fabiano Fidêncio 3ad9e21
+    test_ctx = talloc_get_type_abort(*state, struct cache_req_test_ctx);
Fabiano Fidêncio 3ad9e21
+
Fabiano Fidêncio 3ad9e21
+    domain_a = find_domain_by_name(test_ctx->tctx->dom,
Fabiano Fidêncio 3ad9e21
+                                   "responder_cache_req_test_a", true);
Fabiano Fidêncio 3ad9e21
+    assert_non_null(domain_a);
Fabiano Fidêncio 3ad9e21
+    domain_a->id_min = 1;
Fabiano Fidêncio 3ad9e21
+    domain_a->id_max = 100;
Fabiano Fidêncio 3ad9e21
+
Fabiano Fidêncio 3ad9e21
+    /* Setup group. */
Fabiano Fidêncio 3ad9e21
+    domain = find_domain_by_name(test_ctx->tctx->dom,
Fabiano Fidêncio 3ad9e21
+                                 "responder_cache_req_test_d", true);
Fabiano Fidêncio 3ad9e21
+    assert_non_null(domain);
Fabiano Fidêncio 3ad9e21
+    prepare_group(domain, &groups[0], 1000, time(NULL));
Fabiano Fidêncio 3ad9e21
+
Fabiano Fidêncio 3ad9e21
+    /* Mock values. */
Fabiano Fidêncio 3ad9e21
+    will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
Fabiano Fidêncio 3ad9e21
+    will_return_always(sss_dp_req_recv, 0);
Fabiano Fidêncio 3ad9e21
+    will_return_always(sss_dp_get_account_domain_recv, ERR_GET_ACCT_DOM_NOT_SUPPORTED);
Fabiano Fidêncio 3ad9e21
+
Fabiano Fidêncio 3ad9e21
+    /* Test. */
Fabiano Fidêncio 3ad9e21
+    run_group_by_id(test_ctx, NULL, 0, ERR_OK);
Fabiano Fidêncio 3ad9e21
+    assert_true(test_ctx->dp_called);
Fabiano Fidêncio 3ad9e21
+    check_group(test_ctx, &groups[0], domain);
Fabiano Fidêncio 3ad9e21
+}
Fabiano Fidêncio 3ad9e21
+
Fabiano Fidêncio 3ad9e21
 void test_group_by_id_multiple_domains_locator_cache_valid(void **state)
Fabiano Fidêncio 3ad9e21
 {
Fabiano Fidêncio 3ad9e21
     struct cache_req_test_ctx *test_ctx = NULL;
Fabiano Fidêncio 3ad9e21
@@ -3970,6 +4001,7 @@ int main(int argc, const char *argv[])
Fabiano Fidêncio 3ad9e21
         new_single_domain_test(group_by_id_missing_notfound),
Fabiano Fidêncio 3ad9e21
         new_multi_domain_test(group_by_id_multiple_domains_found),
Fabiano Fidêncio 3ad9e21
         new_multi_domain_test(group_by_id_multiple_domains_notfound),
Fabiano Fidêncio 3ad9e21
+        new_multi_domain_test(group_by_id_multiple_domains_outside_id_range),
Fabiano Fidêncio 3ad9e21
 
Fabiano Fidêncio 3ad9e21
         new_multi_domain_test(group_by_id_multiple_domains_locator_cache_valid),
Fabiano Fidêncio 3ad9e21
         new_multi_domain_test(group_by_id_multiple_domains_locator_cache_expired),
Fabiano Fidêncio 3ad9e21
-- 
Fabiano Fidêncio 3ad9e21
2.17.0
Fabiano Fidêncio 3ad9e21