summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-07-01 17:36:04 -0400
committerNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-07-01 17:36:04 -0400
commit46256aee83025c3e8efa5925c4c80e1b73590ae4 (patch)
tree8462e4ec7c062d23357a297d01ab7bfac3004d96 /src
parentbcb77d8c1c8d10a09bfa434ade8d25cba5b9f809 (diff)
- start sending result information back to the client
Diffstat (limited to 'src')
-rw-r--r--src/back-sch.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/back-sch.c b/src/back-sch.c
index ef49069..31a2e67 100644
--- a/src/back-sch.c
+++ b/src/back-sch.c
@@ -639,13 +639,17 @@ backend_update_params(struct plugin_state *state)
* crack at it. */
struct backend_search_cbdata {
Slapi_PBlock *pb;
- bool_t answered;
struct plugin_state *state;
char *target, *strfilter, **attrs;
int scope, sizelimit, timelimit, attrsonly;
bool_t check_aci;
Slapi_DN *target_dn;
Slapi_Filter *filter;
+
+ bool_t answer;
+ int result;
+ const char *matched, *text;
+ int n_entries;
};
static bool_t
@@ -665,27 +669,37 @@ backend_search_set_cb(const char *domain, const char *map, bool_t secure,
sdn = slapi_entry_get_sdn(entry_data->e);
/* Scope check. */
if (slapi_sdn_scope_test(sdn, cbdata->target_dn, cbdata->scope) == 0) {
- /* Fail. Return. */
+ /* No match. Return. */
return TRUE;
}
/* Filter check. */
result = slapi_filter_test(cbdata->pb, entry_data->e,
cbdata->filter, cbdata->check_aci);
if (result == -1) {
- /* Fail. Return. */
+ /* No match. Return. */
return TRUE;
}
+ /* Return an LDAP error, if one was generated. */
if (result != 0) {
slapi_log_error(SLAPI_LOG_PLUGIN,
cbdata->state->plugin_desc->spd_id,
"search got error %d checking %s\n",
result, slapi_sdn_get_ndn(sdn));
+ cbdata->answer = TRUE;
+ if (cbdata->result == 0) {
+ cbdata->result = result;
+ }
return TRUE;
}
+ /* Return the result entry. */
slapi_log_error(SLAPI_LOG_PLUGIN,
cbdata->state->plugin_desc->spd_id,
"search matched %s\n",
slapi_sdn_get_ndn(sdn));
+ cbdata->answer = TRUE;
+ slapi_send_ldap_search_entry(cbdata->pb, entry_data->e,
+ NULL, cbdata->attrs, cbdata->attrsonly);
+ cbdata->n_entries++;
return TRUE;
}
static bool_t
@@ -756,10 +770,20 @@ backend_search_cb(Slapi_PBlock *pb)
slapi_pblock_get(pb, SLAPI_SEARCH_STRFILTER, &cbdata.strfilter);
slapi_pblock_get(pb, SLAPI_SEARCH_ATTRS, &cbdata.attrs);
slapi_pblock_get(pb, SLAPI_SEARCH_ATTRSONLY, &cbdata.attrsonly);
- cbdata.answered = FALSE;
+ cbdata.answer = FALSE;
+ cbdata.result = 0;
+ cbdata.matched = "";
+ cbdata.text = "";
+ cbdata.n_entries = 0;
map_data_foreach_map(cbdata.state, NULL, backend_search_set, &cbdata);
slapi_sdn_free(&cbdata.target_dn);
- return cbdata.answered ? -1 : 0;
+ if (cbdata.answer) {
+ slapi_send_ldap_result(cbdata.pb, cbdata.result,
+ (char *) cbdata.matched,
+ (char *) cbdata.text,
+ cbdata.n_entries, NULL);
+ }
+ return cbdata.answer ? -1 : 0;
}
/* Populate our data. */