summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>2010-03-13 19:37:13 +0100
committerMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>2010-03-14 18:46:21 +0100
commit33eb1c95e55bb26aee7ee3876e38136eb56ef36e (patch)
tree7c3f3964bad2557ec17916a7660a71a020a3c625
parent9b3c45754e9f610a095e6e1b191bb33235e8c314 (diff)
downloadsamba-33eb1c95e55bb26aee7ee3876e38136eb56ef36e.tar.gz
samba-33eb1c95e55bb26aee7ee3876e38136eb56ef36e.tar.bz2
samba-33eb1c95e55bb26aee7ee3876e38136eb56ef36e.zip
s4:registry - ldb.c - check more for possible "Out of memory" circumstances
-rw-r--r--source4/lib/registry/ldb.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c
index 9a26887b4b..e168d8fd02 100644
--- a/source4/lib/registry/ldb.c
+++ b/source4/lib/registry/ldb.c
@@ -452,6 +452,7 @@ static WERROR ldb_open_key(TALLOC_CTX *mem_ctx, const struct hive_key *h,
struct ldb_context *c = kd->ldb;
ldap_path = reg_path_to_ldb(mem_ctx, h, name, NULL);
+ W_ERROR_HAVE_NO_MEMORY(ldap_path);
ret = ldb_search(c, mem_ctx, &res, ldap_path, LDB_SCOPE_BASE, NULL, "(key=*)");
@@ -531,8 +532,10 @@ static WERROR ldb_add_key(TALLOC_CTX *mem_ctx, const struct hive_key *parent,
int ret;
msg = ldb_msg_new(mem_ctx);
+ W_ERROR_HAVE_NO_MEMORY(msg);
msg->dn = reg_path_to_ldb(msg, parent, name, NULL);
+ W_ERROR_HAVE_NO_MEMORY(msg->dn);
ldb_msg_add_string(msg, "key", talloc_strdup(mem_ctx, name));
if (classname != NULL)
@@ -552,6 +555,7 @@ static WERROR ldb_add_key(TALLOC_CTX *mem_ctx, const struct hive_key *parent,
DEBUG(2, ("key added: %s\n", ldb_dn_get_linearized(msg->dn)));
newkd = talloc_zero(mem_ctx, struct ldb_key_data);
+ W_ERROR_HAVE_NO_MEMORY(newkd);
newkd->ldb = talloc_reference(newkd, parentkd->ldb);
newkd->key.ops = &reg_backend_ldb;
newkd->dn = talloc_steal(newkd, msg->dn);
@@ -578,7 +582,9 @@ static WERROR ldb_del_value (struct hive_key *key, const char *child)
mem_ctx = talloc_init("ldb_del_value");
msg = talloc_zero(mem_ctx, struct ldb_message);
+ W_ERROR_HAVE_NO_MEMORY(msg);
msg->dn = ldb_dn_copy(msg, kd->dn);
+ W_ERROR_HAVE_NO_MEMORY(msg->dn);
ldb_msg_add_empty(msg, "data", LDB_FLAG_MOD_DELETE, NULL);
ldb_msg_add_empty(msg, "type", LDB_FLAG_MOD_DELETE, NULL);
@@ -640,10 +646,7 @@ static WERROR ldb_del_key(const struct hive_key *key, const char *name)
}
ldap_path = reg_path_to_ldb(mem_ctx, key, name, NULL);
- if (!ldap_path) {
- talloc_free(mem_ctx);
- return WERR_FOOBAR;
- }
+ W_ERROR_HAVE_NO_MEMORY(ldap_path);
/* Search for subkeys */
ret = ldb_search(c, mem_ctx, &res_keys, ldap_path, LDB_SCOPE_ONELEVEL,
@@ -747,7 +750,10 @@ static WERROR ldb_set_value(struct hive_key *parent,
TALLOC_CTX *mem_ctx = talloc_init("ldb_set_value");
msg = reg_ldb_pack_value(kd->ldb, mem_ctx, name, type, data);
+ W_ERROR_HAVE_NO_MEMORY(msg);
+
msg->dn = ldb_dn_copy(msg, kd->dn);
+ W_ERROR_HAVE_NO_MEMORY(msg->dn);
if ((name != NULL) && (name[0] != '\0')) {
/* For a default value, we add/overwrite the attributes to/of the hive.