summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap/sdap_reinit.c
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2013-08-27 11:59:10 +0200
committerJakub Hrozek <jhrozek@redhat.com>2013-08-28 18:06:57 +0200
commit8ca73915a3bf60331468fed6b3b38652c979f95d (patch)
tree171ddde5d4870d00f71b2953804a033c6f418180 /src/providers/ldap/sdap_reinit.c
parent25e64abcac8db1d6a9efc7195259f760cebede54 (diff)
downloadsssd-8ca73915a3bf60331468fed6b3b38652c979f95d.tar.gz
sssd-8ca73915a3bf60331468fed6b3b38652c979f95d.tar.xz
sssd-8ca73915a3bf60331468fed6b3b38652c979f95d.zip
LDAP: Move the ldap enum request to its own reusable module
The LDAP enumeration was too closely tied to the LDAP identity provider. Because some providers might need special handling such as refresh the master domain record before proceeding with the enumeration itself, this patch splits the request itself to a separate async request and lets the ldap_id_enum.c module only configure this new request. Also move the enum timestamp to sdap_domain to make the enum tracking per sdap domain. The cleanup timestamp will be moved in another patch.
Diffstat (limited to 'src/providers/ldap/sdap_reinit.c')
-rw-r--r--src/providers/ldap/sdap_reinit.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/providers/ldap/sdap_reinit.c b/src/providers/ldap/sdap_reinit.c
index b273c1a66..d7b50bbbd 100644
--- a/src/providers/ldap/sdap_reinit.c
+++ b/src/providers/ldap/sdap_reinit.c
@@ -25,6 +25,7 @@
#include "util/util.h"
#include "providers/ldap/ldap_common.h"
+#include "providers/ldap/sdap_async_enum.h"
#include "db/sysdb.h"
#include "db/sysdb_services.h"
@@ -79,7 +80,8 @@ struct tevent_req* sdap_reinit_cleanup_send(TALLOC_CTX *mem_ctx,
goto immediately;
}
- subreq = ldap_id_enumerate_send(be_ctx->ev, id_ctx);
+ subreq = sdap_dom_enum_send(id_ctx, be_ctx->ev, id_ctx,
+ id_ctx->opts->sdom, id_ctx->conn);
if (subreq == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE, ("Unable to issue enumeration request\n"));
ret = ENOMEM;
@@ -199,17 +201,16 @@ static void sdap_reinit_cleanup_done(struct tevent_req *subreq)
{
struct tevent_req *req = NULL;
struct sdap_reinit_cleanup_state *state = NULL;
- enum tevent_req_state tstate;
- uint64_t err;
errno_t ret;
req = tevent_req_callback_data(subreq, struct tevent_req);
state = tevent_req_data(req, struct sdap_reinit_cleanup_state);
- if (tevent_req_is_error(subreq, &tstate, &err)) {
- ret = err;
+ ret = sdap_dom_enum_recv(subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
DEBUG(SSSDBG_CRIT_FAILURE, ("Domain enumeration failed [%d]: %s\n",
- err, strerror(err)));
+ ret, strerror(ret)));
goto fail;
}