diff --git a/SOURCES/slapi-nis-RHEL-5134.patch b/SOURCES/slapi-nis-RHEL-5134.patch new file mode 100644 index 0000000..3ecc30c --- /dev/null +++ b/SOURCES/slapi-nis-RHEL-5134.patch @@ -0,0 +1,102 @@ +From ee94788e63d9f35daca7c0d1e80a488f738a9c52 Mon Sep 17 00:00:00 2001 +From: Thierry Bordaz +Date: Fri, 1 Sep 2023 11:02:08 +0200 +Subject: [PATCH 1/2] BZ 2124214 - schema compat plugin deadlock on delete post + op + +Bug description: + backends locks (SC map and retroCL) are acquired in + the opposite order + (https://bugzilla.redhat.com/show_bug.cgi?id=2124214#c17) + +Fix description: + Credits of the fix are to Pierre Rogier who found + a reproducible testcase, did the fix and verified it. + + In specific condition of retroCL trimming the DEL + callback of the SC should check if the backend should + be ignored + +relates: 2124214 +--- + src/back-shr.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/src/back-shr.c b/src/back-shr.c +index ce2b1f3..1792bef 100644 +--- a/src/back-shr.c ++++ b/src/back-shr.c +@@ -2811,6 +2811,18 @@ backend_shr_delete_cb(Slapi_PBlock *pb) + if (wrap_get_call_level() > 0) { + return 0; + } ++ /* especially important to test if we want to prevent frequent ++ * deadlocks when backends are accesses in opposite order. ++ * i.e. "regular" update on domain map+retroCL and retroCL trimming ++ * retroCL+domain map ++ */ ++ if (backend_shr_write_ignore(pb)) { ++#if DEBUG_MAP_LOCK ++ slapi_log_error(SLAPI_LOG_FATAL, "schema-compat", ++ "backend_shr_delete_cb: (%p) operation is not impacting schema compat\n", PR_MyThreadId(), 1); ++#endif ++ return 0; ++ } + + /* Read parameters from the pblock. */ + slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &cbdata.state); +-- +2.41.0 + + +From 61fcf534c3da767788e27641f3ebfe4d6a6c0b25 Mon Sep 17 00:00:00 2001 +From: Alexander Bokovoy +Date: Mon, 9 Oct 2023 13:53:28 +0300 +Subject: [PATCH 2/2] Add more ignores to modrdn and modify cases + +BZ 2124214 - schema compat plugin deadlock on delete post op + +Signed-off-by: Alexander Bokovoy +--- + src/back-shr.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/src/back-shr.c b/src/back-shr.c +index 1792bef..4cbc39b 100644 +--- a/src/back-shr.c ++++ b/src/back-shr.c +@@ -2463,6 +2463,15 @@ backend_shr_modify_cb(Slapi_PBlock *pb) + /* No data yet, ignore */ + return 0; + } ++ ++ if (backend_shr_write_ignore(pb)) { ++#if DEBUG_MAP_LOCK ++ slapi_log_error(SLAPI_LOG_FATAL, "schema-compat", ++ "backend_shr_modify_cb: (%p) operation is not impacting schema compat\n", PR_MyThreadId(), 1); ++#endif ++ return 0; ++ } ++ + slapi_pblock_get(pb, SLAPI_MODIFY_TARGET, &dn); + slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &cbdata.mods); + slapi_pblock_get(pb, SLAPI_ENTRY_PRE_OP, &cbdata.e_pre); +@@ -2669,6 +2678,15 @@ backend_shr_modrdn_cb(Slapi_PBlock *pb) + /* No data yet, ignore */ + return 0; + } ++ ++ if (backend_shr_write_ignore(pb)) { ++#if DEBUG_MAP_LOCK ++ slapi_log_error(SLAPI_LOG_FATAL, "schema-compat", ++ "backend_shr_modrdn_cb: (%p) operation is not impacting schema compat\n", PR_MyThreadId(), 1); ++#endif ++ return 0; ++ } ++ + slapi_pblock_get(pb, SLAPI_ENTRY_PRE_OP, &cbdata.e_pre); + slapi_pblock_get(pb, SLAPI_ENTRY_POST_OP, &cbdata.e_post); + +-- +2.41.0 + diff --git a/SPECS/slapi-nis.spec b/SPECS/slapi-nis.spec index 82b91b1..af88440 100644 --- a/SPECS/slapi-nis.spec +++ b/SPECS/slapi-nis.spec @@ -11,13 +11,14 @@ Name: slapi-nis Version: 0.60.0 -Release: 4%{?dist} +Release: 5%{?dist} Summary: NIS Server and Schema Compatibility plugins for Directory Server License: GPLv3 URL: http://pagure.io/slapi-nis/ Source0: https://releases.pagure.org/slapi-nis/slapi-nis-%{version}.tar.gz Source1: https://releases.pagure.org/slapi-nis/slapi-nis-%{version}.tar.gz.asc Patch0: slapi-nis-bz2183950.patch +Patch1: slapi-nis-RHEL-5134.patch BuildRequires: make BuildRequires: autoconf @@ -58,6 +59,7 @@ for attributes from multiple entries in the tree. %prep %setup -q %patch0 -p1 +%patch1 -p1 %build autoconf --force @@ -85,6 +87,11 @@ make check %{_sbindir}/nisserver-plugin-defs %changelog +* Tue Oct 10 2023 Alexander Bokovoy - 0.60.0-5 +- Ignore updates from non-tracked subtrees during modify/modrdn/update + to avoid deadlocks with retro changelog +- Resolves: RHEL-11983 + * Mon Apr 24 2023 Alexander Bokovoy - 0.60.0-4 - Also handle base searches within the compat tree - Related: rhbz#2183950