idmap_autorid: improve idmap_autorid_saveconfig() by adding a talloc stackframe
authorMichael Adam <obnox@samba.org>
Tue, 10 Sep 2013 16:27:46 +0000 (18:27 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 1 Oct 2013 08:49:12 +0000 (10:49 +0200)
Pair-Programmed-With: Atul Kulkarni <atul.kulkarni@in.ibm.com>

Signed-off-by: Michael Adam <obnox@samba.org>
Signed-off-by: Atul Kulkarni <atul.kulkarni@in.ibm.com>
source3/winbindd/idmap_autorid_tdb.c

index 4e50ee6526d68be8ce0153f1eca03ad797fbdf3e..bb4417d5082920e3ddf9eaf2d73f24364264f1f4 100644 (file)
@@ -419,6 +419,7 @@ NTSTATUS idmap_autorid_saveconfig(struct db_context *db,
        TDB_DATA data;
        char *cfgstr;
        uint32_t hwm;
+       TALLOC_CTX *frame = talloc_stackframe();
 
        if (db == NULL || cfg == NULL) {
                goto done;
@@ -439,7 +440,7 @@ NTSTATUS idmap_autorid_saveconfig(struct db_context *db,
                goto done;
        }
 
-       status = idmap_autorid_loadconfig(db, talloc_tos(), &storedconfig);
+       status = idmap_autorid_loadconfig(db, frame, &storedconfig);
        if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
                DEBUG(5, ("No configuration found. Storing initial "
                          "configuration.\n"));
@@ -455,13 +456,10 @@ NTSTATUS idmap_autorid_saveconfig(struct db_context *db,
                DEBUG(1, ("New configuration values for rangesize or "
                          "minimum uid value conflict with previously "
                          "used values! Not storing new config.\n"));
-               talloc_free(storedconfig);
                status = NT_STATUS_INVALID_PARAMETER;
                goto done;
        }
 
-       talloc_free(storedconfig);
-
        status = dbwrap_fetch_uint32_bystring(db, HWM, &hwm);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(1, ("Fatal error while fetching current "
@@ -482,20 +480,20 @@ NTSTATUS idmap_autorid_saveconfig(struct db_context *db,
        }
 
        cfgstr =
-           talloc_asprintf(talloc_tos(),
+           talloc_asprintf(frame,
                            "minvalue:%u rangesize:%u maxranges:%u",
                            cfg->minvalue, cfg->rangesize, cfg->maxranges);
 
-       if (!cfgstr) {
-               return NT_STATUS_NO_MEMORY;
+       if (cfgstr == NULL) {
+               status = NT_STATUS_NO_MEMORY;
+               goto done;
        }
 
        data = string_tdb_data(cfgstr);
 
        status = dbwrap_trans_store_bystring(db, CONFIGKEY, data, TDB_REPLACE);
 
-       talloc_free(cfgstr);
-
 done:
+       talloc_free(frame);
        return status;
 }