summaryrefslogtreecommitdiff
path: root/source4/dsdb
diff options
context:
space:
mode:
Diffstat (limited to 'source4/dsdb')
-rw-r--r--source4/dsdb/samdb/ldb_modules/repl_meta_data.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
index 725ba2a47c..51611aca1d 100644
--- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
+++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
@@ -92,7 +92,7 @@ struct replmd_replicated_request {
enum urgent_situation {
REPL_URGENT_ON_CREATE = 1,
- REPL_URGENT_ON_UPDATE = 3, /* activated on creating as well*/
+ REPL_URGENT_ON_UPDATE = 2,
REPL_URGENT_ON_DELETE = 4
};
@@ -103,10 +103,10 @@ static const struct {
} urgent_objects[] = {
{"nTDSDSA", (REPL_URGENT_ON_CREATE | REPL_URGENT_ON_DELETE)},
{"crossRef", (REPL_URGENT_ON_CREATE | REPL_URGENT_ON_DELETE)},
- {"attributeSchema", REPL_URGENT_ON_UPDATE},
- {"classSchema", REPL_URGENT_ON_UPDATE},
- {"secret", REPL_URGENT_ON_UPDATE},
- {"rIDManager", REPL_URGENT_ON_UPDATE},
+ {"attributeSchema", (REPL_URGENT_ON_CREATE | REPL_URGENT_ON_UPDATE)},
+ {"classSchema", (REPL_URGENT_ON_CREATE | REPL_URGENT_ON_UPDATE)},
+ {"secret", (REPL_URGENT_ON_CREATE | REPL_URGENT_ON_UPDATE)},
+ {"rIDManager", (REPL_URGENT_ON_CREATE | REPL_URGENT_ON_UPDATE)},
{NULL, 0}
};
@@ -1077,6 +1077,7 @@ static int replmd_update_rpmd(struct ldb_module *module,
struct ldb_result *res;
struct ldb_context *ldb;
struct ldb_message_element *objectclass_el;
+ enum urgent_situation situation;
ldb = ldb_module_get_ctx(module);
@@ -1098,9 +1099,17 @@ static int replmd_update_rpmd(struct ldb_module *module,
return LDB_ERR_OPERATIONS_ERROR;
}
+ /* if isDeleted is present and is TRUE, then we consider we are deleting,
+ * otherwise we consider we are updating */
+ if (ldb_msg_check_string_attribute(msg, "isDeleted", "TRUE")) {
+ situation = REPL_URGENT_ON_DELETE;
+ } else {
+ situation = REPL_URGENT_ON_UPDATE;
+ }
+
objectclass_el = ldb_msg_find_element(res->msgs[0], "objectClass");
if (is_urgent && replmd_check_urgent_objectclass(objectclass_el,
- REPL_URGENT_ON_UPDATE)) {
+ situation)) {
*is_urgent = true;
}
@@ -1133,7 +1142,7 @@ static int replmd_update_rpmd(struct ldb_module *module,
return ret;
}
- if (is_urgent && !*is_urgent) {
+ if (is_urgent && !*is_urgent && (situation == REPL_URGENT_ON_UPDATE)) {
*is_urgent = replmd_check_urgent_attribute(&msg->elements[i]);
}