summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/ldb_tdb/ldb_search.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/ldb/ldb_tdb/ldb_search.c')
-rw-r--r--source4/lib/ldb/ldb_tdb/ldb_search.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/source4/lib/ldb/ldb_tdb/ldb_search.c b/source4/lib/ldb/ldb_tdb/ldb_search.c
index 6b38a28296..d97444a6e8 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_search.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_search.c
@@ -34,6 +34,7 @@
#include "includes.h"
#include "ldb/ldb_tdb/ldb_tdb.h"
+#include "ldb/include/ldb_parse.h"
/*
free a message that has all parts separately allocated
@@ -192,6 +193,31 @@ static struct ldb_message *ltdb_pull_attrs(struct ldb_context *ldb,
continue;
}
+ if (ldb_attr_cmp(attrs[i], "dn") == 0) {
+ struct ldb_message_element el2;
+ struct ldb_val val;
+
+ el2.flags = 0;
+ el2.name = ldb_strdup(ldb, "dn");
+ if (!el2.name) {
+ msg_free_all_parts(ldb, ret);
+ ldb_free(ldb, el2.name);
+ return NULL;
+ }
+ el2.num_values = 1;
+ el2.values = &val;
+ val.data = ret->dn;
+ val.length = strlen(ret->dn);
+
+ if (msg_add_element(ldb, ret, &el2) != 0) {
+ msg_free_all_parts(ldb, ret);
+ ldb_free(ldb, el2.name);
+ return NULL;
+ }
+ ldb_free(ldb, el2.name);
+ continue;
+ }
+
el = ldb_msg_find_element(msg, attrs[i]);
if (!el) {
continue;
@@ -290,7 +316,7 @@ int ltdb_search_dn1(struct ldb_context *ldb, const char *dn, struct ldb_message
ret = ltdb_unpack_data(ldb, &tdb_data2, msg);
if (ret == -1) {
- free(tdb_data2.dptr);
+ ldb_free(ldb, tdb_data2.dptr);
return -1;
}