[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-1167-g436d8b6
Stefan (metze) Metzmacher
metze at samba.org
Tue Aug 25 00:46:01 MDT 2009
Hi Andrew,
> static int show_deleted_search(struct ldb_module *module, struct ldb_request *req)
> {
> struct ldb_context *ldb;
> struct ldb_control *control;
> struct ldb_control **saved_controls;
> - struct show_deleted_search_request *ar;
> struct ldb_request *down_req;
> - char *old_filter;
> - char *new_filter;
> + struct ldb_parse_tree *nodeleted_tree;
> + struct ldb_parse_tree *new_tree = req->op.search.tree;
> int ret;
>
> ldb = ldb_module_get_ctx(module);
>
> - ar = talloc_zero(req, struct show_deleted_search_request);
> - if (ar == NULL) {
> - return LDB_ERR_OPERATIONS_ERROR;
> - }
> - ar->module = module;
> - ar->req = req;
> -
> /* check if there's a show deleted control */
> control = ldb_request_get_control(req, LDB_CONTROL_SHOW_DELETED_OID);
>
> - if ( ! control) {
> - old_filter = ldb_filter_from_tree(ar, req->op.search.tree);
> - new_filter = talloc_asprintf(ar, "(&(!(isDeleted=TRUE))%s)",
> - old_filter);
> -
> - ret = ldb_build_search_req(&down_req, ldb, ar,
> - req->op.search.base,
> - req->op.search.scope,
> - new_filter,
> - req->op.search.attrs,
> - req->controls,
> - ar, show_deleted_search_callback,
> - req);
> -
> - } else {
> - ret = ldb_build_search_req_ex(&down_req, ldb, ar,
> - req->op.search.base,
> - req->op.search.scope,
> - req->op.search.tree,
> - req->op.search.attrs,
> - req->controls,
> - ar, show_deleted_search_callback,
> - req);
> + if (! control) {
> + nodeleted_tree = talloc_get_type(ldb_module_get_private(module),
> + struct ldb_parse_tree);
> + if (nodeleted_tree) {
> + new_tree = talloc(req, struct ldb_parse_tree);
> + if (!new_tree) {
> + ldb_oom(ldb);
> + return LDB_ERR_OPERATIONS_ERROR;
> + }
> + *new_tree = *nodeleted_tree;
> + /* Replace dummy part of 'and' with the old, tree,
> + without a parse step */
> + new_tree->u.list.elements[0] = req->op.search.tree;
> + }
> }
> +
> + ret = ldb_build_search_req_ex(&down_req, ldb, req,
> + req->op.search.base,
> + req->op.search.scope,
> + new_tree,
> + req->op.search.attrs,
> + req->controls,
> + req->context, req->callback,
> + req);
> if (ret != LDB_SUCCESS) {
> return ret;
> }
> @@ -138,10 +93,20 @@ static int show_deleted_search(struct ldb_module *module, struct ldb_request *re
> static int show_deleted_init(struct ldb_module *module)
> {
> struct ldb_context *ldb;
> + struct ldb_parse_tree *nodeleted_tree;
> int ret;
>
> ldb = ldb_module_get_ctx(module);
>
> + nodeleted_tree = ldb_parse_tree(module, "(&(replace=me)(!(isDeleted=TRUE)))");
> + if (!nodeleted_tree) {
> + ldb_debug(ldb, LDB_DEBUG_ERROR,
> + "show_deleted: Unable to parse isDeleted master expression!\n");
> + return LDB_ERR_OPERATIONS_ERROR;
> + }
> +
> + ldb_module_set_private(module, nodeleted_tree);
Why do we need to keep that as a "global" variable?
That doesn't play nicely together with multiple async searches.
I'd prefer to let each search request build its own parse tree.
metze
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20090825/2eab8bc5/attachment.pgp>
More information about the samba-technical
mailing list