summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/providers/ldap/sdap_async.c80
1 files changed, 53 insertions, 27 deletions
diff --git a/src/providers/ldap/sdap_async.c b/src/providers/ldap/sdap_async.c
index ed20b26f..87c125fa 100644
--- a/src/providers/ldap/sdap_async.c
+++ b/src/providers/ldap/sdap_async.c
@@ -1150,9 +1150,9 @@ struct sdap_get_generic_ext_state {
static errno_t sdap_get_generic_ext_step(struct tevent_req *req);
-static void sdap_get_generic_ext_done(struct sdap_op *op,
- struct sdap_msg *reply,
- int error, void *pvt);
+static void sdap_get_generic_op_finished(struct sdap_op *op,
+ struct sdap_msg *reply,
+ int error, void *pvt);
static struct tevent_req *
sdap_get_generic_ext_send(TALLOC_CTX *memctx,
@@ -1351,7 +1351,7 @@ static errno_t sdap_get_generic_ext_step(struct tevent_req *req)
DEBUG(SSSDBG_TRACE_INTERNAL, "ldap_search_ext called, msgid = %d\n", msgid);
ret = sdap_op_add(state, state->ev, state->sh, msgid,
- sdap_get_generic_ext_done, req,
+ sdap_get_generic_op_finished, req,
state->timeout,
&state->op);
if (ret != EOK) {
@@ -1363,9 +1363,9 @@ done:
return ret;
}
-static void sdap_get_generic_ext_done(struct sdap_op *op,
- struct sdap_msg *reply,
- int error, void *pvt)
+static void sdap_get_generic_op_finished(struct sdap_op *op,
+ struct sdap_msg *reply,
+ int error, void *pvt)
{
struct tevent_req *req = talloc_get_type(pvt, struct tevent_req);
struct sdap_get_generic_ext_state *state = tevent_req_data(req,
@@ -1526,6 +1526,31 @@ sdap_get_generic_ext_recv(struct tevent_req *req)
return EOK;
}
+static void generic_ext_search_handler(struct tevent_req *subreq,
+ struct sdap_options *opts)
+{
+ struct tevent_req *req = tevent_req_callback_data(subreq,
+ struct tevent_req);
+ int ret;
+
+ ret = sdap_get_generic_ext_recv(subreq);
+ talloc_zfree(subreq);
+ if (ret == ERR_REFERRAL) {
+ if (dp_opt_get_bool(opts->basic, SDAP_REFERRALS)) {
+ tevent_req_error(req, ret);
+ return;
+ }
+ } else if (ret) {
+ DEBUG(SSSDBG_OP_FAILURE,
+ "sdap_get_generic_ext_recv failed [%d]: %s\n",
+ ret, sss_strerror(ret));
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+}
+
/* ==Generic Search============================================ */
struct sdap_get_generic_state {
struct sdap_attr_map *map;
@@ -1615,24 +1640,8 @@ static void sdap_get_generic_done(struct tevent_req *subreq)
struct tevent_req);
struct sdap_get_generic_state *state =
tevent_req_data(req, struct sdap_get_generic_state);
- int ret;
- ret = sdap_get_generic_ext_recv(subreq);
- talloc_zfree(subreq);
- if (ret == ERR_REFERRAL) {
- if (dp_opt_get_bool(state->opts->basic, SDAP_REFERRALS)) {
- tevent_req_error(req, ret);
- return;
- }
- } else if (ret) {
- DEBUG(SSSDBG_CONF_SETTINGS,
- "sdap_get_generic_ext_recv failed [%d]: %s\n",
- ret, sss_strerror(ret));
- tevent_req_error(req, ret);
- return;
- }
-
- tevent_req_done(req);
+ return generic_ext_search_handler(subreq, state->opts);
}
int sdap_get_generic_recv(struct tevent_req *req,
@@ -1668,6 +1677,7 @@ struct sdap_x_deref_search_state {
struct sdap_op *op;
struct sdap_attr_map_info *maps;
LDAPControl **ctrls;
+ struct sdap_options *opts;
struct sdap_deref_reply dreply;
int num_maps;
@@ -1691,6 +1701,7 @@ sdap_x_deref_search_send(TALLOC_CTX *memctx, struct tevent_context *ev,
state->sh = sh;
state->maps = maps;
state->op = NULL;
+ state->opts = opts;
state->num_maps = num_maps;
state->ctrls = talloc_zero_array(state, LDAPControl *, 2);
if (state->ctrls == NULL) {
@@ -1840,7 +1851,12 @@ done:
static void sdap_x_deref_search_done(struct tevent_req *subreq)
{
- sdap_get_generic_done(subreq);
+ struct tevent_req *req = tevent_req_callback_data(subreq,
+ struct tevent_req);
+ struct sdap_x_deref_search_state *state =
+ tevent_req_data(req, struct sdap_x_deref_search_state);
+
+ return generic_ext_search_handler(subreq, state->opts);
}
static int sdap_x_deref_search_ctrls_destructor(void *ptr)
@@ -2009,7 +2025,12 @@ static errno_t sdap_sd_search_parse_entry(struct sdap_handle *sh,
static void sdap_sd_search_done(struct tevent_req *subreq)
{
- sdap_get_generic_done(subreq);
+ struct tevent_req *req = tevent_req_callback_data(subreq,
+ struct tevent_req);
+ struct sdap_sd_search_state *state =
+ tevent_req_data(req, struct sdap_sd_search_state);
+
+ return generic_ext_search_handler(subreq, state->opts);
}
static int sdap_sd_search_ctrls_destructor(void *ptr)
@@ -2253,7 +2274,12 @@ done:
static void sdap_asq_search_done(struct tevent_req *subreq)
{
- sdap_get_generic_done(subreq);
+ struct tevent_req *req = tevent_req_callback_data(subreq,
+ struct tevent_req);
+ struct sdap_asq_search_state *state =
+ tevent_req_data(req, struct sdap_asq_search_state);
+
+ return generic_ext_search_handler(subreq, state->opts);
}
static int sdap_asq_search_ctrls_destructor(void *ptr)