diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2013-08-27 11:59:10 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-08-28 18:06:57 +0200 |
commit | 8ca73915a3bf60331468fed6b3b38652c979f95d (patch) | |
tree | 171ddde5d4870d00f71b2953804a033c6f418180 /src/providers/ldap/sdap_reinit.c | |
parent | 25e64abcac8db1d6a9efc7195259f760cebede54 (diff) | |
download | sssd-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.c | 13 |
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; } |