From 7f91722ff7ca0e3a3cc1bcc70249e20530500414 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Thu, 9 Feb 2012 11:30:03 +0100 Subject: [PATCH] Fix group enumeration Also adds some more debugging and fixes a code style issue. https://fedorahosted.org/sssd/ticket/1182 --- src/responder/common/responder_dp.c | 9 +++++++-- src/responder/nss/nsssrv_cmd.c | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c index 044aa385a4796fdde6e9105092e8cfb8af275835..a116fedd80388cedb5deeab0326ab445601dcea9 100644 --- a/src/responder/common/responder_dp.c +++ b/src/responder/common/responder_dp.c @@ -70,6 +70,7 @@ static int sss_dp_req_destructor(void *ptr) struct sss_dp_callback *cb; struct sss_dp_req *sdp_req = talloc_get_type(ptr, struct sss_dp_req); struct sss_dp_req_state *state; + int hret; /* Cancel Dbus pending reply if still pending */ if (sdp_req->pending_reply) { @@ -105,7 +106,8 @@ static int sss_dp_req_destructor(void *ptr) } /* Destroy the hash entry */ - int hret = hash_delete(sdp_req->rctx->dp_request_table, sdp_req->key); + DEBUG(SSSDBG_TRACE_FUNC, ("Deleting request: [%s]\n", sdp_req->key->str)); + hret = hash_delete(sdp_req->rctx->dp_request_table, sdp_req->key); if (hret != HASH_SUCCESS) { /* This should never happen */ DEBUG(SSSDBG_TRACE_INTERNAL, @@ -259,12 +261,14 @@ sss_dp_issue_request(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx, } key->type = HASH_KEY_STRING; - key->str = talloc_asprintf(key, "%p:%s\n", msg_create, strkey); + key->str = talloc_asprintf(key, "%p:%s", msg_create, strkey); if (!key->str) { ret = ENOMEM; goto fail; } + DEBUG(SSSDBG_TRACE_FUNC, ("Issuing request for [%s]\n", key->str)); + /* Check the hash for existing references to this request */ hret = hash_lookup(rctx->dp_request_table, key, &value); switch (hret) { @@ -667,6 +671,7 @@ sss_dp_internal_get_send(struct resp_ctx *rctx, value.type = HASH_VALUE_PTR; value.ptr = state->sdp_req; + DEBUG(SSSDBG_TRACE_FUNC, ("Entering request [%s]\n", key->str)); hret = hash_enter(rctx->dp_request_table, key, &value); if (hret != HASH_SUCCESS) { DEBUG(SSSDBG_CRIT_FAILURE, diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index e368e3ac6a7d4ad45ab1bcc4daaaefb849b58047..1c9160b7ab824654133a3d34be29bcde8a4a7a17 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -2625,6 +2625,8 @@ static errno_t nss_cmd_setgrent_step(struct setent_step_ctx *step_ctx) if (dctx->check_provider) { step_ctx->returned_to_mainloop = true; /* Only do this once per provider */ + dctx->check_provider = false; + dpreq = sss_dp_get_account_send(step_ctx, rctx, dctx->domain, true, SSS_DP_USER, NULL, 0, NULL); if (!dpreq) { -- 1.7.7.6