svn commit: samba r20034 - in branches/SAMBA_4_0/source: auth/gensec dsdb/samdb/ldb_modules kdc lib/ldb/include lib/ldb/tools param rpc_server/lsa rpc_server/samr

idra at samba.org idra at samba.org
Tue Dec 5 04:25:28 GMT 2006


Author: idra
Date: 2006-12-05 04:25:27 +0000 (Tue, 05 Dec 2006)
New Revision: 20034

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20034

Log:

Start using ldb_search_exp_fmt()


Modified:
   branches/SAMBA_4_0/source/auth/gensec/schannel_state.c
   branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/samldb.c
   branches/SAMBA_4_0/source/kdc/hdb-ldb.c
   branches/SAMBA_4_0/source/lib/ldb/include/ldb.h
   branches/SAMBA_4_0/source/lib/ldb/tools/ad2oLschema.c
   branches/SAMBA_4_0/source/param/share_ldb.c
   branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c
   branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/gensec/schannel_state.c
===================================================================
--- branches/SAMBA_4_0/source/auth/gensec/schannel_state.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/auth/gensec/schannel_state.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -183,27 +183,19 @@
 	struct ldb_result *res;
 	int ret;
 	const struct ldb_val *val;
-	char *expr=NULL;
 
 	*creds = talloc_zero(mem_ctx, struct creds_CredentialState);
 	if (!*creds) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	expr = talloc_asprintf(mem_ctx, "(&(computerName=%s)(flatname=%s))", 
-			       computer_name, domain);
-	if (expr == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE, expr, NULL, &res);
-	talloc_free(expr);
+	ret = ldb_search_exp_fmt(ldb, mem_ctx, &res,
+				 NULL, LDB_SCOPE_SUBTREE, NULL,
+				"(&(computerName=%s)(flatname=%s))", computer_name, domain);
 	if (ret != LDB_SUCCESS) {
 		DEBUG(3,("schannel: Failed to find a record for client %s: %s\n", computer_name, ldb_errstring(ldb)));
-		talloc_free(res);
 		return NT_STATUS_INVALID_HANDLE;
 	}
