]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
registry: use talloc instead of malloc and provide common exit point
authorMichael Adam <obnox@samba.org>
Mon, 17 Mar 2008 00:39:16 +0000 (01:39 +0100)
committerMichael Adam <obnox@samba.org>
Mon, 17 Mar 2008 07:22:33 +0000 (08:22 +0100)
in regdb_get_secdesc().

Michael

source/registry/reg_backend_db.c

index fb071ae27392863ab04d3dfda8560a5b418d31bd..9b388767ec95a5b3b38dd9287ad4b958fbd75a59 100644 (file)
@@ -877,35 +877,35 @@ static WERROR regdb_get_secdesc(TALLOC_CTX *mem_ctx, const char *key,
        TDB_DATA data;
        NTSTATUS status;
        TALLOC_CTX *tmp_ctx = talloc_stackframe();
+       WERROR err = WERR_OK;
 
        DEBUG(10, ("regdb_get_secdesc: Getting secdesc of key [%s]\n", key));
 
-       if (asprintf(&tdbkey, "%s/%s", REG_SECDESC_PREFIX, key) == -1) {
-               return WERR_NOMEM;
+       tdbkey = talloc_asprintf(tmp_ctx, "%s/%s", REG_SECDESC_PREFIX, key);
+       if (tdbkey == NULL) {
+               err = WERR_NOMEM;
+               goto done;
        }
        normalize_dbkey(tdbkey);
 
        data = dbwrap_fetch_bystring(regdb, tmp_ctx, tdbkey);
-       SAFE_FREE(tdbkey);
-
        if (data.dptr == NULL) {
-               return WERR_BADFILE;
+               err = WERR_BADFILE;
+               goto done;
        }
 
        status = unmarshall_sec_desc(mem_ctx, (uint8 *)data.dptr, data.dsize,
                                     psecdesc);
 
-       TALLOC_FREE(tmp_ctx);
-
        if (NT_STATUS_EQUAL(status, NT_STATUS_NO_MEMORY)) {
-               return WERR_NOMEM;
+               err = WERR_NOMEM;
+       } else if (!NT_STATUS_IS_OK(status)) {
+               err = WERR_REG_CORRUPT;
        }
 
-       if (!NT_STATUS_IS_OK(status)) {
-               return WERR_REG_CORRUPT;
-       }
-
-       return WERR_OK;
+done:
+       TALLOC_FREE(tmp_ctx);
+       return err;
 }
 
 static WERROR regdb_set_secdesc(const char *key,