r25755: Fix a couple of memory leaks, in particular a new leak onto the NULL
authorAndrew Bartlett <abartlet@samba.org>
Tue, 30 Oct 2007 22:35:04 +0000 (23:35 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:43:46 +0000 (05:43 +0100)
context caused by my objectclass module work.

Andrew Bartlett

source/dsdb/samdb/ldb_modules/objectclass.c
source/lib/ldb/common/ldb_modules.c

index 6d40759e7b3c17ed5cebb62bb65f04261ef85fdd..12a63590376d6f0e834b55b51b0550bdd632af85 100644 (file)
@@ -389,7 +389,7 @@ static int objectclass_add(struct ldb_module *module, struct ldb_request *req)
        /* return or own handle to deal with this call */
        req->handle = h;
 
-       parent_dn = ldb_dn_get_parent(ac->search_req, ac->orig_req->op.mod.message->dn);
+       parent_dn = ldb_dn_get_parent(ac, ac->orig_req->op.mod.message->dn);
        if (parent_dn == NULL) {
                ldb_oom(module->ldb);
                return LDB_ERR_OPERATIONS_ERROR;
@@ -403,6 +403,8 @@ static int objectclass_add(struct ldb_module *module, struct ldb_request *req)
                return ret;
        }
 
+       talloc_steal(ac->search_req, parent_dn);
+
        ldb_set_timeout_from_prev_req(ac->module->ldb, ac->orig_req, ac->search_req);
 
        ac->step = OC_SEARCH_ADD_PARENT;
@@ -873,7 +875,7 @@ static int objectclass_rename(struct ldb_module *module, struct ldb_request *req
        /* return or own handle to deal with this call */
        req->handle = h;
 
-       parent_dn = ldb_dn_get_parent(ac->search_req, ac->orig_req->op.rename.newdn);
+       parent_dn = ldb_dn_get_parent(ac, ac->orig_req->op.rename.newdn);
        if (parent_dn == NULL) {
                ldb_oom(module->ldb);
                return LDB_ERR_OPERATIONS_ERROR;
@@ -886,7 +888,7 @@ static int objectclass_rename(struct ldb_module *module, struct ldb_request *req
        if (ret != LDB_SUCCESS) {
                return ret;
        }
-
+       talloc_steal(ac->search_req, parent_dn);
        ldb_set_timeout_from_prev_req(ac->module->ldb, ac->orig_req, ac->search_req);
 
        ac->step = OC_SEARCH_RENAME_PARENT;
index 9f94c90c92065408f7ff5eec27ab772a10440533..87e5b2eeb35b1201f7cd22ec2d72d659a8275496 100644 (file)
@@ -347,15 +347,17 @@ int ldb_load_modules(struct ldb_context *ldb, const char *options[])
 
        if (modules != NULL) {
                ret = ldb_load_modules_list(ldb, modules, ldb->modules, &ldb->modules);
-               talloc_free(modules);
                if (ret != LDB_SUCCESS) {
+                       talloc_free(mem_ctx);
                        return ret;
                }
        } else {
                ldb_debug(ldb, LDB_DEBUG_TRACE, "No modules specified for this database");
        }
 
-       return ldb_init_module_chain(ldb, ldb->modules);
+       ret = ldb_init_module_chain(ldb, ldb->modules);
+       talloc_free(mem_ctx);
+       return ret;
 }
 
 /*