mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
s4:lib/registry/ldb.c - "ldb_add_key" - fix talloc handling
- free "msg" when possible - prevent "talloc_strdup"s where not necessary
This commit is contained in:
parent
e4ba8fb3b9
commit
d0e877e785
@ -586,6 +586,7 @@ static WERROR ldb_add_key(TALLOC_CTX *mem_ctx, const struct hive_key *parent,
|
|||||||
struct hive_key **newkey)
|
struct hive_key **newkey)
|
||||||
{
|
{
|
||||||
struct ldb_key_data *parentkd = discard_const_p(struct ldb_key_data, parent);
|
struct ldb_key_data *parentkd = discard_const_p(struct ldb_key_data, parent);
|
||||||
|
struct ldb_dn *ldb_path;
|
||||||
struct ldb_message *msg;
|
struct ldb_message *msg;
|
||||||
struct ldb_key_data *newkd;
|
struct ldb_key_data *newkd;
|
||||||
int ret;
|
int ret;
|
||||||
@ -594,18 +595,23 @@ static WERROR ldb_add_key(TALLOC_CTX *mem_ctx, const struct hive_key *parent,
|
|||||||
return WERR_INVALID_PARAM;
|
return WERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ldb_path = reg_path_to_ldb(mem_ctx, parent, name, NULL);
|
||||||
|
W_ERROR_HAVE_NO_MEMORY(ldb_path);
|
||||||
|
|
||||||
msg = ldb_msg_new(mem_ctx);
|
msg = ldb_msg_new(mem_ctx);
|
||||||
W_ERROR_HAVE_NO_MEMORY(msg);
|
W_ERROR_HAVE_NO_MEMORY(msg);
|
||||||
|
|
||||||
msg->dn = reg_path_to_ldb(msg, parent, name, NULL);
|
msg->dn = ldb_path;
|
||||||
W_ERROR_HAVE_NO_MEMORY(msg->dn);
|
|
||||||
|
|
||||||
ldb_msg_add_string(msg, "key", talloc_strdup(mem_ctx, name));
|
ldb_msg_add_string(msg, "key", name);
|
||||||
if (classname != NULL)
|
if (classname != NULL) {
|
||||||
ldb_msg_add_string(msg, "classname",
|
ldb_msg_add_string(msg, "classname", classname);
|
||||||
talloc_strdup(mem_ctx, classname));
|
}
|
||||||
|
|
||||||
ret = ldb_add(parentkd->ldb, msg);
|
ret = ldb_add(parentkd->ldb, msg);
|
||||||
|
|
||||||
|
talloc_free(msg);
|
||||||
|
|
||||||
if (ret == LDB_ERR_ENTRY_ALREADY_EXISTS) {
|
if (ret == LDB_ERR_ENTRY_ALREADY_EXISTS) {
|
||||||
return WERR_ALREADY_EXISTS;
|
return WERR_ALREADY_EXISTS;
|
||||||
}
|
}
|
||||||
@ -615,13 +621,13 @@ static WERROR ldb_add_key(TALLOC_CTX *mem_ctx, const struct hive_key *parent,
|
|||||||
return WERR_FOOBAR;
|
return WERR_FOOBAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG(2, ("key added: %s\n", ldb_dn_get_linearized(msg->dn)));
|
DEBUG(2, ("key added: %s\n", ldb_dn_get_linearized(ldb_path)));
|
||||||
|
|
||||||
newkd = talloc_zero(mem_ctx, struct ldb_key_data);
|
newkd = talloc_zero(mem_ctx, struct ldb_key_data);
|
||||||
W_ERROR_HAVE_NO_MEMORY(newkd);
|
W_ERROR_HAVE_NO_MEMORY(newkd);
|
||||||
newkd->ldb = talloc_reference(newkd, parentkd->ldb);
|
newkd->ldb = talloc_reference(newkd, parentkd->ldb);
|
||||||
newkd->key.ops = ®_backend_ldb;
|
newkd->key.ops = ®_backend_ldb;
|
||||||
newkd->dn = talloc_steal(newkd, msg->dn);
|
newkd->dn = talloc_steal(newkd, ldb_path);
|
||||||
newkd->classname = talloc_steal(newkd, classname);
|
newkd->classname = talloc_steal(newkd, classname);
|
||||||
|
|
||||||
*newkey = (struct hive_key *)newkd;
|
*newkey = (struct hive_key *)newkd;
|
||||||
|
Loading…
Reference in New Issue
Block a user