From 98c0767677156ff31791bd93f473ac11f856c75a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 22 Feb 2006 09:28:58 +0000 Subject: r13616: Add new ldb functions: ldb_msg_add_steal_string() and ldb_msg_add_steal_value(). These try to maintain the talloc heirachy, which must be correct otherwise talloc_steal operations of entire attribute lists fails. This fixes the currentTime value, found by using Microsoft's dcdiag tool (before this commit, it pointed to invalid memory, due to the changes in -r 13606) Andrew Bartlett (This used to be commit 424df1bb369fddcfd358cf26dd0da9d3851d181e) --- source4/lib/ldb/common/ldb_msg.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'source4/lib/ldb/common') diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c index 497d2cb0d5..8c59518296 100644 --- a/source4/lib/ldb/common/ldb_msg.c +++ b/source4/lib/ldb/common/ldb_msg.c @@ -198,6 +198,24 @@ int ldb_msg_add_value(struct ldb_message *msg, } +/* + add a value to a message, stealing it into the 'right' place +*/ +int ldb_msg_add_steal_value(struct ldb_message *msg, + const char *attr_name, + struct ldb_val *val) +{ + int ret; + ret = ldb_msg_add_value(msg, attr_name, val); + if (ret == LDB_SUCCESS) { + struct ldb_message_element *el; + el = ldb_msg_find_element(msg, attr_name); + talloc_steal(el->values, val->data); + } + return ret; +} + + /* add a string element to a message */ @@ -212,6 +230,20 @@ int ldb_msg_add_string(struct ldb_message *msg, return ldb_msg_add_value(msg, attr_name, &val); } +/* + add a string element to a message, stealing it into the 'right' place +*/ +int ldb_msg_add_steal_string(struct ldb_message *msg, + const char *attr_name, char *str) +{ + struct ldb_val val; + + val.data = (uint8_t *)str; + val.length = strlen(str); + + return ldb_msg_add_steal_value(msg, attr_name, &val); +} + /* add a printf formatted element to a message */ -- cgit