[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-1167-g436d8b6

Stefan (metze) Metzmacher metze at samba.org
Tue Aug 25 01:35:57 MDT 2009


Andrew Bartlett schrieb:
> On Tue, 2009-08-25 at 08:46 +0200, Stefan (metze) Metzmacher wrote:
>> 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.
> 
> We use structure assignment to create a local copy of this that we then
> insert the original tree into.  I'll see about using a deep copy of the
> template if that would make you happier. 

Ah, sorry I haven't noticed that, I think it's fine then.

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-cvs/attachments/20090825/cc59bb6c/attachment.pgp>


More information about the samba-cvs mailing list