summaryrefslogtreecommitdiff
path: root/source4/lib/ldb
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/ldb')
-rw-r--r--source4/lib/ldb/tools/ldbedit.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/source4/lib/ldb/tools/ldbedit.c b/source4/lib/ldb/tools/ldbedit.c
index 1866cc373e..66354666a6 100644
--- a/source4/lib/ldb/tools/ldbedit.c
+++ b/source4/lib/ldb/tools/ldbedit.c
@@ -33,6 +33,7 @@
#include "ldb_includes.h"
#include "ldb.h"
#include "tools/cmdline.h"
+#include "tools/ldbutil.h"
static struct ldb_cmdline *options;
@@ -56,7 +57,8 @@ static void ldif_write_msg(struct ldb_context *ldb,
*/
static int modify_record(struct ldb_context *ldb,
struct ldb_message *msg1,
- struct ldb_message *msg2)
+ struct ldb_message *msg2,
+ struct ldb_control **req_ctrls)
{
struct ldb_message *mod;
@@ -74,7 +76,7 @@ static int modify_record(struct ldb_context *ldb,
ldif_write_msg(ldb, stdout, LDB_CHANGETYPE_MODIFY, mod);
}
- if (ldb_modify(ldb, mod) != 0) {
+ if (ldb_modify_ctrl(ldb, mod, req_ctrls) != 0) {
fprintf(stderr, "failed to modify %s - %s\n",
ldb_dn_get_linearized(msg1->dn), ldb_errstring(ldb));
return -1;
@@ -111,6 +113,11 @@ static int merge_edits(struct ldb_context *ldb,
struct ldb_message *msg;
int ret = 0;
int adds=0, modifies=0, deletes=0;
+ struct ldb_control **req_ctrls = ldb_parse_control_strings(ldb, ldb, (const char **)options->controls);
+ if (options->controls != NULL && req_ctrls == NULL) {
+ fprintf(stderr, "parsing controls failed: %s\n", ldb_errstring(ldb));
+ return -1;
+ }
if (ldb_transaction_start(ldb) != 0) {
fprintf(stderr, "Failed to start transaction: %s\n", ldb_errstring(ldb));
@@ -124,7 +131,7 @@ static int merge_edits(struct ldb_context *ldb,
if (options->verbose > 0) {
ldif_write_msg(ldb, stdout, LDB_CHANGETYPE_ADD, msgs2[i]);
}
- if (ldb_add(ldb, msgs2[i]) != 0) {
+ if (ldb_add_ctrl(ldb, msgs2[i], req_ctrls) != 0) {
fprintf(stderr, "failed to add %s - %s\n",
ldb_dn_get_linearized(msgs2[i]->dn),
ldb_errstring(ldb));
@@ -133,7 +140,7 @@ static int merge_edits(struct ldb_context *ldb,
}
adds++;
} else {
- if (modify_record(ldb, msg, msgs2[i]) > 0) {
+ if (modify_record(ldb, msg, msgs2[i], req_ctrls) > 0) {
modifies++;
}
}
@@ -146,7 +153,7 @@ static int merge_edits(struct ldb_context *ldb,
if (options->verbose > 0) {
ldif_write_msg(ldb, stdout, LDB_CHANGETYPE_DELETE, msgs1[i]);
}
- if (ldb_delete(ldb, msgs1[i]->dn) != 0) {
+ if (ldb_delete_ctrl(ldb, msgs1[i]->dn, req_ctrls) != 0) {
fprintf(stderr, "failed to delete %s - %s\n",
ldb_dn_get_linearized(msgs1[i]->dn),
ldb_errstring(ldb));