Merge ldb_search() and ldb_search_exp_fmt() into a simgle function.
authorSimo Sorce <idra@samba.org>
Tue, 23 Sep 2008 18:30:06 +0000 (14:30 -0400)
committerSimo Sorce <idra@samba.org>
Tue, 23 Sep 2008 22:17:46 +0000 (18:17 -0400)
The previous ldb_search() interface made it way too easy to leak results,
and being able to use a printf-like expression turns to be really useful.

49 files changed:
source4/auth/gensec/schannel_state.c
source4/cldap_server/netlogon.c
source4/dsdb/common/util.c
source4/dsdb/repl/drepl_partitions.c
source4/dsdb/samdb/cracknames.c
source4/dsdb/samdb/ldb_modules/kludge_acl.c
source4/dsdb/samdb/ldb_modules/naming_fsmo.c
source4/dsdb/samdb/ldb_modules/partition.c
source4/dsdb/samdb/ldb_modules/pdc_fsmo.c
source4/dsdb/samdb/ldb_modules/proxy.c
source4/dsdb/samdb/ldb_modules/samldb.c
source4/dsdb/samdb/ldb_modules/update_keytab.c
source4/dsdb/samdb/samdb.c
source4/dsdb/schema/schema_init.c
source4/dsdb/schema/schema_set.c
source4/kdc/hdb-ldb.c
source4/ldap_server/ldap_backend.c
source4/ldap_server/ldap_server.c
source4/lib/ldb/common/ldb.c
source4/lib/ldb/common/ldb_modules.c
source4/lib/ldb/examples/ldbreader.c
source4/lib/ldb/include/ldb.h
source4/lib/ldb/ldb.i
source4/lib/ldb/ldb_map/ldb_map.c
source4/lib/ldb/ldb_wrap.c
source4/lib/ldb/nssldb/ldb-grp.c
source4/lib/ldb/nssldb/ldb-pwd.c
source4/lib/ldb/tools/ldbdel.c
source4/lib/ldb/tools/ldbedit.c
source4/lib/ldb/tools/ldbtest.c
source4/lib/registry/ldb.c
source4/lib/util/util_ldb.c
source4/libnet/libnet_become_dc.c
source4/libnet/libnet_join.c
source4/libnet/libnet_unbecome_dc.c
source4/nbt_server/wins/winsdb.c
source4/ntp_signd/ntp_signd.c
source4/param/share_ldb.c
source4/rpc_server/drsuapi/dcesrv_drsuapi.c
source4/rpc_server/lsa/lsa_init.c
source4/rpc_server/samr/dcesrv_samr.c
source4/torture/ldap/schema.c
source4/torture/ldap/uptodatevector.c
source4/torture/local/dbspeed.c
source4/utils/ad2oLschema.c
source4/winbind/idmap.c
source4/wrepl_server/wrepl_in_call.c
source4/wrepl_server/wrepl_scavenging.c
source4/wrepl_server/wrepl_server.c

index f0710c55811b399eae2c72a959b9d39e5534be3f..0388b3caf69536b78337b8a581764aed8da27da2 100644 (file)
@@ -195,7 +195,7 @@ NTSTATUS schannel_fetch_session_key_ldb(TALLOC_CTX *mem_ctx,
                return NT_STATUS_NO_MEMORY;
        }
 
