Author: abartlet
Date: 2006-01-31 10:03:44 +0000 (Tue, 31 Jan 2006)
New Revision: 13256

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

Log:
Free temporary memory on error cases, and try to clean up what's left
earlier.

Move gendb_search() to use talloc_vasprintf() and steal only the parts
actually being used for the results.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c
   branches/SAMBA_4_0/source/lib/gendb.c


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c    
2006-01-31 06:09:18 UTC (rev 13255)
+++ branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c    
2006-01-31 10:03:44 UTC (rev 13256)
@@ -157,6 +157,7 @@
 
        /* look again, this time at the copied attribute */
        if (!msg2 || (attribute = ldb_msg_find_element(msg2, "sambaPassword")) 
== NULL ) {
+               talloc_free(mem_ctx);
                /* Gah?  where did it go?  Oh well... */
                return LDB_ERR_OPERATIONS_ERROR;
        }
@@ -170,6 +171,7 @@
                                          talloc_asprintf(mem_ctx, 
"sambaPassword_handle: "
                                                          "attempted set of 
multiple sambaPassword attributes on %s rejected",
                                                          
ldb_dn_linearize(mem_ctx, dn)));
+                       talloc_free(mem_ctx);
                        return LDB_ERR_CONSTRAINT_VIOLATION;
                }
 
@@ -184,6 +186,7 @@
                                          talloc_asprintf(mem_ctx, 
"sambaPassword_handle: "
                                                          "attempted set of 
multiple sambaPassword attributes on %s rejected",
                                                          
ldb_dn_linearize(mem_ctx, dn)));
+                       talloc_free(mem_ctx);
                        return LDB_ERR_CONSTRAINT_VIOLATION;
                }
                
@@ -212,6 +215,7 @@
        /* Send the (modified) request of the original caller down to the 
database */
        ret = ldb_next_request(module, modified_orig_request);
        if (ret) {
+               talloc_free(mem_ctx);
                return ret;
        }
 
@@ -226,6 +230,8 @@
 
                /* Find out the old passwords details of the user */
                old_res = search_request->op.search.res;
+               talloc_steal(mem_ctx, old_res);
+               talloc_free(search_request);
                
                if (old_res->count != 1) {
                        ldb_set_errstring(module, 
@@ -270,6 +276,9 @@
 
        /* Find out the full details of the user */
        res = search_request->op.search.res;
+       talloc_steal(mem_ctx, res);
+       talloc_free(search_request);
+
        if (res->count != 1) {
                ldb_set_errstring(module, 
                                  talloc_asprintf(mem_ctx, 
"password_hash_handle: "

Modified: branches/SAMBA_4_0/source/lib/gendb.c
===================================================================
--- branches/SAMBA_4_0/source/lib/gendb.c       2006-01-31 06:09:18 UTC (rev 
13255)
+++ branches/SAMBA_4_0/source/lib/gendb.c       2006-01-31 10:03:44 UTC (rev 
13256)
@@ -42,7 +42,7 @@
        int ret;
 
        if (format) {
-               vasprintf(&expr, format, ap);
+               expr = talloc_vasprintf(mem_ctx, format, ap);
                if (expr == NULL) {
                        return -1;
                }
@@ -55,7 +55,7 @@
        ret = ldb_search(ldb, basedn, scope, expr, attrs, &res);
 
        if (ret == LDB_SUCCESS) {
-               talloc_steal(mem_ctx, res);
+               talloc_steal(mem_ctx, res->msgs);
 
                DEBUG(4,("gendb_search_v: %s %s -> %d\n", 
                         basedn?ldb_dn_linearize(mem_ctx,basedn):"NULL",
@@ -63,13 +63,13 @@
 
                ret = res->count;
                *msgs = res->msgs;
-
+               talloc_free(res);
        } else {
                DEBUG(4,("gendb_search_v: search failed: %s", 
ldb_errstring(ldb)));
                ret = -1;
        }
 
-       free(expr);
+       talloc_free(expr);
 
        return ret;
 }

Reply via email to