59 lines
2.3 KiB
Diff
59 lines
2.3 KiB
Diff
From b01e30c79b1364ac35c0b2db2ef4a2ff64600a7f Mon Sep 17 00:00:00 2001
|
|
From: tbordaz <tbordaz@redhat.com>
|
|
Date: Tue, 23 Feb 2021 08:58:37 +0100
|
|
Subject: [PATCH 1/2] Issue 4649 - crash in sync_repl when a MODRDN create a
|
|
cenotaph (#4652)
|
|
|
|
Bug description:
|
|
When an operation is flagged OP_FLAG_NOOP, it skips BETXN plugins but calls POST plugins.
|
|
For sync_repl, betxn (sync_update_persist_betxn_pre_op) creates an operation extension to be
|
|
consumed by the post (sync_update_persist_op). In case of OP_FLAG_NOOP, there is no
|
|
operation extension.
|
|
|
|
Fix description:
|
|
Test that the operation is OP_FLAG_NOOP if the operation extension is missing
|
|
|
|
relates: https://github.com/389ds/389-ds-base/issues/4649
|
|
|
|
Reviewed by: William Brown (thanks)
|
|
|
|
Platforms tested: F31
|
|
---
|
|
ldap/servers/plugins/sync/sync_persist.c | 14 ++++-
|
|
2 files changed, 75 insertions(+), 2 deletions(-)
|
|
diff --git a/ldap/servers/plugins/sync/sync_persist.c b/ldap/servers/plugins/sync/sync_persist.c
|
|
index e93a8fa83..12b23ebac 100644
|
|
--- a/ldap/servers/plugins/sync/sync_persist.c
|
|
+++ b/ldap/servers/plugins/sync/sync_persist.c
|
|
@@ -206,7 +206,9 @@ sync_update_persist_op(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *eprev, ber
|
|
slapi_pblock_get(pb, SLAPI_TARGET_SDN, &sdn);
|
|
|
|
if (NULL == e) {
|
|
- /* Ignore this operation (for example case of failure of the operation) */
|
|
+ /* Ignore this operation (for example case of failure of the operation
|
|
+ * or operation resulting in an empty Mods))
|
|
+ */
|
|
ignore_op_pl(pb);
|
|
return;
|
|
}
|
|
@@ -232,7 +234,15 @@ sync_update_persist_op(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *eprev, ber
|
|
prim_op = get_thread_primary_op();
|
|
ident = sync_persist_get_operation_extension(pb);
|
|
PR_ASSERT(prim_op);
|
|
- PR_ASSERT(ident);
|
|
+
|
|
+ if ((ident == NULL) && operation_is_flag_set(pb_op, OP_FLAG_NOOP)) {
|
|
+ /* This happens for URP (add cenotaph, fixup rename, tombstone resurrect)
|
|
+ * As a NOOP betxn plugins are not called and operation ext is not created
|
|
+ */
|
|
+ slapi_log_err(SLAPI_LOG_PLUGIN, SYNC_PLUGIN_SUBSYSTEM, "Skip noop operation (0x%lx)\n",
|
|
+ (ulong) pb_op);
|
|
+ return;
|
|
+ }
|
|
/* First mark the operation as completed/failed
|
|
* the param to be used once the operation will be pushed
|
|
* on the listeners queue
|
|
--
|
|
2.26.2
|
|
|