-	talloc_steal(mem_ctx, res);
 	if (res->count != 1) {
 		DEBUG(3,("schannel: Failed to find a record for client: %s (found %d records)\n", computer_name, res->count));
 		talloc_free(res);

Modified: branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/samldb.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/samldb.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/samldb.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -297,14 +297,11 @@
 	struct ldb_result *dom_res;
 	struct ldb_result *res;
 	uint32_t old_rid;
-	char *filter;
 
 	/* find if this SID already exists */
-
-	filter = talloc_asprintf(mem_ctx, "(objectSid=%s)",
-				 ldap_encode_ndr_dom_sid(mem_ctx, sid));
-
-	ret = ldb_search(module->ldb, NULL, LDB_SCOPE_SUBTREE, filter, attrs, &res);
+	ret = ldb_search_exp_fmt(module->ldb, mem_ctx, &res,
+				 NULL, LDB_SCOPE_SUBTREE, attrs,
+				 "(objectSid=%s)", ldap_encode_ndr_dom_sid(mem_ctx, sid));
 	if (ret == LDB_SUCCESS) {
 		if (res->count > 0) {
 			talloc_free(res);
@@ -332,13 +329,11 @@
 	dom_sid->num_auths--;
 
 	/* find the domain DN */
-	
-	filter = talloc_asprintf(mem_ctx, "(&(objectSid=%s)(objectclass=domain))",
+	ret = ldb_search_exp_fmt(module->ldb, mem_ctx, &dom_res,
+				 NULL, LDB_SCOPE_SUBTREE, attrs,
+				 "(&(objectSid=%s)(objectclass=domain))",
 				 ldap_encode_ndr_dom_sid(mem_ctx, dom_sid));
-
-	ret = ldb_search(module->ldb, NULL, LDB_SCOPE_SUBTREE, filter, attrs, &dom_res);
 	if (ret == LDB_SUCCESS) {
-		talloc_steal(mem_ctx, dom_res);
 		if (dom_res->count == 0) {
 			talloc_free(dom_res);
 			/* This isn't an operation on a domain we know about, so nothing to update */

Modified: branches/SAMBA_4_0/source/kdc/hdb-ldb.c
===================================================================
--- branches/SAMBA_4_0/source/kdc/hdb-ldb.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/kdc/hdb-ldb.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -525,26 +525,20 @@
 					struct ldb_message ***pmsg)
 {
  	int ret;
-	char *cross_ref_filter;
 	struct ldb_result *cross_ref_res;
 	struct ldb_dn *partitions_basedn = samdb_partitions_dn(ldb_ctx, mem_ctx);
 
-	cross_ref_filter = talloc_asprintf(mem_ctx, 
-					   "(&(&(|(&(dnsRoot=%s)(nETBIOSName=*))(nETBIOSName=%s))(objectclass=crossRef))(ncName=*))",
-					   realm, realm);
-	if (!cross_ref_filter) {
-		krb5_set_error_string(context, "asprintf: out of memory");
-		return ENOMEM;
-	}
+	ret = ldb_search_exp_fmt(ldb_ctx, mem_ctx, &cross_ref_res,
+			partitions_basedn, LDB_SCOPE_SUBTREE, realm_ref_attrs,
+			"(&(&(|(&(dnsRoot=%s)(nETBIOSName=*))(nETBIOSName=%s))(objectclass=crossRef))(ncName=*))",
+			realm, realm);
 
-	ret = ldb_search(ldb_ctx, partitions_basedn, LDB_SCOPE_SUBTREE, cross_ref_filter, realm_ref_attrs, &cross_ref_res);
-
 	if (ret != LDB_SUCCESS) {
-		DEBUG(3, ("Failed to search for %s: %s\n", cross_ref_filter, ldb_errstring(ldb_ctx)));
+		DEBUG(3, ("Failed to search to lookup realm(%s): %s\n", realm, ldb_errstring(ldb_ctx)));
 		talloc_free(cross_ref_res);
 		return HDB_ERR_NOENTRY;
 	} else if (cross_ref_res->count == 0 || cross_ref_res->count > 1) {
-		DEBUG(3, ("Failed find a single entry for %s: got %d\n", cross_ref_filter, cross_ref_res->count));
+		DEBUG(3, ("Failed find a single entry for realm %s: got %d\n", realm, cross_ref_res->count));
 		talloc_free(cross_ref_res);
 		return HDB_ERR_NOENTRY;
 	}

Modified: branches/SAMBA_4_0/source/lib/ldb/include/ldb.h
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/include/ldb.h	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/lib/ldb/include/ldb.h	2006-12-05 04:25:27 UTC (rev 20034)
@@ -989,6 +989,9 @@
 	       const char *expression,
 	       const char * const *attrs, struct ldb_result **res);
 
+int ldb_search_exp_fmt(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, struct ldb_result **result,
+                        struct ldb_dn *base, enum ldb_scope scope, const char * const *attrs,
+                        const char *exp_fmt, ...);
 /*
   like ldb_search() but takes a parse tree
 */

Modified: branches/SAMBA_4_0/source/lib/ldb/tools/ad2oLschema.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/tools/ad2oLschema.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/lib/ldb/tools/ad2oLschema.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -120,20 +120,16 @@
 		struct ldb_result *res;
 		const char *name = ldb_msg_find_attr_as_string(search_from->msgs[i], 
 							       "lDAPDisplayname", NULL);
-		char *filter = talloc_asprintf(mem_ctx, "(&(&(objectClass=classSchema)(subClassOf=%s))(!(lDAPDisplayName=%s)))", 
-					       name, name);
 
-		ret = ldb_search(ldb, schemadn, LDB_SCOPE_SUBTREE, 
-				 filter,
-				 oc_attrs, &res);
-		talloc_free(filter);
+		ret = ldb_search_exp_fmt(ldb, mem_ctx, &res,
+					schemadn, LDB_SCOPE_SUBTREE, oc_attrs,
+					"(&(&(objectClass=classSchema)(subClassOf=%s))(!(lDAPDisplayName=%s)))",
+					name, name);
 		if (ret != LDB_SUCCESS) {
 			printf("Search failed: %s\n", ldb_errstring(ldb));
 			return ret;
 		}
 		
-		talloc_steal(mem_ctx, res);
-
 		res_list->msgs = talloc_realloc(res_list, res_list->msgs, 
 						struct ldb_message *, res_list->count + 2);
 		if (!res_list->msgs) {

Modified: branches/SAMBA_4_0/source/param/share_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/param/share_ldb.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/param/share_ldb.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -211,7 +211,6 @@
 	struct ldb_context *ldb;
 	struct ldb_result *res;
 	TALLOC_CTX *tmp_ctx;
-	char *filter;
 
 	tmp_ctx = talloc_new(mem_ctx);
 	if (!tmp_ctx) {
@@ -221,14 +220,9 @@
 
 	ldb = talloc_get_type(ctx->priv_data, struct ldb_context);
 
-	filter = talloc_asprintf(tmp_ctx,"(name=%s)", name);
-	if (!filter) {
-		DEBUG(0,("ERROR: Out of memory!\n"));
-		talloc_free(tmp_ctx);
-		return NT_STATUS_NO_MEMORY;
-	}
-	ret = ldb_search(ldb, ldb_dn_new(tmp_ctx, ldb, "CN=SHARES"), LDB_SCOPE_SUBTREE, filter, NULL, &res);
-	talloc_steal(tmp_ctx, res);
+	ret = ldb_search_exp_fmt(ldb, tmp_ctx, &res,
+				 ldb_dn_new(tmp_ctx, ldb, "CN=SHARES"), LDB_SCOPE_SUBTREE, NULL,
+				 "(name=%s)", name);
 	if (ret != LDB_SUCCESS || res->count != 1) {
 		talloc_free(tmp_ctx);
 		return NT_STATUS_BAD_NETWORK_NAME;

Modified: branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -285,7 +285,6 @@
 		"dnsRoot",
 		NULL
 	};
-	char *ref_filter;
 	int ret;
 
 	state = talloc(mem_ctx, struct lsa_policy_state);
@@ -337,31 +336,30 @@
 
 	talloc_free(dom_res);
 
-	ref_filter = talloc_asprintf(state, "(&(objectclass=crossRef)(ncName=%s))", 
-				     ldb_dn_get_linearized(state->domain_dn)); 
-	if (!ref_filter) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ret = ldb_search(state->sam_ldb, partitions_basedn, LDB_SCOPE_SUBTREE, ref_filter, ref_attrs, &ref_res);
-	talloc_steal(state, ref_res);
-	talloc_free(ref_filter);
+	ret = ldb_search_exp_fmt(state->sam_ldb, state, &ref_res,
+				 partitions_basedn, LDB_SCOPE_SUBTREE, ref_attrs,
+				 "(&(objectclass=crossRef)(ncName=%s))",
+				 ldb_dn_get_linearized(state->domain_dn));
 	
 	if (ret != LDB_SUCCESS) {
+		talloc_free(ref_res);
 		return NT_STATUS_INVALID_SYSTEM_SERVICE;
 	}
 	if (ref_res->count != 1) {
+		talloc_free(ref_res);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
 	state->domain_name = ldb_msg_find_attr_as_string(ref_res->msgs[0], "nETBIOSName", NULL);
 	if (!state->domain_name) {
+		talloc_free(ref_res);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 	talloc_steal(state, state->domain_name);
 
 	state->domain_dns = ldb_msg_find_attr_as_string(ref_res->msgs[0], "dnsRoot", NULL);
 	if (!state->domain_dns) {
+		talloc_free(ref_res);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 	talloc_steal(state, state->domain_dns);

Modified: branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c	2006-12-05 03:52:58 UTC (rev 20033)
+++ branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c	2006-12-05 04:25:27 UTC (rev 20034)
@@ -2093,7 +2093,6 @@
 	const char *memberdn;
 	struct ldb_result *res;
 	const char * const attrs[] = { NULL };
-	const char *filter;
 	int ret;
 
 	DCESRV_PULL_HANDLE(h, r->in.group_handle, SAMR_HANDLE_GROUP);
@@ -2105,18 +2104,16 @@
 	if (membersid == NULL)
 		return NT_STATUS_NO_MEMORY;
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectSid=%s)(objectclass=user))",
-				 ldap_encode_ndr_dom_sid(mem_ctx, membersid));
-
 	/* In native mode, AD can also nest domain groups. Not sure yet
 	 * whether this is also available via RPC. */
-	ret = ldb_search(d_state->sam_ctx, d_state->domain_dn, LDB_SCOPE_SUBTREE,
-			 filter, attrs, &res);
+	ret = ldb_search_exp_fmt(d_state->sam_ctx, mem_ctx, &res,
+				 d_state->domain_dn, LDB_SCOPE_SUBTREE, attrs,
+				 "(&(objectSid=%s)(objectclass=user))",
+				 ldap_encode_ndr_dom_sid(mem_ctx, membersid));
 
 	if (ret != 0) {
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
-	talloc_steal(mem_ctx, res);
 
 	if (res->count == 0) {
 		return NT_STATUS_NO_SUCH_USER;
@@ -2198,7 +2195,6 @@
 	const char *memberdn;
 	struct ldb_result *res;
 	const char * const attrs[] = { NULL };
-	const char *filter;
 	int ret;
 
 	DCESRV_PULL_HANDLE(h, r->in.group_handle, SAMR_HANDLE_GROUP);
@@ -2210,18 +2206,16 @@
 	if (membersid == NULL)
 		return NT_STATUS_NO_MEMORY;
 
-	filter = talloc_asprintf(mem_ctx, "(&(objectSid=%s)(objectclass=user))",
-				 ldap_encode_ndr_dom_sid(mem_ctx, membersid));
-
 	/* In native mode, AD can also nest domain groups. Not sure yet
 	 * whether this is also available via RPC. */
-	ret = ldb_search(d_state->sam_ctx, d_state->domain_dn, LDB_SCOPE_SUBTREE,
-			 filter, attrs, &res);
+	ret = ldb_search_exp_fmt(d_state->sam_ctx, mem_ctx, &res,
+				 d_state->domain_dn, LDB_SCOPE_SUBTREE, attrs,
+				 "(&(objectSid=%s)(objectclass=user))",
+				 ldap_encode_ndr_dom_sid(mem_ctx, membersid));
 
 	if (ret != 0) {
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
-	talloc_steal(mem_ctx, res);
 
 	if (res->count == 0) {
 		return NT_STATUS_NO_SUCH_USER;



More information about the samba-cvs mailing list