summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/dsdb/samdb/ldb_modules/rootdse.c14
-rw-r--r--source4/lib/ldb/common/ldb_msg.c32
-rw-r--r--source4/lib/ldb/include/ldb.h5
-rw-r--r--source4/lib/ldb/modules/operational.c2
4 files changed, 45 insertions, 8 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/rootdse.c b/source4/dsdb/samdb/ldb_modules/rootdse.c
index 96236301b0..07e34f1841 100644
--- a/source4/dsdb/samdb/ldb_modules/rootdse.c
+++ b/source4/dsdb/samdb/ldb_modules/rootdse.c
@@ -64,8 +64,8 @@ static int rootdse_add_dynamic(struct ldb_module *module, struct ldb_request *re
msg->dn = ldb_dn_explode(msg, "");
if (do_attribute(s->attrs, "currentTime")) {
- if (ldb_msg_add_string(msg, "currentTime",
- ldb_timestring(msg, time(NULL))) != 0) {
+ if (ldb_msg_add_steal_string(msg, "currentTime",
+ ldb_timestring(msg, time(NULL))) != 0) {
goto failed;
}
}
@@ -77,8 +77,8 @@ static int rootdse_add_dynamic(struct ldb_module *module, struct ldb_request *re
if (!control) {
goto failed;
}
- if (ldb_msg_add_string(msg, "supportedControl",
- control) != 0) {
+ if (ldb_msg_add_steal_string(msg, "supportedControl",
+ control) != 0) {
goto failed;
}
}
@@ -95,12 +95,12 @@ static int rootdse_add_dynamic(struct ldb_module *module, struct ldb_request *re
int i;
for (i = 0; ops && ops[i]; i++) {
if (ops[i]->sasl_name) {
- const char *sasl_name = talloc_strdup(msg, ops[i]->sasl_name);
+ char *sasl_name = talloc_strdup(msg, ops[i]->sasl_name);
if (!sasl_name) {
goto failed;
}
- if (ldb_msg_add_string(msg, "supportedSASLMechanisms",
- sasl_name) != 0) {
+ if (ldb_msg_add_steal_string(msg, "supportedSASLMechanisms",
+ sasl_name) != 0) {
goto failed;
}
}
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
@@ -199,6 +199,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
*/
int ldb_msg_add_string(struct ldb_message *msg,
@@ -213,6 +231,20 @@ int ldb_msg_add_string(struct ldb_message *msg,
}
/*
+ 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
*/
int ldb_msg_add_fmt(struct ldb_message *msg,
diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h
index 8a9e8bea76..488f782c9b 100644
--- a/source4/lib/ldb/include/ldb.h
+++ b/source4/lib/ldb/include/ldb.h
@@ -1098,6 +1098,11 @@ int ldb_msg_add(struct ldb_message *msg,
int ldb_msg_add_value(struct ldb_message *msg,
const char *attr_name,
const struct ldb_val *val);
+int ldb_msg_add_steal_value(struct ldb_message *msg,
+ const char *attr_name,
+ struct ldb_val *val);
+int ldb_msg_add_steal_string(struct ldb_message *msg,
+ const char *attr_name, char *str);
int ldb_msg_add_string(struct ldb_message *msg,
const char *attr_name, const char *str);
int ldb_msg_add_fmt(struct ldb_message *msg,
diff --git a/source4/lib/ldb/modules/operational.c b/source4/lib/ldb/modules/operational.c
index 3deb9422f3..8b7d6b3518 100644
--- a/source4/lib/ldb/modules/operational.c
+++ b/source4/lib/ldb/modules/operational.c
@@ -86,7 +86,7 @@ static int construct_canonical_name(struct ldb_module *module, struct ldb_messag
if (canonicalName == NULL) {
return -1;
}
- return ldb_msg_add_string(msg, "canonicalName", canonicalName);
+ return ldb_msg_add_steal_string(msg, "canonicalName", canonicalName);
}
/*