-       ret = ldb_search_exp_fmt(ldb, mem_ctx, &res,
+       ret = ldb_search(ldb, mem_ctx, &res,
                                 NULL, LDB_SCOPE_SUBTREE, NULL,
                                "(&(computerName=%s)(flatname=%s))", computer_name, domain);
        if (ret != LDB_SUCCESS) {
index 0b146b3c7d82afbc9ea4537fc277e7df4f4d4c91..7dccd81fad2a17d6195dd1a71402b4178fcaf6a4 100644 (file)
@@ -84,11 +84,11 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                struct ldb_dn *dom_dn;
                /* try and find the domain */
 
-               ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &ref_res, 
-                                        partitions_basedn, LDB_SCOPE_ONELEVEL, 
-                                        ref_attrs, 
-                                        "(&(&(objectClass=crossRef)(dnsRoot=%s))(nETBIOSName=*))",
-                                        ldb_binary_encode_string(mem_ctx, domain));
+               ret = ldb_search(sam_ctx, mem_ctx, &ref_res,
+                                partitions_basedn, LDB_SCOPE_ONELEVEL,
+                                ref_attrs,
+                                "(&(&(objectClass=crossRef)(dnsRoot=%s))(nETBIOSName=*))",
+                                ldb_binary_encode_string(mem_ctx, domain));
        
                if (ret != LDB_SUCCESS) {
                        DEBUG(2,("Unable to find referece to '%s' in sam: %s\n",
@@ -96,19 +96,17 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                                 ldb_errstring(sam_ctx)));
                        return NT_STATUS_NO_SUCH_DOMAIN;
                } else if (ref_res->count == 1) {
-                       talloc_steal(mem_ctx, dom_res);
                        dom_dn = ldb_msg_find_attr_as_dn(sam_ctx, mem_ctx, ref_res->msgs[0], "ncName");
                        if (!dom_dn) {
                                return NT_STATUS_NO_SUCH_DOMAIN;
                        }
-                       ret = ldb_search(sam_ctx, dom_dn,
-                                        LDB_SCOPE_BASE, "objectClass=domain", 
-                                        dom_attrs, &dom_res);
+                       ret = ldb_search(sam_ctx, mem_ctx, &dom_res,
+                                        dom_dn, LDB_SCOPE_BASE, dom_attrs,
+                                        "objectClass=domain");
                        if (ret != LDB_SUCCESS) {
                                DEBUG(2,("Error finding domain '%s'/'%s' in sam: %s\n", domain, ldb_dn_get_linearized(dom_dn), ldb_errstring(sam_ctx)));
                                return NT_STATUS_NO_SUCH_DOMAIN;
                        }
-                       talloc_steal(mem_ctx, dom_res);
                        if (dom_res->count != 1) {
                                DEBUG(2,("Error finding domain '%s'/'%s' in sam\n", domain, ldb_dn_get_linearized(dom_dn)));
                                return NT_STATUS_NO_SUCH_DOMAIN;
@@ -123,11 +121,11 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                struct ldb_dn *dom_dn;
                /* try and find the domain */
 
-               ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &ref_res, 
-                                        partitions_basedn, LDB_SCOPE_ONELEVEL, 
-                                        ref_attrs, 
-                                        "(&(objectClass=crossRef)(ncName=*)(nETBIOSName=%s))",
-                                        ldb_binary_encode_string(mem_ctx, netbios_domain));
+               ret = ldb_search(sam_ctx, mem_ctx, &ref_res,
+                                partitions_basedn, LDB_SCOPE_ONELEVEL,
+                                ref_attrs,
+                                "(&(objectClass=crossRef)(ncName=*)(nETBIOSName=%s))",
+                                ldb_binary_encode_string(mem_ctx, netbios_domain));
        
                if (ret != LDB_SUCCESS) {
                        DEBUG(2,("Unable to find referece to '%s' in sam: %s\n",
@@ -135,19 +133,17 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                                 ldb_errstring(sam_ctx)));
                        return NT_STATUS_NO_SUCH_DOMAIN;
                } else if (ref_res->count == 1) {
-                       talloc_steal(mem_ctx, dom_res);
                        dom_dn = ldb_msg_find_attr_as_dn(sam_ctx, mem_ctx, ref_res->msgs[0], "ncName");
                        if (!dom_dn) {
                                return NT_STATUS_NO_SUCH_DOMAIN;
                        }
-                       ret = ldb_search(sam_ctx, dom_dn,
-                                        LDB_SCOPE_BASE, "objectClass=domain", 
-                                        dom_attrs, &dom_res);
+                       ret = ldb_search(sam_ctx, mem_ctx, &dom_res,
+                                        dom_dn, LDB_SCOPE_BASE, dom_attrs,
+                                        "objectClass=domain");
                        if (ret != LDB_SUCCESS) {
                                DEBUG(2,("Error finding domain '%s'/'%s' in sam: %s\n", domain, ldb_dn_get_linearized(dom_dn), ldb_errstring(sam_ctx)));
                                return NT_STATUS_NO_SUCH_DOMAIN;
                        }
-                       talloc_steal(mem_ctx, dom_res);
                        if (dom_res->count != 1) {
                                DEBUG(2,("Error finding domain '%s'/'%s' in sam\n", domain, ldb_dn_get_linearized(dom_dn)));
                                return NT_STATUS_NO_SUCH_DOMAIN;
@@ -179,7 +175,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                                return NT_STATUS_INVALID_PARAMETER;
                        }
-                       ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &dom_res,
+                       ret = ldb_search(sam_ctx, mem_ctx, &dom_res,
                                                 NULL, LDB_SCOPE_SUBTREE, 
                                                 dom_attrs, 
                                                 "(&(objectCategory=DomainDNS)(objectGUID=%s))", 
@@ -196,7 +192,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                                return NT_STATUS_INVALID_PARAMETER;
                        }
 
-                       ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &dom_res,
+                       ret = ldb_search(sam_ctx, mem_ctx, &dom_res,
                                                 NULL, LDB_SCOPE_SUBTREE, 
                                                 dom_attrs, 
                                                 "(&(objectCategory=DomainDNS)(objectSID=%s))", 
@@ -210,7 +206,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                        return NT_STATUS_NO_SUCH_DOMAIN;
                } else if (dom_res->count == 1) {
                        /* try and find the domain */
-                       ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &ref_res,
+                       ret = ldb_search(sam_ctx, mem_ctx, &ref_res,
                                                 partitions_basedn, LDB_SCOPE_ONELEVEL, 
                                                 ref_attrs, 
                                                 "(&(objectClass=crossRef)(ncName=%s))", 
@@ -260,7 +256,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                acct_control = acct_control & (ACB_TEMPDUP | ACB_NORMAL | ACB_DOMTRUST | ACB_WSTRUST | ACB_SVRTRUST);
 
                /* We must exclude disabled accounts, but otherwise do the bitwise match the client asked for */
-               ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &user_res,
+               ret = ldb_search(sam_ctx, mem_ctx, &user_res,
                                         dom_res->msgs[0]->dn, LDB_SCOPE_SUBTREE, 
                                         none_attrs, 
                                         "(&(objectClass=user)(samAccountName=%s)"
index fa8276e7b4bfd8297d1ca7e98f0c32f29370980f..2b74d722a18bbccbdfaa247ec3ce2821cb47c794 100644 (file)
@@ -1024,7 +1024,7 @@ const struct dom_sid *samdb_domain_sid(struct ldb_context *ldb)
                goto failed;
        }
 
-       ret = ldb_search_exp_fmt(ldb, tmp_ctx, &res, ldb_get_default_basedn(ldb), LDB_SCOPE_BASE, attrs, "objectSid=*");
+       ret = ldb_search(ldb, tmp_ctx, &res, ldb_get_default_basedn(ldb), LDB_SCOPE_BASE, attrs, "objectSid=*");
 
        if (ret != LDB_SUCCESS) {
                goto failed;
@@ -1137,13 +1137,12 @@ struct ldb_dn *samdb_ntds_settings_dn(struct ldb_context *ldb)
        }
        
 
-       ret = ldb_search(ldb, ldb_dn_new(tmp_ctx, ldb, ""), LDB_SCOPE_BASE, NULL, root_attrs, &root_res);
+       ret = ldb_search(ldb, tmp_ctx, &root_res, ldb_dn_new(tmp_ctx, ldb, ""), LDB_SCOPE_BASE, root_attrs, NULL);
        if (ret) {
                DEBUG(1,("Searching for dsServiceName in rootDSE failed: %s\n", 
                         ldb_errstring(ldb)));
                goto failed;
        }
-       talloc_steal(tmp_ctx, root_res);
 
        if (root_res->count != 1) {
                goto failed;
@@ -1189,11 +1188,10 @@ const struct GUID *samdb_ntds_invocation_id(struct ldb_context *ldb)
                goto failed;
        }
 
-       ret = ldb_search(ldb, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, NULL, attrs, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, attrs, NULL);
        if (ret) {
                goto failed;
        }
-       talloc_steal(tmp_ctx, res);
 
        if (res->count != 1) {
                goto failed;
@@ -1283,11 +1281,10 @@ const struct GUID *samdb_ntds_objectGUID(struct ldb_context *ldb)
                goto failed;
        }
 
-       ret = ldb_search(ldb, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, NULL, attrs, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, attrs, NULL);
        if (ret) {
                goto failed;
        }
-       talloc_steal(tmp_ctx, res);
 
        if (res->count != 1) {
                goto failed;
@@ -1397,14 +1394,13 @@ bool samdb_is_pdc(struct ldb_context *ldb)
                return false;
        }
 
-       ret = ldb_search(ldb, ldb_get_default_basedn(ldb), LDB_SCOPE_BASE, NULL, dom_attrs, &dom_res);
+       ret = ldb_search(ldb, tmp_ctx, &dom_res, ldb_get_default_basedn(ldb), LDB_SCOPE_BASE, dom_attrs, NULL);
        if (ret) {
                DEBUG(1,("Searching for fSMORoleOwner in %s failed: %s\n", 
                         ldb_dn_get_linearized(ldb_get_default_basedn(ldb)), 
                         ldb_errstring(ldb)));
                goto failed;
        }
-       talloc_steal(tmp_ctx, dom_res);
        if (dom_res->count != 1) {
                goto failed;
        }
@@ -1444,17 +1440,17 @@ bool samdb_is_gc(struct ldb_context *ldb)
        }
 
        /* Query cn=ntds settings,.... */
-       ret = ldb_search(ldb, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, NULL, attrs, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, attrs, NULL);
        if (ret) {
+               talloc_free(tmp_ctx);
                return false;
        }
        if (res->count != 1) {
-               talloc_free(res);
+               talloc_free(tmp_ctx);
                return false;
        }
 
        options = ldb_msg_find_attr_as_int(res->msgs[0], "options", 0);
-       talloc_free(res);
        talloc_free(tmp_ctx);
 
        /* if options attribute has the 0x00000001 flag set, then enable the global catlog */
@@ -1478,10 +1474,9 @@ int samdb_search_for_parent_domain(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
        if (local_ctx == NULL) return LDB_ERR_OPERATIONS_ERROR;
        
        while ((sdn = ldb_dn_get_parent(local_ctx, sdn))) {
-               ret = ldb_search(ldb, sdn, LDB_SCOPE_BASE, 
-                                "(|(|(objectClass=domain)(objectClass=builtinDomain))(objectClass=samba4LocalDomain))", attrs, &res);
+               ret = ldb_search(ldb, local_ctx, &res, sdn, LDB_SCOPE_BASE, attrs,
+                                "(|(|(objectClass=domain)(objectClass=builtinDomain))(objectClass=samba4LocalDomain))");
                if (ret == LDB_SUCCESS) {
-                       talloc_steal(local_ctx, res);
                        if (res->count == 1) {
                                break;
                        }
@@ -1955,7 +1950,7 @@ struct ldb_dn *samdb_domain_to_dn(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
        struct ldb_result *res_domain_ref;
        char *escaped_domain = ldb_binary_encode_string(mem_ctx, domain_name);
        /* find the domain's DN */
-       int ret_domain = ldb_search_exp_fmt(ldb, mem_ctx, 
+       int ret_domain = ldb_search(ldb, mem_ctx,
                                            &res_domain_ref, 
                                            samdb_partitions_dn(ldb, mem_ctx), 
                                            LDB_SCOPE_ONELEVEL, 
@@ -1967,7 +1962,7 @@ struct ldb_dn *samdb_domain_to_dn(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
        }
        
        if (res_domain_ref->count == 0) {
-               ret_domain = ldb_search_exp_fmt(ldb, mem_ctx, 
+               ret_domain = ldb_search(ldb, mem_ctx,
                                                &res_domain_ref, 
                                                samdb_dns_domain_to_dn(ldb, mem_ctx, domain_name),
                                                LDB_SCOPE_BASE,
index 8a1c5aa31a82b27cd7ccaf7070c7187872c632d9..4f7afc08542f67fd2e5257946ce2ab254d3fffd7 100644 (file)
@@ -48,8 +48,8 @@ WERROR dreplsrv_load_partitions(struct dreplsrv_service *s)
        basedn = ldb_dn_new(s, s->samdb, NULL);
        W_ERROR_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->samdb, basedn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->samdb, s, &r, basedn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return WERR_FOOBAR;
@@ -57,7 +57,6 @@ WERROR dreplsrv_load_partitions(struct dreplsrv_service *s)
                talloc_free(r);
                return WERR_FOOBAR;
        }
-       talloc_steal(s, r);
 
        el = ldb_msg_find_element(r->msgs[0], "namingContexts");
        if (!el) {
@@ -201,15 +200,14 @@ static WERROR dreplsrv_refresh_partition(struct dreplsrv_service *s,
        DEBUG(2, ("dreplsrv_refresh_partition(%s)\n",
                ldb_dn_get_linearized(p->dn)));
 
-       ret = ldb_search(s->samdb, p->dn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->samdb, mem_ctx, &r, p->dn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                return WERR_FOOBAR;
        } else if (r->count != 1) {
                talloc_free(r);
                return WERR_FOOBAR;
        }
-       talloc_steal(mem_ctx, r);
 
        ZERO_STRUCT(p->nc);
        p->nc.dn        = ldb_dn_alloc_linearized(p, p->dn);
index 369b06c30595428bbe5de7ec963b9b7c898f201f..7324d898a65f6c579aa4ae1044f81d69a586b789 100644 (file)
@@ -107,8 +107,8 @@ static enum drsuapi_DsNameStatus LDB_lookup_spn_alias(krb5_context context, stru
                return DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
        }
 
-       ret = ldb_search(ldb_ctx, service_dn, LDB_SCOPE_BASE, "(objectClass=nTDSService)",
-                        directory_attrs, &res);
+       ret = ldb_search(ldb_ctx, tmp_ctx, &res, service_dn, LDB_SCOPE_BASE,
+                        directory_attrs, "(objectClass=nTDSService)");
 
        if (ret != LDB_SUCCESS && ret != LDB_ERR_NO_SUCH_OBJECT) {
                DEBUG(1, ("ldb_search: dn: %s not found: %s", service_dn_str, ldb_errstring(ldb_ctx)));
@@ -121,7 +121,6 @@ static enum drsuapi_DsNameStatus LDB_lookup_spn_alias(krb5_context context, stru
                DEBUG(1, ("ldb_search: dn: %s not found", service_dn_str));
                return DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
        }
-       talloc_steal(tmp_ctx, res);
        
        spnmappings = ldb_msg_find_element(res->msgs[0], "sPNMappings");
        if (!spnmappings || spnmappings->num_values == 0) {
@@ -292,7 +291,7 @@ static WERROR DsCrackNameUPN(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
        
        realm = krb5_princ_realm(smb_krb5_context->krb5_context, principal);
 
-       ldb_ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &domain_res, 
+       ldb_ret = ldb_search(sam_ctx, mem_ctx, &domain_res,
                                     samdb_partitions_dn(sam_ctx, mem_ctx), 
                                     LDB_SCOPE_ONELEVEL,
                                     domain_attrs,
@@ -737,7 +736,7 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
 
        if (domain_filter) {
                /* if we have a domain_filter look it up and set the result_basedn and the dns_domain_name */
-               ldb_ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &domain_res, 
+               ldb_ret = ldb_search(sam_ctx, mem_ctx, &domain_res,
                                             partitions_basedn,
                                             LDB_SCOPE_ONELEVEL,
                                             domain_attrs,
@@ -774,7 +773,7 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
                if (domain_res) {
                        result_basedn = samdb_result_dn(sam_ctx, mem_ctx, domain_res->msgs[0], "ncName", NULL);
                        
-                       ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &res, 
+                       ret = ldb_search(sam_ctx, mem_ctx, &res,
                                                 result_basedn, LDB_SCOPE_SUBTREE, 
                                                 result_attrs, "%s", result_filter);
                        if (ret != LDB_SUCCESS) {
@@ -936,7 +935,7 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
                
                if (samdb_find_attribute(sam_ctx, result, "objectClass", "domain")) {
 
-                       ldb_ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &domain_res, 
+                       ldb_ret = ldb_search(sam_ctx, mem_ctx, &domain_res,
                                                     partitions_basedn,
                                                     LDB_SCOPE_ONELEVEL,
                                                     domain_attrs,
@@ -976,7 +975,7 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
                                        return WERR_OK;
                                }
                                dom_sid->num_auths--;
-                               ldb_ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &domain_res, 
+                               ldb_ret = ldb_search(sam_ctx, mem_ctx, &domain_res,
                                                             NULL,
                                                             LDB_SCOPE_BASE,
                                                             attrs,
@@ -1000,7 +999,7 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
                                        return WERR_OK;
                                }
 
-                               ldb_ret = ldb_search_exp_fmt(sam_ctx, mem_ctx, &domain_res2, 
+                               ldb_ret = ldb_search(sam_ctx, mem_ctx, &domain_res2,
                                                             partitions_basedn,
                                                             LDB_SCOPE_ONELEVEL,
                                                             domain_attrs,
index bc998a835a9de7669a51a70174b164082fc5004b..6836f95873ef81b61a0e8f7f41d2b0913157865b 100644 (file)
@@ -409,14 +409,12 @@ static int kludge_acl_init(struct ldb_module *module)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ldb_search(module->ldb, ldb_dn_new(mem_ctx, module->ldb, "@KLUDGEACL"),
-                        LDB_SCOPE_BASE,
-                        NULL, attrs,
-                        &res);
+       ret = ldb_search(module->ldb, mem_ctx, &res,
+                        ldb_dn_new(mem_ctx, module->ldb, "@KLUDGEACL"),
+                        LDB_SCOPE_BASE, attrs, NULL);
        if (ret != LDB_SUCCESS) {
                goto done;
        }
-       talloc_steal(mem_ctx, res);
        if (res->count == 0) {
                goto done;
        }
index 084540f68d0af060a0a0885a187de2ea4b7f6dd2..70f3e8ddfdaef39c83bbcda45eaa70a9dbe95a5a 100644 (file)
@@ -64,10 +64,9 @@ static int naming_fsmo_init(struct ldb_module *module)
        }
        module->private_data = naming_fsmo;
 
-       ret = ldb_search(module->ldb, naming_dn,
-                        LDB_SCOPE_BASE,
-                        NULL, naming_attrs,
-                        &naming_res);
+       ret = ldb_search(module->ldb, mem_ctx, &naming_res,
+                        naming_dn, LDB_SCOPE_BASE,
+                        naming_attrs, NULL);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                ldb_debug(module->ldb, LDB_DEBUG_WARNING,
                          "naming_fsmo_init: no partitions dn present: (skip loading of naming contexts details)\n");
@@ -81,7 +80,6 @@ static int naming_fsmo_init(struct ldb_module *module)
                talloc_free(mem_ctx);
                return ret;
        }
-       talloc_steal(mem_ctx, naming_res);
        if (naming_res->count == 0) {
                ldb_debug(module->ldb, LDB_DEBUG_WARNING,
                          "naming_fsmo_init: no cross-ref container present: (skip loading of naming contexts details)\n");
index 9cae6ab7b538e96165ec7a011655270f674f8e15..0cd0baf6255750d96228abf994cb83d4fe659fbf 100644 (file)
@@ -807,15 +807,13 @@ static int partition_init(struct ldb_module *module)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ldb_search(module->ldb, ldb_dn_new(mem_ctx, module->ldb, "@PARTITION"),
-                        LDB_SCOPE_BASE,
-                        NULL, attrs,
-                        &res);
+       ret = ldb_search(module->ldb, mem_ctx, &res,
+                        ldb_dn_new(mem_ctx, module->ldb, "@PARTITION"),
+                        LDB_SCOPE_BASE, attrs, NULL);
        if (ret != LDB_SUCCESS) {
                talloc_free(mem_ctx);
                return ret;
        }
-       talloc_steal(mem_ctx, res);
        if (res->count == 0) {
                talloc_free(mem_ctx);
                return ldb_next_init(module);
index 09d56d77c93890f5bca149d6c2e0ad0ad9676390..a5e7031a26f116817a6fe462205fba665f55ee73 100644 (file)
@@ -63,10 +63,9 @@ static int pdc_fsmo_init(struct ldb_module *module)
        }
        module->private_data = pdc_fsmo;
 
-       ret = ldb_search(module->ldb, pdc_dn,
-                        LDB_SCOPE_BASE,
-                        NULL, pdc_attrs,
-                        &pdc_res);
+       ret = ldb_search(module->ldb, mem_ctx, &pdc_res,
+                        pdc_dn, LDB_SCOPE_BASE,
+                        pdc_attrs, NULL);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                ldb_debug(module->ldb, LDB_DEBUG_WARNING,
                          "pdc_fsmo_init: no domain object present: (skip loading of domain details)\n");
@@ -79,7 +78,6 @@ static int pdc_fsmo_init(struct ldb_module *module)
                talloc_free(mem_ctx);
                return ret;
        }
-       talloc_steal(mem_ctx, pdc_res);
        if (pdc_res->count == 0) {
                ldb_debug(module->ldb, LDB_DEBUG_WARNING,
                          "pdc_fsmo_init: no domain object present: (skip loading of domain details)\n");
index 0d065425ca7efdb4610d8e0e448b477fae44067c..d0a315e45a444d59359b157cdc16a0e331224f34 100644 (file)
@@ -73,7 +73,7 @@ static int load_proxy_info(struct ldb_module *module)
        if (dn == NULL) {
                goto failed;
        }
-       ret = ldb_search(module->ldb, dn, LDB_SCOPE_BASE, NULL, NULL, &res);
+       ret = ldb_search(module->ldb, proxy, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        talloc_free(dn);
        if (ret != LDB_SUCCESS || res->count != 1) {
                ldb_debug(module->ldb, LDB_DEBUG_FATAL, "Can't find @PROXYINFO\n");
index bd491bd011e580f19a9b05a5a1a5f993004757ba..cf720669b94f99616e41049f9eb92c2e0eb303ba 100644 (file)
@@ -131,7 +131,7 @@ static int samldb_find_next_rid(struct ldb_module *module, TALLOC_CTX *mem_ctx,
        int ret;
        const char *str;
 
-       ret = ldb_search(module->ldb, dn, LDB_SCOPE_BASE, "nextRid=*", attrs, &res);
+       ret = ldb_search(module->ldb, mem_ctx, &res, dn, LDB_SCOPE_BASE, attrs, "nextRid=*");
        if (ret != LDB_SUCCESS) {
                return ret;
        }
@@ -207,7 +207,7 @@ static int samldb_get_new_sid(struct ldb_module *module,
 
        /* find the domain sid */
 
-       ret = ldb_search(module->ldb, dom_dn, LDB_SCOPE_BASE, "objectSid=*", attrs, &res);
+       ret = ldb_search(module->ldb, mem_ctx, &res, dom_dn, LDB_SCOPE_BASE, attrs, "objectSid=*");
        if (ret != LDB_SUCCESS) {
                ldb_asprintf_errstring(module->ldb,
                                        "samldb_get_new_sid: error retrieving domain sid from %s: %s!\n",
@@ -261,7 +261,7 @@ int samldb_notice_sid(struct ldb_module *module,
        uint32_t old_rid;
 
        /* find if this SID already exists */
-       ret = ldb_search_exp_fmt(module->ldb, mem_ctx, &res,
+       ret = ldb_search(module->ldb, mem_ctx, &res,
                                 NULL, LDB_SCOPE_SUBTREE, attrs,
                                 "(objectSid=%s)", ldap_encode_ndr_dom_sid(mem_ctx, sid));
        if (ret == LDB_SUCCESS) {
@@ -291,7 +291,7 @@ int samldb_notice_sid(struct ldb_module *module,
        dom_sid->num_auths--;
 
        /* find the domain DN */
-       ret = ldb_search_exp_fmt(module->ldb, mem_ctx, &dom_res,
+       ret = ldb_search(module->ldb, mem_ctx, &dom_res,
                                 NULL, LDB_SCOPE_SUBTREE, attrs,
                                 "(&(objectSid=%s)(|(|(objectClass=domain)(objectClass=builtinDomain))(objectClass=samba4LocalDomain)))", 
                                 ldap_encode_ndr_dom_sid(mem_ctx, dom_sid));
@@ -371,7 +371,7 @@ static int samldb_generate_samAccountName(struct ldb_module *module, TALLOC_CTX
        do {
                *name = talloc_asprintf(mem_ctx, "$%.6X-%.6X%.6X", (unsigned int)generate_random(), (unsigned int)generate_random(), (unsigned int)generate_random());
                /* TODO: Figure out exactly what this is meant to conflict with */
-               ret = ldb_search_exp_fmt(module->ldb,
+               ret = ldb_search(module->ldb,
                                         mem_ctx, &res, dom_dn, LDB_SCOPE_SUBTREE, attrs,
                                         "samAccountName=%s",
                                         ldb_binary_encode_string(mem_ctx, *name));
index b36c2c9b71443f20ef0454b9142c79df7f0b69da..68973124ebe21f96d077ac449783df179200d60f 100644 (file)
@@ -59,8 +59,8 @@ static int add_modified(struct ldb_module *module, struct ldb_dn *dn, bool delet
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ldb_search(module->ldb, dn, LDB_SCOPE_BASE,
-                        filter, attrs, &res);
+       ret = ldb_search(module->ldb, data, &res,
+                        dn, LDB_SCOPE_BASE, attrs, "%s", filter);
        if (ret != LDB_SUCCESS) {
                talloc_free(filter);
                return ret;
index b5b7ddfdc6d749fc2dfc3f4e2b38d36a32bc93c6..5d928ebce350b6e7dad60d8740dd7e505769d3fc 100644 (file)
@@ -175,7 +175,7 @@ int samdb_copy_template(struct ldb_context *ldb,
        }
        
        /* pull the template record */
-       ret = ldb_search(templates_ldb, basedn, LDB_SCOPE_BASE, "distinguishedName=*", NULL, &res);     
+       ret = ldb_search(templates_ldb, msg, &res, basedn, LDB_SCOPE_BASE, NULL, "distinguishedName=*");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                *errstring = talloc_steal(msg, ldb_errstring(templates_ldb));
index 3ed7daee5953aa8a778436a01baf08ea286708dc..d983e3c2720fe68762839b146fec2ddcb359fb6f 100644 (file)
@@ -525,18 +525,21 @@ WERROR dsdb_read_prefixes_from_ldb(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
                return WERR_FOOBAR;
        }
 
-       ret = ldb_search(ldb, schema_dn, LDB_SCOPE_BASE,NULL, schema_attrs,&schema_res);
+       ret = ldb_search(ldb, mem_ctx, &schema_res, schema_dn, LDB_SCOPE_BASE, schema_attrs, NULL);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                DEBUG(0,("dsdb_read_prefixes_from_ldb: no prefix map present\n"));
+               talloc_free(schema_res);
                return WERR_FOOBAR;
        } else if (ret != LDB_SUCCESS) {
                DEBUG(0,("dsdb_read_prefixes_from_ldb: failed to search the schema head\n"));
+               talloc_free(schema_res);
                return WERR_FOOBAR;
        }
 
        prefix_val = ldb_msg_find_ldb_val(schema_res->msgs[0], "prefixMap");
        if (!prefix_val) {
                DEBUG(0,("dsdb_read_prefixes_from_ldb: no prefixMap attribute found\n"));
+               talloc_free(schema_res);
                return WERR_FOOBAR;
        }
 
@@ -550,9 +553,12 @@ WERROR dsdb_read_prefixes_from_ldb(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                DEBUG(0,("dsdb_read_prefixes_from_ldb: ndr_pull_struct_blob failed\n"));
                talloc_free(blob);
+               talloc_free(schema_res);
                return WERR_FOOBAR;
        }
 
+       talloc_free(schema_res);
+
        if (blob->version != PREFIX_MAP_VERSION_DSDB) {
                DEBUG(0,("dsdb_read_prefixes_from_ldb: blob->version incorect\n"));
                talloc_free(blob);
@@ -905,7 +911,7 @@ static int fetch_oc_recursive(struct ldb_context *ldb, struct ldb_dn *schemadn,
                const char *name = ldb_msg_find_attr_as_string(search_from->msgs[i], 
                                                               "lDAPDisplayname", NULL);
 
-               ret = ldb_search_exp_fmt(ldb, mem_ctx, &res,
+               ret = ldb_search(ldb, mem_ctx, &res,
                                        schemadn, LDB_SCOPE_SUBTREE, NULL,
                                        "(&(&(objectClass=classSchema)(subClassOf=%s))(!(lDAPDisplayName=%s)))",
                                        name, name);
@@ -946,9 +952,9 @@ static int fetch_objectclass_schema(struct ldb_context *ldb, struct ldb_dn *sche
        }
        
        /* Download 'top' */
-       ret = ldb_search(ldb, schemadn, LDB_SCOPE_SUBTREE, 
-                        "(&(objectClass=classSchema)(lDAPDisplayName=top))", 
-                        NULL, &top_res);
+       ret = ldb_search(ldb, local_ctx, &top_res,
+                        schemadn, LDB_SCOPE_SUBTREE, NULL,
+                        "(&(objectClass=classSchema)(lDAPDisplayName=top))");
        if (ret != LDB_SUCCESS) {
                *error_string = talloc_asprintf(mem_ctx, 
                                                "dsdb_schema: failed to search for top classSchema object: %s",
@@ -956,8 +962,6 @@ static int fetch_objectclass_schema(struct ldb_context *ldb, struct ldb_dn *sche
                return ret;
        }
 
-       talloc_steal(local_ctx, top_res);
-
        if (top_res->count != 1) {
                *error_string = talloc_asprintf(mem_ctx, 
                                                "dsdb_schema: failed to find top classSchema object");
@@ -1008,10 +1012,8 @@ int dsdb_schema_from_schema_dn(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
        /*
         * setup the prefix mappings and schema info
         */
-       ret = ldb_search(ldb, schema_dn,
-                        LDB_SCOPE_BASE,
-                        NULL, schema_attrs,
-                        &schema_res);
+       ret = ldb_search(ldb, tmp_ctx, &schema_res,
+                        schema_dn, LDB_SCOPE_BASE, schema_attrs, NULL);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                talloc_free(tmp_ctx);
                return ret;
@@ -1022,7 +1024,6 @@ int dsdb_schema_from_schema_dn(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
                talloc_free(tmp_ctx);
                return ret;
        }
-       talloc_steal(tmp_ctx, schema_res);
        if (schema_res->count != 1) {
                *error_string_out = talloc_asprintf(mem_ctx, 
                              "dsdb_schema: [%u] schema heads found on a base search",
@@ -1034,10 +1035,9 @@ int dsdb_schema_from_schema_dn(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
        /*
         * load the attribute definitions
         */
-       ret = ldb_search(ldb, schema_dn,
-                        LDB_SCOPE_ONELEVEL,
-                        "(objectClass=attributeSchema)", NULL,
-                        &a_res);
+       ret = ldb_search(ldb, tmp_ctx, &a_res,
+                        schema_dn, LDB_SCOPE_ONELEVEL, NULL,
+                        "(objectClass=attributeSchema)");
        if (ret != LDB_SUCCESS) {
                *error_string_out = talloc_asprintf(mem_ctx, 
                                       "dsdb_schema: failed to search attributeSchema objects: %s",
@@ -1045,7 +1045,6 @@ int dsdb_schema_from_schema_dn(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
                talloc_free(tmp_ctx);
                return ret;
        }
-       talloc_steal(tmp_ctx, a_res);
 
        /*
         * load the objectClass definitions
index 2303b88a0594e8d1a32ca824279c0a03303fd226..b6e8ed46c28da96f5f99291c19736675632132b4 100644 (file)
@@ -116,7 +116,7 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
 
 
        /* Try to avoid churning the attributes too much - we only want to do this if they have changed */
-       ret = ldb_search_exp_fmt(ldb, mem_ctx, &res, msg->dn, LDB_SCOPE_BASE, NULL, "dn=%s", ldb_dn_get_linearized(msg->dn));
+       ret = ldb_search(ldb, mem_ctx, &res, msg->dn, LDB_SCOPE_BASE, NULL, "dn=%s", ldb_dn_get_linearized(msg->dn));
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                ret = ldb_add(ldb, msg);
        } else if (ret != LDB_SUCCESS) {
@@ -144,7 +144,7 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
 
        /* Now write out the indexs, as found in the schema (if they have changed) */
 
-       ret = ldb_search_exp_fmt(ldb, mem_ctx, &res_idx, msg_idx->dn, LDB_SCOPE_BASE, NULL, "dn=%s", ldb_dn_get_linearized(msg_idx->dn));
+       ret = ldb_search(ldb, mem_ctx, &res_idx, msg_idx->dn, LDB_SCOPE_BASE, NULL, "dn=%s", ldb_dn_get_linearized(msg_idx->dn));
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                ret = ldb_add(ldb, msg_idx);
        } else if (ret != LDB_SUCCESS) {
index ef3a0bcb8ac0901ea413cebef7daa68dc4a0909b..cfd72c25aceb3e20f39d93b878308724c254b735 100644 (file)
@@ -929,8 +929,8 @@ static krb5_error_code LDB_lookup_principal(krb5_context context, struct ldb_con
                return ENOMEM;
        }
 
-       lret = ldb_search(ldb_ctx, realm_dn, LDB_SCOPE_SUBTREE, filter, princ_attrs, &res);
-
+       lret = ldb_search(ldb_ctx, mem_ctx, &res, realm_dn,
+                         LDB_SCOPE_SUBTREE, princ_attrs, "%s", filter);
        if (lret != LDB_SUCCESS) {
                DEBUG(3, ("Failed to search for %s: %s\n", filter, ldb_errstring(ldb_ctx)));
                return HDB_ERR_NOENTRY;
@@ -963,8 +963,9 @@ static krb5_error_code LDB_lookup_trust(krb5_context context, struct ldb_context
                return ENOMEM;
        }
 
-       lret = ldb_search(ldb_ctx, ldb_get_default_basedn(ldb_ctx), LDB_SCOPE_SUBTREE, filter, attrs, &res);
-
+       lret = ldb_search(ldb_ctx, mem_ctx, &res,
+                         ldb_get_default_basedn(ldb_ctx),
+                         LDB_SCOPE_SUBTREE, attrs, "%s", filter);
        if (lret != LDB_SUCCESS) {
                DEBUG(3, ("Failed to search for %s: %s\n", filter, ldb_errstring(ldb_ctx)));
                return HDB_ERR_NOENTRY;
@@ -988,7 +989,7 @@ static krb5_error_code LDB_lookup_realm(krb5_context context, struct ldb_context
        struct ldb_result *cross_ref_res;
        struct ldb_dn *partitions_basedn = samdb_partitions_dn(ldb_ctx, mem_ctx);
 
-       ret = ldb_search_exp_fmt(ldb_ctx, mem_ctx, &cross_ref_res,
+       ret = ldb_search(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);
@@ -1432,9 +1433,9 @@ static krb5_error_code LDB_firstkey(krb5_context context, HDB *db, unsigned flag
 
        priv->realm_ref_msgs = talloc_steal(priv, realm_ref_msgs);
 
-       lret = ldb_search(ldb_ctx, realm_dn,
-                                LDB_SCOPE_SUBTREE, "(objectClass=user)",
-                                user_attrs, &res);
+       lret = ldb_search(ldb_ctx, priv, &res,
+                         realm_dn, LDB_SCOPE_SUBTREE, user_attrs,
+                         "(objectClass=user)");
 
        if (lret != LDB_SUCCESS) {
                talloc_free(priv);
index 504dcf1c0f13550ba22196b908438a62cb7e88e5..b954038b8046502489c9db3a7564c95925a394f4 100644 (file)
@@ -688,8 +688,8 @@ reply:
        NT_STATUS_HAVE_NO_MEMORY(compare_r);
 
        if (result == LDAP_SUCCESS) {
-               ldb_ret = ldb_search(samdb, dn, LDB_SCOPE_BASE, filter, attrs, &res);
-               talloc_steal(local_ctx, res);
+               ldb_ret = ldb_search(samdb, local_ctx, &res,
+                                    dn, LDB_SCOPE_BASE, attrs, "%s", filter);
                if (ldb_ret != LDB_SUCCESS) {
                        result = map_ldb_error(samdb, ldb_ret, &errstr);
                        DEBUG(10,("CompareRequest: error: %s\n", errstr));
index 57a63a851606e1e10c38de4f370dee57848b6529..0aa9afbdd687d1f99013757865890abe9401d194 100644 (file)
@@ -253,13 +253,11 @@ static int ldapsrv_load_limits(struct ldapsrv_connection *conn)
                goto failed;
        }
 
-       ret = ldb_search(conn->ldb, basedn, LDB_SCOPE_BASE, NULL, attrs, &res);
+       ret = ldb_search(conn->ldb, tmp_ctx, &res, basedn, LDB_SCOPE_BASE, attrs, NULL);
        if (ret != LDB_SUCCESS) {
                goto failed;
        }
 
-       talloc_steal(tmp_ctx, res);
-
        if (res->count != 1) {
                goto failed;
        }
@@ -275,13 +273,11 @@ static int ldapsrv_load_limits(struct ldapsrv_connection *conn)
                goto failed;
        }
 
-       ret = ldb_search(conn->ldb, policy_dn, LDB_SCOPE_BASE, NULL, attrs2, &res);
+       ret = ldb_search(conn->ldb, tmp_ctx, &res, policy_dn, LDB_SCOPE_BASE, attrs2, NULL);
        if (ret != LDB_SUCCESS) {
                goto failed;
        }
 
-       talloc_steal(tmp_ctx, res);
-
        if (res->count != 1) {
                goto failed;
        }
index 9e04cc78450275bdcffb6ff9242ba19c436d31be..3b73947b76b2fdce44ed579cb7cf389d07613549 100644 (file)
@@ -88,15 +88,14 @@ void ldb_set_default_dns(struct ldb_context *ldb)
        };
 
        tmp_ctx = talloc_new(ldb);
-       ret = ldb_search(ldb, ldb_dn_new(tmp_ctx, ldb, NULL), LDB_SCOPE_BASE,
-                        "(objectClass=*)", attrs, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, ldb_dn_new(tmp_ctx, ldb, NULL),
+                        LDB_SCOPE_BASE, attrs, "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
                return;
        }
 
        if (res->count != 1) {
-               talloc_free(res);
                talloc_free(tmp_ctx);
                return;
        }
@@ -125,7 +124,6 @@ void ldb_set_default_dns(struct ldb_context *ldb)
                ldb_set_opaque(ldb, "defaultNamingContext", tmp_dn);
        }
 
-       talloc_free(res);
        talloc_free(tmp_ctx);
 }
 
@@ -873,25 +871,38 @@ done:
   note that ldb_search() will automatically replace a NULL 'base' value
   with the defaultNamingContext from the rootDSE if available.
 */
-int ldb_search(struct ldb_context *ldb,
-              struct ldb_dn *base,
-              enum ldb_scope scope,
-              const char *expression,
-              const char * const *attrs,
-              struct ldb_result **_res)
+int ldb_search(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, ...)
 {
        struct ldb_request *req;
-       int ret;
        struct ldb_result *res;
+       char *expression;
+       va_list ap;
+       int ret;
 
-       *_res = NULL;
+       expression = NULL;
+       *result = NULL;
+       req = NULL;
 
-       res = talloc_zero(ldb, struct ldb_result);
+       res = talloc_zero(mem_ctx, struct ldb_result);
        if (!res) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ldb_build_search_req(&req, ldb, ldb,
+       if (exp_fmt) {
+               va_start(ap, exp_fmt);
+               expression = talloc_vasprintf(mem_ctx, exp_fmt, ap);
+               va_end(ap);
+
+               if (!expression) {
+                       talloc_free(res);
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
+       }
+
+       ret = ldb_build_search_req(&req, ldb, mem_ctx,
                                        base?base:ldb_get_default_basedn(ldb),
                                        scope,
                                        expression,
@@ -910,52 +921,16 @@ int ldb_search(struct ldb_context *ldb,
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);
        }
 
-       talloc_free(req);
-
 done:
        if (ret != LDB_SUCCESS) {
                talloc_free(res);
-       }
-
-       *_res = res;
-       return ret;
-}
-
-/*
- a useful search function where you can easily define the expression and that
- takes a memory context where results are allocated
-*/
-
-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, ...)
-{
-       struct ldb_result *res;
-       char *expression;
-       va_list ap;
-       int ret;
-
-       res = NULL;
-       *result = NULL;
-
-       va_start(ap, exp_fmt);
-       expression = talloc_vasprintf(mem_ctx, exp_fmt, ap);
-       va_end(ap);
-
-       if ( ! expression) {
-               return LDB_ERR_OPERATIONS_ERROR;
-       }
-
-       ret = ldb_search(ldb, base, scope, expression, attrs, &res);
-
-       if (ret == LDB_SUCCESS) {
-               talloc_steal(mem_ctx, res);
-               *result = res;
+               res = NULL;
        }
 
        talloc_free(expression);
+       talloc_free(req);
 
+       *result = res;
        return ret;
 }
 
index 4d69dc662ee10ee9c3c724496465e3aa03edb6a4..c0cd616a76e63bb02f1530b2de2d729d09b08264 100644 (file)
@@ -419,7 +419,7 @@ int ldb_load_modules(struct ldb_context *ldb, const char *options[])
                        return -1;
                }
 
-               ret = ldb_search_exp_fmt(ldb, mods_dn, &res, mods_dn, LDB_SCOPE_BASE, attrs, "@LIST=*");
+               ret = ldb_search(ldb, mods_dn, &res, mods_dn, LDB_SCOPE_BASE, attrs, "@LIST=*");
                
                if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                        ldb_debug(ldb, LDB_DEBUG_TRACE, "no modules required by the db");
index 6e5811453115b339cd0fdcd79690619ff7e0fa6f..e48b3d338ac79357ff95e6e501fd03e6bff152a7 100644 (file)
@@ -88,8 +88,9 @@ int main(int argc, const char **argv)
          quite fine grained results with the LDAP search syntax, however it is a bit
          confusing to start with. See RFC2254.
        */
-       if (LDB_SUCCESS != ldb_search(ldb, NULL, LDB_SCOPE_DEFAULT,
-                                     expression, NULL, &resultMsg) ) {
+       if (LDB_SUCCESS != ldb_search(ldb, ldb, &resultMsg,
+                                     NULL, LDB_SCOPE_DEFAULT, NULL,
+                                     "%s", expression)) {
                printf("Problem in search\n");
                exit(-1);
        }
index 937029f52ce3f53f2ec78274430a9d05416500d0..645d7866c52677163cfc96a71d65187393715308 100644 (file)
@@ -1023,31 +1023,21 @@ struct ldb_control *ldb_request_get_control(struct ldb_request *req, const char
   records that match an LDAP-like search expression
 
   \param ldb the context associated with the database (from ldb_init())
+  \param mem_ctx the memory context to use for the request and the results
+  \param result the return result
   \param base the Base Distinguished Name for the query (use ldb_dn_new() for an empty one)
   \param scope the search scope for the query
-  \param expression the search expression to use for this query
   \param attrs the search attributes for the query (pass NULL if none required)
-  \param res the return result
+  \param exp_fmt the search expression to use for this query (printf like)
 
   \return result code (LDB_SUCCESS on success, or a failure code)
 
   \note use talloc_free() to free the ldb_result returned
 */
-int ldb_search(struct ldb_context *ldb, 
-              struct ldb_dn *base,
-              enum ldb_scope scope,
-              const char *expression,
-              const char * const *attrs, struct ldb_result **res);
-
-/*
- * a useful search function where you can easily define the expression and
- * that takes a memory context where results are allocated
-*/
-
-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, ...) PRINTF_ATTRIBUTE(7,8);
+int ldb_search(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, ...) PRINTF_ATTRIBUTE(7,8);
 
 /**
   Add a record to the database.
index e9496b503b5423da6101f54c7e9ea66cdd0d3ff6..45978251f7506990f6004e0fcb3ffa2687d68158 100644 (file)
@@ -845,8 +845,7 @@ typedef struct ldb_context {
         %typemap(freearg,noblock=1) struct ldb_result **result_as_bool { talloc_free(*$1); }
         ldb_error __contains__(ldb_dn *dn, struct ldb_result **result_as_bool)
         {
-            return ldb_search($self, dn, LDB_SCOPE_BASE, NULL, NULL, 
-                             result_as_bool);
+            return ldb_search($self, $self, result_as_bool, dn, LDB_SCOPE_BASE, NULL, NULL);
         }
 
         %feature("docstring") parse_ldif "S.parse_ldif(ldif) -> iter(messages)\n" \
index b3f639dc676bac81a266a11bebdf3f7f253b96d1..e9129c812b27cd354aea138a693ac3c53646c7c9 100644 (file)
@@ -1256,7 +1256,7 @@ static int map_init_dns(struct ldb_module *module, struct ldb_map_context *data,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       ret = ldb_search(module->ldb, dn, LDB_SCOPE_BASE, NULL, attrs, &res);
+       ret = ldb_search(module->ldb, data, &res, dn, LDB_SCOPE_BASE, attrs, NULL);
        talloc_free(dn);
        if (ret != LDB_SUCCESS) {
                return ret;
index 84e68d460e8904eb685249e6197e88ac037dc213..74a59355aab7b68d76961fae64ba5d4ad16c8a39 100644 (file)
@@ -3204,8 +3204,8 @@ SWIGINTERN PyObject *ldb_schema_format_value(ldb *self,char const *element_name,
                return ret;
         }
 SWIGINTERN ldb_error ldb___contains__(ldb *self,ldb_dn *dn,struct ldb_result **result_as_bool){
-            return ldb_search(self, dn, LDB_SCOPE_BASE, NULL, NULL, 
-                             result_as_bool);
+            return ldb_search(self, self, result_as_bool,
+                             dn, LDB_SCOPE_BASE, NULL, NULL);
         }
 SWIGINTERN PyObject *ldb_parse_ldif(ldb *self,char const *s){
             PyObject *list = PyList_New(0);
index 71e27a9161edd5e36d26791e8d45b55894a17bfa..5e7556dc7355e74ff37e751f253981c2d542332a 100644 (file)
@@ -60,11 +60,12 @@ NSS_STATUS _nss_ldb_setgrent(void)
        }
 
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &_ldb_nss_ctx->gr_res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        _LDB_NSS_GRENT_FILTER,
                         _ldb_nss_gr_attrs,
-                        &_ldb_nss_ctx->gr_res);
+                        _LDB_NSS_GRENT_FILTER);
        if (ret != LDB_SUCCESS) {
                return NSS_STATUS_UNAVAIL;
        }
@@ -178,11 +179,12 @@ NSS_STATUS _nss_ldb_getgrnam_r(const char *name, struct group *result_buf, char
 
        /* search the entry */
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &gr_res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        filter,
                         _ldb_nss_gr_attrs,
-                        &gr_res);
+                        filter);
        if (ret != LDB_SUCCESS) {
                /* this is a fatal error */
                *errnop = errno = ENOENT;
@@ -275,11 +277,12 @@ NSS_STATUS _nss_ldb_getgrgid_r(gid_t gid, struct group *result_buf, char *buffer
 
        /* search the entry */
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &gr_res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        filter,
                         _ldb_nss_gr_attrs,
-                        &gr_res);
+                        filter);
        if (ret != LDB_SUCCESS) {
                /* this is a fatal error */
                *errnop = errno = ENOENT;
@@ -367,11 +370,12 @@ NSS_STATUS _nss_ldb_initgroups_dyn(const char *user, gid_t group, long int *star
 
        /* search the entry */
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &uid_res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        filter,
                         attrs,
-                        &uid_res);
+                        filter);
        if (ret != LDB_SUCCESS) {
                /* this is a fatal error */
                *errnop = errno = ENOENT;
index 44b0ab21ee8ee70659d5d6de1a109be530337f56..6ab103a6fed6a19cdedbef91060626af5faf384c 100644 (file)
@@ -47,11 +47,12 @@ NSS_STATUS _nss_ldb_setpwent(void)
        }
 
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &_ldb_nss_ctx->pw_res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        _LDB_NSS_PWENT_FILTER,
                         _ldb_nss_pw_attrs,
-                        &_ldb_nss_ctx->pw_res);
+                        _LDB_NSS_PWENT_FILTER);
        if (ret != LDB_SUCCESS) {
                return NSS_STATUS_UNAVAIL;
        }
@@ -137,11 +138,12 @@ NSS_STATUS _nss_ldb_getpwuid_r(uid_t uid, struct passwd *result_buf, char *buffe
 
        /* search the entry */
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        filter,
                         _ldb_nss_pw_attrs,
-                        &res);
+                        filter);
        if (ret != LDB_SUCCESS) {
                /* this is a fatal error */
                *errnop = errno = ENOENT;
@@ -198,11 +200,12 @@ NSS_STATUS _nss_ldb_getpwnam_r(const char *name, struct passwd *result_buf, char
 
        /* search the entry */
        ret = ldb_search(_ldb_nss_ctx->ldb,
+                        _ldb_nss_ctx->ldb,
+                        &res,
                         _ldb_nss_ctx->base,
                         LDB_SCOPE_SUBTREE,
-                        filter,
                         _ldb_nss_pw_attrs,
-                        &res);
+                        filter);
        if (ret != LDB_SUCCESS) {
                /* this is a fatal error */
                *errnop = errno = ENOENT;
index e66d4fb973ec83aa17469231e7bc48d2fff2a071..22d4aa69769abac5aab2171c295e976cd4d8d6bf 100644 (file)
@@ -40,7 +40,7 @@ static int ldb_delete_recursive(struct ldb_context *ldb, struct ldb_dn *dn)
        const char *attrs[] = { NULL };
        struct ldb_result *res;
        
-       ret = ldb_search(ldb, dn, LDB_SCOPE_SUBTREE, "distinguishedName=*", attrs, &res);
+       ret = ldb_search(ldb, ldb, &res, dn, LDB_SCOPE_SUBTREE, attrs, "distinguishedName=*");
        if (ret != LDB_SUCCESS) return -1;
 
        for (i = 0; i < res->count; i++) {
index e58a5a271e24c9cd74905c6aef608013cb39927c..b2a040cd09c94c8c25c6ed1574a2149c7d2467a4 100644 (file)
@@ -303,7 +303,7 @@ int main(int argc, const char **argv)
                }
        }
 
-       ret = ldb_search(ldb, basedn, options->scope, expression, attrs, &result);
+       ret = ldb_search(ldb, ldb, &result, basedn, options->scope, attrs, "%s", expression);
        if (ret != LDB_SUCCESS) {
                printf("search failed - %s\n", ldb_errstring(ldb));
                exit(1);
index 169ff02da1ad9dfb75862886e156549ccff81a96..f3d6d621a9b977bf97635abb823507b231de37bb 100644 (file)
@@ -227,7 +227,7 @@ static void search_uid(struct ldb_context *ldb, struct ldb_dn *basedn, int nreco
                int ret;
 
                expr = talloc_asprintf(ldb, "(uid=TEST%d)", uid);
-               ret = ldb_search(ldb, basedn, LDB_SCOPE_SUBTREE, expr, NULL, &res);
+               ret = ldb_search(ldb, ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL, "%s", expr);
 
                if (ret != LDB_SUCCESS || (uid < nrecords && res->count != 1)) {
                        printf("Failed to find %s - %s\n", expr, ldb_errstring(ldb));
@@ -354,7 +354,7 @@ static void start_test_index(struct ldb_context **ldb)
 
        basedn = ldb_dn_new(*ldb, *ldb, options->basedn);
 
-       ret = ldb_search(*ldb, basedn, LDB_SCOPE_SUBTREE, "uid=test", NULL, &res);
+       ret = ldb_search(*ldb, *ldb, &res, basedn, LDB_SCOPE_SUBTREE, NULL, "uid=test");
        if (ret != LDB_SUCCESS) { 
                printf("Search with (uid=test) filter failed!\n");
                exit(1);
index a8a9ed597e47db51bdea97cc208aec5b62255055..25b8c583ed2f4c27650e36fc65f56092e2439472 100644 (file)
@@ -199,7 +199,7 @@ static WERROR cache_subkeys(struct ldb_key_data *kd)
        struct ldb_result *res;
        int ret;
 
-       ret = ldb_search(c, kd->dn, LDB_SCOPE_ONELEVEL, "(key=*)", NULL, &res);
+       ret = ldb_search(c, c, &res, kd->dn, LDB_SCOPE_ONELEVEL, NULL, "(key=*)");
 
        if (ret != LDB_SUCCESS) {
                DEBUG(0, ("Error getting subkeys for '%s': %s\n",
@@ -220,8 +220,8 @@ static WERROR cache_values(struct ldb_key_data *kd)
        struct ldb_result *res;
        int ret;
 
-       ret = ldb_search(c, kd->dn, LDB_SCOPE_ONELEVEL,
-                        "(value=*)", NULL, &res);
+       ret = ldb_search(c, c, &res, kd->dn, LDB_SCOPE_ONELEVEL,
+                        NULL, "(value=*)");
 
        if (ret != LDB_SUCCESS) {
                DEBUG(0, ("Error getting values for '%s': %s\n",
@@ -299,21 +299,25 @@ static WERROR ldb_get_value(TALLOC_CTX *mem_ctx, struct hive_key *k,
        int ret;
        char *query = talloc_asprintf(mem_ctx, "(value=%s)", name);
 
-       ret = ldb_search(c, kd->dn, LDB_SCOPE_ONELEVEL, query, NULL, &res);
+       ret = ldb_search(c, mem_ctx, &res, kd->dn, LDB_SCOPE_ONELEVEL, NULL, "%s", query);
 
        talloc_free(query);
 
        if (ret != LDB_SUCCESS) {
                DEBUG(0, ("Error getting values for '%s': %s\n",
                        ldb_dn_get_linearized(kd->dn), ldb_errstring(c)));
+               talloc_free(res);
                return WERR_FOOBAR;
        }
 
-       if (res->count == 0)
+       if (res->count == 0) {
+               talloc_free(res);
                return WERR_BADFILE;
+       }
 
        reg_ldb_unpack_value(mem_ctx, lp_iconv_convenience(global_loadparm), res->msgs[0], NULL, data_type, data);
 
+       talloc_free(res);
        return WERR_OK;
 }
 
@@ -329,7 +333,7 @@ static WERROR ldb_open_key(TALLOC_CTX *mem_ctx, const struct hive_key *h,
 
        ldap_path = reg_path_to_ldb(mem_ctx, h, name, NULL);
 
-       ret = ldb_search(c, ldap_path, LDB_SCOPE_BASE, "(key=*)", NULL, &res);
+       ret = ldb_search(c, mem_ctx, &res, ldap_path, LDB_SCOPE_BASE, NULL, "(key=*)");
 
        if (ret != LDB_SUCCESS) {
                DEBUG(3, ("Error opening key '%s': %s\n",
@@ -501,8 +505,8 @@ static WERROR ldb_del_key(const struct hive_key *key, const char *name)
        }
 
        /* Search for subkeys */
-       ret = ldb_search(c, ldap_path, LDB_SCOPE_ONELEVEL,
-                        "(key=*)", NULL, &res_keys);
+       ret = ldb_search(c, mem_ctx, &res_keys, ldap_path, LDB_SCOPE_ONELEVEL,
+                        NULL, "(key=*)");
 
        if (ret != LDB_SUCCESS) {
                DEBUG(0, ("Error getting subkeys for '%s': %s\n",
@@ -512,8 +516,8 @@ static WERROR ldb_del_key(const struct hive_key *key, const char *name)
        }
 
        /* Search for values */
-       ret = ldb_search(c, ldap_path, LDB_SCOPE_ONELEVEL,
-                        "(value=*)", NULL, &res_vals);
+       ret = ldb_search(c, mem_ctx, &res_vals, ldap_path, LDB_SCOPE_ONELEVEL,
+                        NULL, "(value=*)");
 
        if (ret != LDB_SUCCESS) {
                DEBUG(0, ("Error getting values for '%s': %s\n",
index fab729c0367b07985ef8014ff35e7db8268e4399..0465022edd6e7c6b4e4747227bf56a356b7835a4 100644 (file)
@@ -52,7 +52,8 @@ int gendb_search_v(struct ldb_context *ldb,
 
        res = NULL;
 
-       ret = ldb_search(ldb, basedn, scope, expr, attrs, &res);
+       ret = ldb_search(ldb, mem_ctx, &res, basedn, scope, attrs,
+                        expr?"%s":NULL, expr);
 
        if (ret == LDB_SUCCESS) {
                talloc_steal(mem_ctx, res->msgs);
index 332b041e3691beaa9f3d613d268f3ebde218212f..b9071d5eb1dbbae8f16c2bf2570cefb598503800 100644 (file)
@@ -820,8 +820,8 @@ static NTSTATUS becomeDC_ldap1_rootdse(struct libnet_BecomeDC_state *s)
        basedn = ldb_dn_new(s, s->ldap1.ldb, NULL);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -829,7 +829,6 @@ static NTSTATUS becomeDC_ldap1_rootdse(struct libnet_BecomeDC_state *s)
                talloc_free(r);
                return NT_STATUS_INVALID_NETWORK_RESPONSE;
        }
-       talloc_steal(s, r);
 
        s->ldap1.rootdse = r->msgs[0];
 
@@ -864,8 +863,8 @@ static NTSTATUS becomeDC_ldap1_crossref_behavior_version(struct libnet_BecomeDC_
        basedn = ldb_dn_new(s, s->ldap1.ldb, s->forest.config_dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_ONELEVEL,
-                        "(cn=Partitions)", attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_ONELEVEL, attrs,
+                        "(cn=Partitions)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -893,8 +892,8 @@ static NTSTATUS becomeDC_ldap1_domain_behavior_version(struct libnet_BecomeDC_st
        basedn = ldb_dn_new(s, s->ldap1.ldb, s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -922,8 +921,8 @@ static NTSTATUS becomeDC_ldap1_schema_object_version(struct libnet_BecomeDC_stat
        basedn = ldb_dn_new(s, s->ldap1.ldb, s->forest.schema_dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -952,8 +951,8 @@ static NTSTATUS becomeDC_ldap1_w2k3_update_revision(struct libnet_BecomeDC_state
                                s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        talloc_free(basedn);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                /* w2k doesn't have this object */
@@ -1000,8 +999,8 @@ static NTSTATUS becomeDC_ldap1_infrastructure_fsmo(struct libnet_BecomeDC_state
                                s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", _1_1_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        _1_1_attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -1013,8 +1012,8 @@ static NTSTATUS becomeDC_ldap1_infrastructure_fsmo(struct libnet_BecomeDC_state
        basedn = talloc_steal(s, r->msgs[0]->dn);
        talloc_free(r);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", fsmo_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        fsmo_attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -1038,8 +1037,8 @@ static NTSTATUS becomeDC_ldap1_infrastructure_fsmo(struct libnet_BecomeDC_state
        s->infrastructure_fsmo.server_dn_str = ldb_dn_alloc_linearized(s, server_dn);
        NT_STATUS_HAVE_NO_MEMORY(s->infrastructure_fsmo.server_dn_str);
 
-       ret = ldb_search(s->ldap1.ldb, server_dn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", dns_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, server_dn, LDB_SCOPE_BASE,
+                        dns_attrs, "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
        } else if (r->count != 1) {
@@ -1053,8 +1052,8 @@ static NTSTATUS becomeDC_ldap1_infrastructure_fsmo(struct libnet_BecomeDC_state
 
        talloc_free(r);
 
-       ret = ldb_search(s->ldap1.ldb, ntds_dn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", guid_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, ntds_dn, LDB_SCOPE_BASE,
+                        guid_attrs, "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
        } else if (r->count != 1) {
@@ -1097,8 +1096,8 @@ static NTSTATUS becomeDC_ldap1_rid_manager_fsmo(struct libnet_BecomeDC_state *s)
        basedn = ldb_dn_new(s, s->ldap1.ldb, s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", rid_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        rid_attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -1115,8 +1114,8 @@ static NTSTATUS becomeDC_ldap1_rid_manager_fsmo(struct libnet_BecomeDC_state *s)
 
        talloc_free(r);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", fsmo_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        fsmo_attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -1140,8 +1139,8 @@ static NTSTATUS becomeDC_ldap1_rid_manager_fsmo(struct libnet_BecomeDC_state *s)
        s->rid_manager_fsmo.server_dn_str = ldb_dn_alloc_linearized(s, server_dn);
        NT_STATUS_HAVE_NO_MEMORY(s->rid_manager_fsmo.server_dn_str);
 
-       ret = ldb_search(s->ldap1.ldb, server_dn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", dns_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, server_dn, LDB_SCOPE_BASE,
+                        dns_attrs, "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
        } else if (r->count != 1) {
@@ -1155,8 +1154,8 @@ static NTSTATUS becomeDC_ldap1_rid_manager_fsmo(struct libnet_BecomeDC_state *s)
 
        talloc_free(r);
 
-       ret = ldb_search(s->ldap1.ldb, ntds_dn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", guid_attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, ntds_dn, LDB_SCOPE_BASE,
+                        guid_attrs, "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
        } else if (r->count != 1) {
@@ -1182,8 +1181,8 @@ static NTSTATUS becomeDC_ldap1_site_object(struct libnet_BecomeDC_state *s)
                                s->forest.config_dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", NULL, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        NULL, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -1214,7 +1213,6 @@ static NTSTATUS becomeDC_ldap1_computer_object(struct libnet_BecomeDC_state *s)
        int ret;
        struct ldb_result *r;
        struct ldb_dn *basedn;
-       char *filter;
        static const char *attrs[] = {
                "distinguishedName",
                "userAccountControl",
@@ -1224,12 +1222,9 @@ static NTSTATUS becomeDC_ldap1_computer_object(struct libnet_BecomeDC_state *s)
        basedn = ldb_dn_new(s, s->ldap1.ldb, s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       filter = talloc_asprintf(basedn, "(&(|(objectClass=user)(objectClass=computer))(sAMAccountName=%s$))",
-                                s->dest_dsa.netbios_name);
-       NT_STATUS_HAVE_NO_MEMORY(filter);
-
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_SUBTREE, 
-                        filter, attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_SUBTREE, attrs,
+                        "(&(|(objectClass=user)(objectClass=computer))(sAMAccountName=%s$))",
+                        s->dest_dsa.netbios_name);
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -1263,8 +1258,8 @@ static NTSTATUS becomeDC_ldap1_server_object_1(struct libnet_BecomeDC_state *s)
                                s->forest.config_dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", NULL, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        NULL, "(objectClass=*)");
        talloc_free(basedn);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                /* if the object doesn't exist, we'll create it later */
@@ -1320,8 +1315,8 @@ static NTSTATUS becomeDC_ldap1_server_object_2(struct libnet_BecomeDC_state *s)
        basedn = ldb_dn_new(s, s->ldap1.ldb, s->dest_dsa.computer_dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap1.ldb, basedn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->ldap1.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -2908,8 +2903,8 @@ static NTSTATUS becomeDC_ldap2_move_computer(struct libnet_BecomeDC_state *s)
                                s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap2.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", _1_1_attrs, &r);
+       ret = ldb_search(s->ldap2.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        _1_1_attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
index 5776888cb0fae16e87101cb9b3e9f6a2fa0f6d9a..43f86489217cf2e64f21f2624eadb89ba76c88d4 100644 (file)
@@ -248,8 +248,8 @@ static NTSTATUS libnet_JoinADSDomain(struct libnet_context *ctx, struct libnet_J
        }
 
        /* search for the user's record */
-       ret = ldb_search(remote_ldb, account_dn, LDB_SCOPE_BASE, 
-                        NULL, attrs, &res);
+       ret = ldb_search(remote_ldb, tmp_ctx, &res,
+                        account_dn, LDB_SCOPE_BASE, attrs, NULL);
        if (ret != LDB_SUCCESS) {
                r->out.error_string = talloc_asprintf(r, "ldb_search for %s failed - %s",
                                                      account_dn_str, ldb_errstring(remote_ldb));
@@ -257,8 +257,6 @@ static NTSTATUS libnet_JoinADSDomain(struct libnet_context *ctx, struct libnet_J
                return NT_STATUS_UNSUCCESSFUL;
        }
 
-       talloc_steal(tmp_ctx, res);
-
        if (res->count != 1) {
                r->out.error_string = talloc_asprintf(r, "ldb_search for %s failed - found %d entries",
                                                      account_dn_str, res->count);
index 6a42fa2370cd47ce0a77ac2baad53712b7d5e220..4eeaf1b80c306b0b062e739791d3739f8c254da2 100644 (file)
@@ -337,8 +337,8 @@ static NTSTATUS unbecomeDC_ldap_rootdse(struct libnet_UnbecomeDC_state *s)
        basedn = ldb_dn_new(s, s->ldap.ldb, NULL);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap.ldb, basedn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(s->ldap.ldb, s, &r, basedn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -346,7 +346,6 @@ static NTSTATUS unbecomeDC_ldap_rootdse(struct libnet_UnbecomeDC_state *s)
                talloc_free(r);
                return NT_STATUS_INVALID_NETWORK_RESPONSE;
        }
-       talloc_steal(s, r);
 
        s->domain.dn_str        = ldb_msg_find_attr_as_string(r->msgs[0], "defaultNamingContext", NULL);
        if (!s->domain.dn_str) return NT_STATUS_INVALID_NETWORK_RESPONSE;
@@ -371,7 +370,6 @@ static NTSTATUS unbecomeDC_ldap_computer_object(struct libnet_UnbecomeDC_state *
        int ret;
        struct ldb_result *r;
        struct ldb_dn *basedn;
-       char *filter;
        static const char *attrs[] = {
                "distinguishedName",
                "userAccountControl",
@@ -381,12 +379,9 @@ static NTSTATUS unbecomeDC_ldap_computer_object(struct libnet_UnbecomeDC_state *
        basedn = ldb_dn_new(s, s->ldap.ldb, s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       filter = talloc_asprintf(basedn, "(&(|(objectClass=user)(objectClass=computer))(sAMAccountName=%s$))",
-                                s->dest_dsa.netbios_name);
-       NT_STATUS_HAVE_NO_MEMORY(filter);
-
-       ret = ldb_search(s->ldap.ldb, basedn, LDB_SCOPE_SUBTREE, 
-                        filter, attrs, &r);
+       ret = ldb_search(s->ldap.ldb, s, &r, basedn, LDB_SCOPE_SUBTREE, attrs,
+                        "(&(|(objectClass=user)(objectClass=computer))(sAMAccountName=%s$))",
+                        s->dest_dsa.netbios_name);
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
@@ -462,8 +457,8 @@ static NTSTATUS unbecomeDC_ldap_move_computer(struct libnet_UnbecomeDC_state *s)
                                s->domain.dn_str);
        NT_STATUS_HAVE_NO_MEMORY(basedn);
 
-       ret = ldb_search(s->ldap.ldb, basedn, LDB_SCOPE_BASE,
-                        "(objectClass=*)", _1_1_attrs, &r);
+       ret = ldb_search(s->ldap.ldb, s, &r, basedn, LDB_SCOPE_BASE,
+                        _1_1_attrs, "(objectClass=*)");
        talloc_free(basedn);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_LDAP(ret);
index c84b01f2b20571d667162ab27383e5243881f45a..283cd1219abb66a5ea2caf32a4720fd6fe8b7384 100644 (file)
@@ -45,10 +45,8 @@ uint64_t winsdb_get_maxVersion(struct winsdb_handle *h)
        if (!dn) goto failed;
 
        /* find the record in the WINS database */
-       ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, 
-                        NULL, NULL, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
        if (res->count > 1) goto failed;
 
        if (res->count == 1) {
@@ -82,14 +80,10 @@ uint64_t winsdb_set_maxVersion(struct winsdb_handle *h, uint64_t newMaxVersion)
        if (!dn) goto failed;
 
        /* find the record in the WINS database */
-       ret = ldb_search(wins_db, dn, LDB_SCOPE_BASE, NULL, NULL, &res);
-
+       ret = ldb_search(wins_db, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
        if (res->count > 1) goto failed;
 
-       talloc_steal(tmp_ctx, res);
-
        if (res->count == 1) {
                oldMaxVersion = ldb_msg_find_attr_as_uint64(res->msgs[0], "maxVersion", 0);
        }
@@ -143,10 +137,8 @@ uint64_t winsdb_get_seqnumber(struct winsdb_handle *h)
        if (!dn) goto failed;
 
        /* find the record in the WINS database */
-       ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, 
-                        NULL, NULL, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
        if (res->count > 1) goto failed;
 
        if (res->count == 1) {
@@ -589,10 +581,10 @@ NTSTATUS winsdb_lookup(struct winsdb_handle *h,
        time_t now = time(NULL);
 
        /* find the record in the WINS database */
-       ret = ldb_search(wins_db, winsdb_dn(tmp_ctx, wins_db, name), LDB_SCOPE_BASE, 
-                        NULL, NULL, &res);
+       ret = ldb_search(wins_db, tmp_ctx, &res,
+                        winsdb_dn(tmp_ctx, wins_db, name),
+                        LDB_SCOPE_BASE, NULL, NULL);
 
-       talloc_steal(tmp_ctx, res);
        if (ret != LDB_SUCCESS || res->count > 1) {
                status = NT_STATUS_INTERNAL_DB_CORRUPTION;
                goto failed;
@@ -964,9 +956,8 @@ static bool winsdb_check_or_add_module_list(struct event_context *ev_ctx,
        if (!dn) goto failed;
 
        /* find the record in the WINS database */
-       ret = ldb_search(h->ldb, dn, LDB_SCOPE_BASE, NULL, NULL, &res);
+       ret = ldb_search(h->ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
 
        if (res->count > 0) goto skip;
 
index 8bcf258e5ed4edf1b87dd32ef4cfa92fbbda589c..c3a9a1c792d0011b1cce2c01a2f297533870d9d6 100644 (file)
@@ -166,7 +166,7 @@ static NTSTATUS ntp_signd_recv(void *private, DATA_BLOB wrapped_input)
                return signing_failure(ntp_signdconn, sign_request.packet_id);
        }
 
-       ret = ldb_search_exp_fmt(ntp_signdconn->ntp_signd->samdb, tmp_ctx,
+       ret = ldb_search(ntp_signdconn->ntp_signd->samdb, tmp_ctx,
                                 &res, samdb_base_dn(ntp_signdconn->ntp_signd->samdb),
                                 LDB_SCOPE_SUBTREE, attrs, "(&(objectSid=%s)(objectClass=user))",
                                 dom_sid_string(tmp_ctx, sid));
index eba1665cc9f5654fe22f47e56bb95c005a83eaa7..4896a710480db6c4855b491a6b440af19e8f8390 100644 (file)
@@ -174,8 +174,8 @@ static NTSTATUS sldb_list_all(TALLOC_CTX *mem_ctx,
 
        ldb = talloc_get_type(ctx->priv_data, struct ldb_context);
 
-       ret = ldb_search(ldb, ldb_dn_new(tmp_ctx, ldb, "CN=SHARES"), LDB_SCOPE_SUBTREE, "(name=*)", NULL, &res);
-       talloc_steal(tmp_ctx, res);
+       ret = ldb_search(ldb, tmp_ctx, &res, ldb_dn_new(tmp_ctx, ldb, "CN=SHARES"),
+                        LDB_SCOPE_SUBTREE, NULL, "(name=*)");
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
                return NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -223,7 +223,7 @@ static NTSTATUS sldb_get_config(TALLOC_CTX *mem_ctx,
 
        ldb = talloc_get_type(ctx->priv_data, struct ldb_context);
 
-       ret = ldb_search_exp_fmt(ldb, tmp_ctx, &res,
+       ret = ldb_search(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) {
index bbb78cb7787f227ec38b216072151e34ebe161e8..d555ba27bfa81b68cd471c470aea645986d853b9 100644 (file)
@@ -69,7 +69,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C
        server_site_dn = samdb_server_site_dn(b_state->sam_ctx, mem_ctx);
        W_ERROR_HAVE_NO_MEMORY(server_site_dn);
 
-       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &site_res,
+       ret = ldb_search(b_state->sam_ctx, mem_ctx, &site_res,
                                 server_site_dn, LDB_SCOPE_BASE, site_attrs,
                                 "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
@@ -86,7 +86,7 @@ static WERROR dcesrv_drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_C
        ntds_dn = samdb_ntds_settings_dn(b_state->sam_ctx);
        W_ERROR_HAVE_NO_MEMORY(ntds_dn);
 
-       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &ntds_res,
+       ret = ldb_search(b_state->sam_ctx, mem_ctx, &ntds_res,
                                 ntds_dn, LDB_SCOPE_BASE, ntds_attrs,
                                 "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
@@ -540,7 +540,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                return WERR_UNKNOWN_LEVEL;
        }
 
-       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res, sites_dn, LDB_SCOPE_SUBTREE, attrs, 
+       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res, sites_dn, LDB_SCOPE_SUBTREE, attrs,
                                 "objectClass=server");
        
        if (ret) {
@@ -571,7 +571,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                                return WERR_NOMEM;
                        }
 
-                       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, 
+                       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_account, ref_dn,
                                                 LDB_SCOPE_BASE, attrs_account_1, "objectClass=computer");
                        if (ret == LDB_SUCCESS && res_account->count == 1) {
                                const char *errstr;
@@ -588,7 +588,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                                                                     &domain_dn, &errstr);
                                
                                if (ret == LDB_SUCCESS) {
-                                       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, 
+                                       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn,
                                                                 LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s",
                                                                 ldb_dn_get_linearized(ntds_dn));
                                        if (ret) {
@@ -641,7 +641,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                                return WERR_NOMEM;
                        }
 
-                       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_ntds, ntds_dn, 
+                       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_ntds, ntds_dn,
                                                 LDB_SCOPE_BASE, attrs_ntds, "objectClass=nTDSDSA");
                        if (ret == LDB_SUCCESS && res_ntds->count == 1) {
                                ctr2->array[i].is_gc
@@ -655,7 +655,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                                          ldb_dn_get_linearized(ntds_dn), ldb_errstring(b_state->sam_ctx)));
                        }
 
-                       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_site, site_dn, 
+                       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_site, site_dn,
                                                 LDB_SCOPE_BASE, attrs_site, "objectClass=site");
                        if (ret == LDB_SUCCESS && res_site->count == 1) {
                                ctr2->array[i].site_guid 
@@ -667,7 +667,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                                          ldb_dn_get_linearized(site_dn), ldb_errstring(b_state->sam_ctx)));
                        }
 
-                       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_account, ref_dn, 
+                       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_account, ref_dn,
                                                 LDB_SCOPE_BASE, attrs_account_2, "objectClass=computer");
                        if (ret == LDB_SUCCESS && res_account->count == 1) {
                                const char *errstr;
@@ -685,7 +685,7 @@ static WERROR dcesrv_drsuapi_DsGetDomainControllerInfo_1(struct drsuapi_bind_sta
                                                                     &domain_dn, &errstr);
                                
                                if (ret == LDB_SUCCESS) {
-                                       ret = ldb_search_exp_fmt(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn, 
+                                       ret = ldb_search(b_state->sam_ctx, mem_ctx, &res_domain, domain_dn,
                                                                 LDB_SCOPE_BASE, attrs_none, "fSMORoleOwner=%s",
                                                                 ldb_dn_get_linearized(ntds_dn));
                                        if (ret == LDB_SUCCESS && res_domain->count == 1) {
index 0dc21fd9c502c2dcdf650b701ede05d31ec8f5d5..e5e31c74f8331c65932c6160d4bbd66ed2ccbc63 100644 (file)
@@ -71,12 +71,11 @@ NTSTATUS dcesrv_lsa_get_policy_state(struct dcesrv_call_state *dce_call, TALLOC_
                return NT_STATUS_NO_MEMORY;             
        }
 
-       ret = ldb_search(state->sam_ldb, state->domain_dn, LDB_SCOPE_BASE, NULL, dom_attrs, &dom_res);
-       
+       ret = ldb_search(state->sam_ldb, mem_ctx, &dom_res,
+                        state->domain_dn, LDB_SCOPE_BASE, dom_attrs, NULL);
        if (ret != LDB_SUCCESS) {
                return NT_STATUS_INVALID_SYSTEM_SERVICE;
        }
-       talloc_steal(mem_ctx, dom_res);
        if (dom_res->count != 1) {
                return NT_STATUS_NO_SUCH_DOMAIN;                
        }
@@ -95,7 +94,7 @@ NTSTATUS dcesrv_lsa_get_policy_state(struct dcesrv_call_state *dce_call, TALLOC_
        
        talloc_free(dom_res);
 
-       ret = ldb_search_exp_fmt(state->sam_ldb, state, &ref_res,
+       ret = ldb_search(state->sam_ldb, state, &ref_res,
                                 partitions_basedn, LDB_SCOPE_SUBTREE, ref_attrs,
                                 "(&(objectclass=crossRef)(ncName=%s))",
                                 ldb_dn_get_linearized(state->domain_dn));
@@ -125,7 +124,7 @@ NTSTATUS dcesrv_lsa_get_policy_state(struct dcesrv_call_state *dce_call, TALLOC_
 
        talloc_free(ref_res);
 
-       ret = ldb_search_exp_fmt(state->sam_ldb, state, &forest_ref_res,
+       ret = ldb_search(state->sam_ldb, state, &forest_ref_res,
                                 partitions_basedn, LDB_SCOPE_SUBTREE, ref_attrs,
                                 "(&(objectclass=crossRef)(ncName=%s))",
                                 ldb_dn_get_linearized(state->forest_dn));
index e54d518f766406b893db852a574a9d73244e689b..9daf4f2194c6c8900008b4abde09ff766a2eb51f 100644 (file)
@@ -341,7 +341,7 @@ static NTSTATUS dcesrv_samr_EnumDomains(struct dcesrv_call_state *dce_call, TALL
 
        partitions_basedn = samdb_partitions_dn(c_state->sam_ctx, mem_ctx);
 
-       ret = ldb_search_exp_fmt(c_state->sam_ctx, mem_ctx, &dom_res, ldb_get_default_basedn(c_state->sam_ctx),
+       ret = ldb_search(c_state->sam_ctx, mem_ctx, &dom_res, ldb_get_default_basedn(c_state->sam_ctx),
                                 LDB_SCOPE_SUBTREE, dom_attrs, "(|(|(objectClass=domain)(objectClass=builtinDomain))(objectClass=samba4LocalDomain))");
        if (ret != LDB_SUCCESS) {
                DEBUG(0,("samdb: unable to find domains: %s\n", ldb_errstring(c_state->sam_ctx)));
@@ -373,7 +373,7 @@ static NTSTATUS dcesrv_samr_EnumDomains(struct dcesrv_call_state *dce_call, TALL
        for (i=0;i<dom_res->count-start_i;i++) {
                array->entries[i].idx = start_i + i;
                /* try and find the domain */
-               ret = ldb_search_exp_fmt(c_state->sam_ctx, mem_ctx, &ref_res, partitions_basedn,
+               ret = ldb_search(c_state->sam_ctx, mem_ctx, &ref_res, partitions_basedn,
                                         LDB_SCOPE_SUBTREE, ref_attrs, "(&(objectClass=crossRef)(ncName=%s))", 
                                         ldb_dn_get_linearized(dom_res->msgs[i]->dn));
 
@@ -1502,7 +1502,7 @@ static NTSTATUS dcesrv_samr_EnumDomainUsers(struct dcesrv_call_state *dce_call,
        d_state = h->data;
        
        /* don't have to worry about users in the builtin domain, as there are none */
-       ret = ldb_search_exp_fmt(d_state->sam_ctx, mem_ctx, &res, d_state->domain_dn, LDB_SCOPE_SUBTREE, attrs, "objectClass=user");
+       ret = ldb_search(d_state->sam_ctx, mem_ctx, &res, d_state->domain_dn, LDB_SCOPE_SUBTREE, attrs, "objectClass=user");
 
        if (ret != LDB_SUCCESS) {
                DEBUG(3, ("Failed to search for Domain Users in %s: %s\n", 
@@ -2110,7 +2110,7 @@ static NTSTATUS dcesrv_samr_QueryGroupInfo(struct dcesrv_call_state *dce_call, T
 
        a_state = h->data;
        
-       ret = ldb_search_exp_fmt(a_state->sam_ctx, mem_ctx, &res, a_state->account_dn, LDB_SCOPE_SUBTREE, attrs, "objectClass=*");
+       ret = ldb_search(a_state->sam_ctx, mem_ctx, &res, a_state->account_dn, LDB_SCOPE_SUBTREE, attrs, "objectClass=*");
        
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                return NT_STATUS_NO_SUCH_GROUP;
@@ -2246,7 +2246,7 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T
 
        /* In native mode, AD can also nest domain groups. Not sure yet
         * whether this is also available via RPC. */
-       ret = ldb_search_exp_fmt(d_state->sam_ctx, mem_ctx, &res,
+       ret = ldb_search(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));
@@ -2348,7 +2348,7 @@ static NTSTATUS dcesrv_samr_DeleteGroupMember(struct dcesrv_call_state *dce_call
 
        /* In native mode, AD can also nest domain groups. Not sure yet
         * whether this is also available via RPC. */
-       ret = ldb_search_exp_fmt(d_state->sam_ctx, mem_ctx, &res,
+       ret = ldb_search(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));
index 8437e7f79db13af5652b04815df1e48fa7b8eae8..dd1d2de33163b367753e310c951742e2a8d58ced 100644 (file)
@@ -57,8 +57,8 @@ static bool test_search_rootDSE(struct ldb_context *ldb, struct test_rootDSE *ro
 
        d_printf("Testing RootDSE Search\n");
 
-       ret = ldb_search(ldb, ldb_dn_new(ldb, ldb, NULL), LDB_SCOPE_BASE, 
-                        NULL, NULL, &r);
+       ret = ldb_search(ldb, ldb, &r, ldb_dn_new(ldb, ldb, NULL),
+                        LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) {
                return false;
        } else if (r->count != 1) {
index 87b7e09e136276d2e13ef49ea5d2f20ba01bbfc8..3c491dca0544e55db4afd8e524297067f1db468d 100644 (file)
@@ -57,15 +57,14 @@ static bool test_check_uptodatevector(struct torture_context *torture,
        torture_comment(torture, "Check replUpToDateVector on partition[%s]\n",
                                 ldb_dn_get_linearized(partition_dn));
 
-       ret = ldb_search(ldb, partition_dn, LDB_SCOPE_BASE, 
-                        "(objectClass=*)", attrs, &r);
+       ret = ldb_search(ldb, torture, &r, partition_dn, LDB_SCOPE_BASE, attrs,
+                        "(objectClass=*)");
        if (ret != LDB_SUCCESS) {
                return false;
        } else if (r->count != 1) {
                talloc_free(r);
                return false;
        }
-       talloc_steal(torture, r);
 
        ZERO_STRUCT(utdv1);
        utdv_val1 = ldb_msg_find_ldb_val(r->msgs[0], "replUpToDateVector");
@@ -104,15 +103,14 @@ static bool test_check_uptodatevector(struct torture_context *torture,
                ret = ldb_modify(ldb, msg);
                if (ret != LDB_SUCCESS) return false;
 
-               ret = ldb_search(ldb, partition_dn, LDB_SCOPE_BASE, 
-                                "(objectClass=*)", attrs, &r);
+               ret = ldb_search(ldb, msg, &r, partition_dn, LDB_SCOPE_BASE,
+                                attrs, "(objectClass=*)");
                if (ret != LDB_SUCCESS) {
                        return false;
                } else if (r->count != 1) {
                        talloc_free(r);
                        return false;
                }
-               talloc_steal(msg, r);
 
                ZERO_STRUCT(utdv);
                utdv_val = ldb_msg_find_ldb_val(r->msgs[0], "replUpToDateVector");
index 3d449a5991562a5d492ece9fcba62538c570cfa1..9547e9ff74ce03946fbb5fa5ee78c6eef14ef13f 100644 (file)
@@ -211,21 +211,18 @@ static bool test_ldb_speed(struct torture_context *torture, const void *_data)
        for (count=0;timeval_elapsed(&tv) < timelimit;count++) {
                struct ldb_dn *dn;
                struct ldb_result *res;
-               char *expr;
 
                i = random() % torture_entries;
                dn = ldb_dn_new_fmt(tmp_ctx, ldb, "SID=S-1-5-21-53173311-3623041448-2049097239-%u", i);
-               if (ldb_search(ldb, dn, LDB_SCOPE_BASE, NULL, NULL, &res) != LDB_SUCCESS || res->count != 1) {
+               if (ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL) != LDB_SUCCESS || res->count != 1) {
                        torture_fail(torture, talloc_asprintf(torture, "Failed to find SID %d", i));
                }
                talloc_free(res);
                talloc_free(dn);
-               expr = talloc_asprintf(tmp_ctx, "(UID=%u)", i);
-               if (ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE, expr, NULL, &res) != LDB_SUCCESS || res->count != 1) {
+               if (ldb_search(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "(UID=%u)", i) != LDB_SUCCESS || res->count != 1) {
                        torture_fail(torture, talloc_asprintf(torture, "Failed to find UID %d", i));
                }
                talloc_free(res);
-               talloc_free(expr);
        }
 
        if (talloc_total_blocks(torture) > 100) {
index e229bd104b0a20168e531cf26d4a67f7809210c2..3c2ffe7a00c188231a7e1e4406b823515c0d0a94 100644 (file)
@@ -75,18 +75,16 @@ static struct ldb_dn *find_schema_dn(struct ldb_context *ldb, TALLOC_CTX *mem_ct
        }
        
        /* Search for rootdse */
-       ldb_ret = ldb_search(ldb, basedn, LDB_SCOPE_BASE, NULL, rootdse_attrs, &rootdse_res);
+       ldb_ret = ldb_search(ldb, mem_ctx, &rootdse_res,
+                            basedn, LDB_SCOPE_BASE, rootdse_attrs, NULL);
        if (ldb_ret != LDB_SUCCESS) {
-               ldb_ret = ldb_search(ldb, basedn, LDB_SCOPE_SUBTREE, 
-                                "(&(objectClass=dMD)(cn=Schema))", 
-                                NULL, &schema_res);
+               ldb_ret = ldb_search(ldb, mem_ctx, &schema_res, basedn, LDB_SCOPE_SUBTREE,
+                                    NULL, "(&(objectClass=dMD)(cn=Schema))");
                if (ldb_ret) {
                        printf("cn=Schema Search failed: %s\n", ldb_errstring(ldb));
                        return NULL;
                }
 
-               talloc_steal(mem_ctx, schema_res);
-
                if (schema_res->count != 1) {
                        talloc_free(schema_res);
                        printf("Failed to find rootDSE");
index 333a86445a244037ad5340e6c7ad1966b5e6c4b6..56ade3e8b1d35ba5efbeddf5881581f346780be9 100644 (file)
@@ -54,11 +54,9 @@ static int idmap_get_bounds(struct idmap_context *idmap_ctx, uint32_t *low,
        dn = ldb_dn_new(tmp_ctx, ldb, "CN=CONFIG");
        if (dn == NULL) goto failed;
 
-       ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, NULL, NULL, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) goto failed;
 
-       talloc_steal(tmp_ctx, res);
-
        if (res->count != 1) {
                ret = -1;
                goto failed;
@@ -228,7 +226,7 @@ NTSTATUS idmap_xid_to_sid(struct idmap_context *idmap_ctx, TALLOC_CTX *mem_ctx,
                        goto failed;
        }
 
-       ret = ldb_search_exp_fmt(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
+       ret = ldb_search(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
                                 NULL, "(&(|(type=ID_TYPE_BOTH)(type=%s))"
                                 "(xidNumber=%u))", id_type, unixid->id);
        if (ret != LDB_SUCCESS) {
@@ -345,7 +343,7 @@ NTSTATUS idmap_sid_to_xid(struct idmap_context *idmap_ctx, TALLOC_CTX *mem_ctx,
                return NT_STATUS_OK;
         }
 
-       ret = ldb_search_exp_fmt(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
+       ret = ldb_search(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
                                 NULL, "(&(objectClass=sidMap)(objectSid=%s))",
                                 ldap_encode_ndr_dom_sid(tmp_ctx, sid));
        if (ret != LDB_SUCCESS) {
@@ -401,7 +399,7 @@ NTSTATUS idmap_sid_to_xid(struct idmap_context *idmap_ctx, TALLOC_CTX *mem_ctx,
 
        /* Redo the search to make sure noone changed the mapping while we
         * weren't looking */
-       ret = ldb_search_exp_fmt(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
+       ret = ldb_search(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
                                 NULL, "(&(objectClass=sidMap)(objectSid=%s))",
                                 ldap_encode_ndr_dom_sid(tmp_ctx, sid));
        if (ret != LDB_SUCCESS) {
@@ -431,15 +429,13 @@ NTSTATUS idmap_sid_to_xid(struct idmap_context *idmap_ctx, TALLOC_CTX *mem_ctx,
                goto failed;
        }
 
-       ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, NULL, NULL, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) {
                DEBUG(1, ("Search failed: %s\n", ldb_errstring(ldb)));
                status = NT_STATUS_NONE_MAPPED;
                goto failed;
        }
 
-       talloc_steal(tmp_ctx, res);
-
        if (res->count != 1) {
                DEBUG(1, ("No CN=CONFIG record, idmap database is broken.\n"));
                status = NT_STATUS_NONE_MAPPED;
index 0508c306e01997839069e26c9ec2417eadcc745e..ac44b4d75d3cbed039247947ca790f5c007ff04c 100644 (file)
@@ -262,9 +262,8 @@ static NTSTATUS wreplsrv_in_send_request(struct wreplsrv_in_call *call)
                                 (long long)owner_in->min_version, 
                                 (long long)owner_in->max_version);
        NT_STATUS_HAVE_NO_MEMORY(filter);
-       ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+       ret = ldb_search(service->wins_db->ldb, call, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "%s", filter);
        if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
-       talloc_steal(call, res);
        DEBUG(10,("WINSREPL: filter '%s' count %d\n", filter, res->count));
 
        if (res->count == 0) {
index a5cd36797d5193cf8a08a3ea69075b0ce2eed278..a239403e3b0799dae1cda2186bbbf0e58058e7fd 100644 (file)
@@ -74,9 +74,8 @@ static NTSTATUS wreplsrv_scavenging_owned_records(struct wreplsrv_service *servi
                                 "(expireTime<=%s))",
                                 owner_filter, now_timestr);
        NT_STATUS_HAVE_NO_MEMORY(filter);
-       ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+       ret = ldb_search(service->wins_db->ldb, tmp_mem, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "%s", filter);
        if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
-       talloc_steal(tmp_mem, res);
        DEBUG(10,("WINS scavenging: filter '%s' count %d\n", filter, res->count));
 
        tombstone_extra_time = timeval_add(&service->startup_time,
@@ -188,9 +187,8 @@ static NTSTATUS wreplsrv_scavenging_replica_non_active_records(struct wreplsrv_s
                                 "(!(recordState=%u))(expireTime<=%s))",
                                 owner_filter, WREPL_STATE_ACTIVE, now_timestr);
        NT_STATUS_HAVE_NO_MEMORY(filter);
-       ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+       ret = ldb_search(service->wins_db->ldb, tmp_mem, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "%s", filter);
        if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
-       talloc_steal(tmp_mem, res);
        DEBUG(10,("WINS scavenging: filter '%s' count %d\n", filter, res->count));
 
        tombstone_extra_time = timeval_add(&service->startup_time,
@@ -404,9 +402,8 @@ static NTSTATUS wreplsrv_scavenging_replica_active_records(struct wreplsrv_servi
                                 "(recordState=%u)(expireTime<=%s))",
                                 owner_filter, WREPL_STATE_ACTIVE, now_timestr);
        NT_STATUS_HAVE_NO_MEMORY(filter);
-       ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+       ret = ldb_search(service->wins_db->ldb, tmp_mem, &res, NULL, LDB_SCOPE_SUBTREE, NULL, "%s", filter);
        if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
-       talloc_steal(tmp_mem, res);
        DEBUG(10,("WINS scavenging: filter '%s' count %d\n", filter, res->count));
 
        for (i=0; i < res->count; i++) {
index b7030669869af7561d64bed1db8e6b73601b3b8d..48a68e44329872648aaf1834b4daff57b08ed6a7 100644 (file)
@@ -55,10 +55,8 @@ static uint64_t wins_config_db_get_seqnumber(struct ldb_context *ldb)
        if (!dn) goto failed;
 
        /* find the record in the WINS database */
-       ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, 
-                        NULL, NULL, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, NULL, NULL);
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
        if (res->count > 1) goto failed;
 
        if (res->count == 1) {
@@ -157,10 +155,10 @@ NTSTATUS wreplsrv_load_partners(struct wreplsrv_service *service)
        service->config.seqnumber = new_seqnumber;
 
        /* find the record in the WINS database */
-       ret = ldb_search(service->config.ldb, ldb_dn_new(tmp_ctx, service->config.ldb, "CN=PARTNERS"), LDB_SCOPE_SUBTREE,
-                        "(objectClass=wreplPartner)", NULL, &res);
+       ret = ldb_search(service->config.ldb, tmp_ctx, &res,
+                        ldb_dn_new(tmp_ctx, service->config.ldb, "CN=PARTNERS"),
+                        LDB_SCOPE_SUBTREE, NULL, "(objectClass=wreplPartner)");
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
 
        /* first disable all existing partners */
        for (partner=service->partners; partner; partner = partner->next) {
@@ -391,11 +389,10 @@ static NTSTATUS wreplsrv_load_table(struct wreplsrv_service *service)
        }
 
        /* find the record in the WINS database */
-       ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE,
-                        "(objectClass=winsRecord)", attrs, &res);
+       ret = ldb_search(ldb, tmp_ctx, &res, NULL, LDB_SCOPE_SUBTREE,
+                        attrs, "(objectClass=winsRecord)");
        status = NT_STATUS_INTERNAL_DB_CORRUPTION;
        if (ret != LDB_SUCCESS) goto failed;
-       talloc_steal(tmp_ctx, res);
 
        for (i=0; i < res->count; i++) {
                wins_owner     = ldb_msg_find_attr_as_string(res->msgs[i], "winsOwner", NULL);