diff options
| author | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-01 17:36:04 -0400 |
|---|---|---|
| committer | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-01 17:36:04 -0400 |
| commit | 46256aee83025c3e8efa5925c4c80e1b73590ae4 (patch) | |
| tree | 8462e4ec7c062d23357a297d01ab7bfac3004d96 /src | |
| parent | bcb77d8c1c8d10a09bfa434ade8d25cba5b9f809 (diff) | |
- start sending result information back to the client
Diffstat (limited to 'src')
| -rw-r--r-- | src/back-sch.c | 34 |
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. */ |
