diff options
author | Fabiano Fidêncio <fidencio@redhat.com> | 2017-05-29 14:58:33 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2017-06-05 17:21:24 +0200 |
commit | c8193b1602cf44740b59f5dfcdc5330508c0c365 (patch) | |
tree | bda389da14746ae391e2b9b4533bf6e46b3402fc /src/responder | |
parent | c62dc2ac02253e130991db0f6acd60ce1a2753f1 (diff) | |
download | sssd-c8193b1602cf44740b59f5dfcdc5330508c0c365.tar.gz sssd-c8193b1602cf44740b59f5dfcdc5330508c0c365.tar.xz sssd-c8193b1602cf44740b59f5dfcdc5330508c0c365.zip |
CACHE_REQ: Simplify _search_ncache_filter()
Let's make the result and input/output argument for
_search_ncache_filter() and free it inside the function whenever it's
needed instead of leaving this responsibility for the caller.
Related:
https://pagure.io/SSSD/sssd/issue/3362
Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/responder')
-rw-r--r-- | src/responder/common/cache_req/cache_req_search.c | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/src/responder/common/cache_req/cache_req_search.c b/src/responder/common/cache_req/cache_req_search.c index 70448a763..d3aaa7542 100644 --- a/src/responder/common/cache_req/cache_req_search.c +++ b/src/responder/common/cache_req/cache_req_search.c @@ -86,7 +86,6 @@ static void cache_req_search_ncache_add(struct cache_req *cr) static errno_t cache_req_search_ncache_filter(TALLOC_CTX *mem_ctx, struct cache_req *cr, - struct ldb_result *result, struct ldb_result **_result) { TALLOC_CTX *tmp_ctx; @@ -106,8 +105,6 @@ static errno_t cache_req_search_ncache_filter(TALLOC_CTX *mem_ctx, "This request type does not support filtering " "result by negative cache\n"); - *_result = talloc_steal(mem_ctx, result); - ret = EOK; goto done; } @@ -115,11 +112,11 @@ static errno_t cache_req_search_ncache_filter(TALLOC_CTX *mem_ctx, CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr, "Filtering out results by negative cache\n"); - msgs = talloc_zero_array(tmp_ctx, struct ldb_message *, result->count); + msgs = talloc_zero_array(tmp_ctx, struct ldb_message *, (*_result)->count); msg_count = 0; - for (size_t i = 0; i < result->count; i++) { - name = sss_get_name_from_msg(cr->domain, result->msgs[i]); + for (size_t i = 0; i < (*_result)->count; i++) { + name = sss_get_name_from_msg(cr->domain, (*_result)->msgs[i]); if (name == NULL) { CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, cr, "sss_get_name_from_msg() returned NULL, which should never " @@ -141,7 +138,7 @@ static errno_t cache_req_search_ncache_filter(TALLOC_CTX *mem_ctx, goto done; } - msgs[msg_count] = talloc_steal(msgs, result->msgs[i]); + msgs[msg_count] = talloc_steal(msgs, (*_result)->msgs[i]); msg_count++; } @@ -157,6 +154,7 @@ static errno_t cache_req_search_ncache_filter(TALLOC_CTX *mem_ctx, goto done; } + talloc_zfree(*_result); *_result = talloc_steal(mem_ctx, filtered_result); ret = EOK; @@ -419,10 +417,8 @@ static void cache_req_search_oob_done(struct tevent_req *subreq) static void cache_req_search_done(struct tevent_req *subreq) { - TALLOC_CTX *tmp_ctx; struct cache_req_search_state *state; struct tevent_req *req; - struct ldb_result *result = NULL; errno_t ret; req = tevent_req_callback_data(subreq, struct tevent_req); @@ -431,14 +427,8 @@ static void cache_req_search_done(struct tevent_req *subreq) state->dp_success = state->cr->plugin->dp_recv_fn(subreq, state->cr); talloc_zfree(subreq); - tmp_ctx = talloc_new(NULL); - if (tmp_ctx == NULL) { - ret = ENOMEM; - goto done; - } - /* Get result from cache again. */ - ret = cache_req_search_cache(tmp_ctx, state->cr, &result); + ret = cache_req_search_cache(state, state->cr, &state->result); if (ret != EOK) { if (ret == ENOENT) { /* Only store entry in negative cache if DP request succeeded @@ -451,8 +441,7 @@ static void cache_req_search_done(struct tevent_req *subreq) } /* ret == EOK */ - ret = cache_req_search_ncache_filter(state, state->cr, result, - &state->result); + ret = cache_req_search_ncache_filter(state, state->cr, &state->result); if (ret != EOK) { goto done; } @@ -461,8 +450,6 @@ static void cache_req_search_done(struct tevent_req *subreq) "Returning updated object [%s]\n", state->cr->debugobj); done: - talloc_free(tmp_ctx); - if (ret != EOK) { tevent_req_error(req, ret); return; |