struct ldb_message_element *tombstone_el = NULL;
struct ldb_message_element *old_el = NULL;
struct ldb_message *new_msg = NULL;
- struct ldb_message *old_msg = NULL;
enum ndr_err_code ndr_err;
int ret;
struct GUID guid;
* change. This prevents race conditions.
*/
for (i = 0; i < res->count; i++) {
- old_msg = ldb_msg_copy(mem_ctx, res->msgs[i]);
- if (old_msg == NULL) {
+ new_msg = ldb_msg_copy(mem_ctx, res->msgs[i]);
+ if (new_msg == NULL) {
return NT_STATUS_INTERNAL_ERROR;
}
- old_el = ldb_msg_find_element(old_msg, "dnsRecord");
+ old_el = ldb_msg_find_element(new_msg, "dnsRecord");
if (old_el == NULL) {
- TALLOC_FREE(old_msg);
+ TALLOC_FREE(new_msg);
return NT_STATUS_INTERNAL_ERROR;
}
-
old_el->flags = LDB_FLAG_MOD_DELETE;
- new_msg = ldb_msg_copy(mem_ctx, old_msg);
- if (new_msg == NULL) {
- TALLOC_FREE(old_msg);
- return NT_STATUS_INTERNAL_ERROR;
- }
ret = ldb_msg_add_empty(
new_msg, "dnsRecord", LDB_FLAG_MOD_ADD, &el);
if (ret != LDB_SUCCESS) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
return NT_STATUS_INTERNAL_ERROR;
}
status = copy_current_records(mem_ctx, old_el, el, dns_timestamp);
if (!NT_STATUS_IS_OK(status)) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
return NT_STATUS_INTERNAL_ERROR;
}
/* If nothing was expired, do nothing. */
if (el->num_values == old_el->num_values &&
el->num_values != 0) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
continue;
}
struct ldb_val,
1);
if (!vals) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
return NT_STATUS_INTERNAL_ERROR;
}
&true_val,
&tombstone_el);
if (ret != LDB_SUCCESS) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
return NT_STATUS_INTERNAL_ERROR;
}
struct ldb_val,
1);
if (!vals) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
return NT_STATUS_INTERNAL_ERROR;
}
/* Set DN to the GUID in case the object was moved. */
el = ldb_msg_find_element(new_msg, "objectGUID");
if (el == NULL) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
*error_string =
talloc_asprintf(mem_ctx,
status = GUID_from_ndr_blob(el->values, &guid);
if (!NT_STATUS_IS_OK(status)) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
*error_string =
discard_const_p(char, "Error: Invalid GUID.\n");
ret = ldb_modify(samdb, new_msg);
if (ret != LDB_SUCCESS) {
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
*error_string =
talloc_asprintf(mem_ctx,
ldb_errstring(samdb));
return NT_STATUS_INTERNAL_ERROR;
}
- TALLOC_FREE(old_msg);
TALLOC_FREE(new_msg);
}