summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/ldap_server/ldap_backend.c44
-rw-r--r--source4/lib/ldb/common/ldb.c17
-rw-r--r--source4/lib/ldb/include/ldb.h18
3 files changed, 47 insertions, 32 deletions
diff --git a/source4/ldap_server/ldap_backend.c b/source4/ldap_server/ldap_backend.c
index 5eabda972e..d983a54261 100644
--- a/source4/ldap_server/ldap_backend.c
+++ b/source4/ldap_server/ldap_backend.c
@@ -171,6 +171,48 @@ static int map_ldb_error(TALLOC_CTX *mem_ctx, int ldb_err,
/* result is 1:1 for now */
return ldb_err;
}
+/* create and execute a modify request */
+static int ldb_mod_req_with_controls(struct ldb_context *ldb,
+ const struct ldb_message *message,
+ struct ldb_control **controls)
+{
+ struct ldb_request *req;
+ int ret;
+
+ ret = ldb_msg_sanity_check(ldb, message);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+
+ ret = ldb_build_mod_req(&req, ldb, ldb,
+ message,
+ controls,
+ NULL,
+ ldb_op_default_callback,
+ NULL);
+
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+
+ ret = ldb_transaction_start(ldb);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+
+ ret = ldb_request(ldb, req);
+ if (ret == LDB_SUCCESS) {
+ ret = ldb_wait(req->handle, LDB_WAIT_ALL);
+ }
+
+ if (ret == LDB_SUCCESS) {
+ return ldb_transaction_commit(ldb);
+ }
+ ldb_transaction_cancel(ldb);
+
+ talloc_free(req);
+ return ret;
+}
/*
connect to the sam database
@@ -546,7 +588,7 @@ reply:
NT_STATUS_HAVE_NO_MEMORY(modify_reply);
if (result == LDAP_SUCCESS) {
- ldb_ret = ldb_modify_ctrl(samdb, msg, call->request->controls);
+ ldb_ret = ldb_mod_req_with_controls(samdb, msg, call->request->controls);
result = map_ldb_error(local_ctx, ldb_ret, &errstr);
}
diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c
index 94a5fb2153..a3472a60e5 100644
--- a/source4/lib/ldb/common/ldb.c
+++ b/source4/lib/ldb/common/ldb.c
@@ -1388,11 +1388,10 @@ int ldb_add(struct ldb_context *ldb,
}
/*
- same as ldb_modify, but accepts controls
+ modify the specified attributes of a record
*/
-int ldb_modify_ctrl(struct ldb_context *ldb,
- const struct ldb_message *message,
- struct ldb_control **controls)
+int ldb_modify(struct ldb_context *ldb,
+ const struct ldb_message *message)
{
struct ldb_request *req;
int ret;
@@ -1404,7 +1403,7 @@ int ldb_modify_ctrl(struct ldb_context *ldb,
ret = ldb_build_mod_req(&req, ldb, ldb,
message,
- controls,
+ NULL,
NULL,
ldb_op_default_callback,
NULL);
@@ -1417,14 +1416,6 @@ int ldb_modify_ctrl(struct ldb_context *ldb,
talloc_free(req);
return ret;
}
-/*
- modify the specified attributes of a record
-*/
-int ldb_modify(struct ldb_context *ldb,
- const struct ldb_message *message)
-{
- return ldb_modify_ctrl(ldb, message, NULL);
-}
/*
diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h
index 2b80e42cb3..cf55f0ac6f 100644
--- a/source4/lib/ldb/include/ldb.h
+++ b/source4/lib/ldb/include/ldb.h
@@ -1231,24 +1231,6 @@ int ldb_add(struct ldb_context *ldb,
ldb_init())
\param message the message containing the changes required.
- \param controls ldap controls for the request
-
- \return result code (LDB_SUCCESS if the record was modified as
- requested, otherwise a failure code)
-*/
-int ldb_modify_ctrl(struct ldb_context *ldb,
- const struct ldb_message *message,
- struct ldb_control **controls);
-
-/**
- Modify the specified attributes of a record
-
- This function modifies a record that is in the database.
-
- \param ldb the context associated with the database (from
- ldb_init())
- \param message the message containing the changes required.
-
\return result code (LDB_SUCCESS if the record was modified as
requested, otherwise a failure code)
*/