diff --git a/0001-Issue-2526-retrocl-backend-created-out-of-order.patch b/0001-Issue-2526-retrocl-backend-created-out-of-order.patch new file mode 100644 index 0000000..c6f7fed --- /dev/null +++ b/0001-Issue-2526-retrocl-backend-created-out-of-order.patch @@ -0,0 +1,103 @@ +From 67c8b8702a249cb0ef1ebf49b6e87056cd5339f6 Mon Sep 17 00:00:00 2001 +From: Mark Reynolds +Date: Tue, 27 Oct 2020 13:14:55 -0400 +Subject: [PATCH] Issue 2526 - retrocl backend created out of order + +Bug Description: A recent change verified that you do not create + a mappingtree entry before the backend entry was + created. The server created the retrocl backend + in the opposite order which broke the retrocl. + +Fix Description: Create the retrocl backend entry before creating + the mapping tree entry. + +Relates: https://github.com/389ds/389-ds-base/issues/2526 + +Reviewed by: viktor(Thanks!) +--- + ldap/servers/plugins/retrocl/retrocl.c | 10 ++--- + ldap/servers/plugins/retrocl/retrocl_create.c | 38 +++++++++---------- + 2 files changed, 22 insertions(+), 26 deletions(-) + +diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c +index 4af4d752b..8d6135dad 100644 +--- a/ldap/servers/plugins/retrocl/retrocl.c ++++ b/ldap/servers/plugins/retrocl/retrocl.c +@@ -222,15 +222,11 @@ retrocl_select_backend(void) + slapi_entry_free(referral); + + if (err != LDAP_SUCCESS || be == NULL || be == defbackend_get_backend()) { +- slapi_log_err(SLAPI_LOG_ERR, RETROCL_PLUGIN_NAME, ++ /* Could not find the backend for cn=changelog, either because ++ * it doesn't exist mapping tree not registered. */ ++ slapi_log_err(SLAPI_LOG_PLUGIN, RETROCL_PLUGIN_NAME, + "retrocl_select_backend - Mapping tree select failed (%d) %s.\n", err, errbuf); +- +- /* could not find the backend for cn=changelog, either because +- * it doesn't exist +- * mapping tree not registered. +- */ + err = retrocl_create_config(); +- + if (err != LDAP_SUCCESS) + return err; + } else { +diff --git a/ldap/servers/plugins/retrocl/retrocl_create.c b/ldap/servers/plugins/retrocl/retrocl_create.c +index fb1503520..571e6899f 100644 +--- a/ldap/servers/plugins/retrocl/retrocl_create.c ++++ b/ldap/servers/plugins/retrocl/retrocl_create.c +@@ -192,6 +192,25 @@ retrocl_create_config(void) + vals[0] = &val; + vals[1] = NULL; + ++ retrocl_be_changelog = slapi_be_select_by_instance_name("changelog"); ++ ++ if (retrocl_be_changelog == NULL) { ++ /* This is not the nsslapd-changelogdir from cn=changelog4,cn=config */ ++ char *bedir; ++ ++ bedir = retrocl_get_config_str(CONFIG_CHANGELOG_DIRECTORY_ATTRIBUTE); ++ if (bedir == NULL) { ++ /* none specified */ ++ } ++ ++ rc = retrocl_create_be(bedir); ++ slapi_ch_free_string(&bedir); ++ if (rc != LDAP_SUCCESS && rc != LDAP_ALREADY_EXISTS) { ++ return rc; ++ } ++ retrocl_be_changelog = slapi_be_select_by_instance_name("changelog"); ++ } ++ + /* Assume the mapping tree node is missing. It doesn't hurt to + * attempt to add it if it already exists. You will see a warning + * in the errors file when the referenced backend does not exist. +@@ -256,25 +275,6 @@ retrocl_create_config(void) + return rc; + } + +- retrocl_be_changelog = slapi_be_select_by_instance_name("changelog"); +- +- if (retrocl_be_changelog == NULL) { +- /* This is not the nsslapd-changelogdir from cn=changelog4,cn=config */ +- char *bedir; +- +- bedir = retrocl_get_config_str(CONFIG_CHANGELOG_DIRECTORY_ATTRIBUTE); +- if (bedir == NULL) { +- /* none specified */ +- } +- +- rc = retrocl_create_be(bedir); +- slapi_ch_free_string(&bedir); +- if (rc != LDAP_SUCCESS && rc != LDAP_ALREADY_EXISTS) { +- return rc; +- } +- retrocl_be_changelog = slapi_be_select_by_instance_name("changelog"); +- } +- + return LDAP_SUCCESS; + } + +-- +2.28.0 + diff --git a/389-ds-base.spec b/389-ds-base.spec index d7d8b4e..ae71400 100644 --- a/389-ds-base.spec +++ b/389-ds-base.spec @@ -47,7 +47,7 @@ ExcludeArch: i686 Summary: 389 Directory Server (base) Name: 389-ds-base Version: 1.4.4.6 -Release: %{?relprefix}1%{?prerel}%{?dist} +Release: %{?relprefix}2%{?prerel}%{?dist} License: GPLv3+ URL: https://www.port389.org Conflicts: selinux-policy-base < 3.9.8 @@ -171,6 +171,9 @@ Source2: %{name}-devel.README Source3: https://github.com/jemalloc/%{jemalloc_name}/releases/download/%{jemalloc_ver}/%{jemalloc_name}-%{jemalloc_ver}.tar.bz2 %endif +# https://github.com/389ds/389-ds-base/commit/67c8b8702a249cb0ef1ebf49b6e87056cd5339f6 +Patch0: 0001-Issue-2526-retrocl-backend-created-out-of-order.patch + %description 389 Directory Server is an LDAPv3 compliant server. The base package includes the LDAP server and command line utilities for server administration. @@ -274,6 +277,8 @@ A cockpit UI Plugin for configuring and administering the 389 Directory Server %setup -q -n %{name}-%{version}%{?prerel} -T -D -b 3 %endif +%patch0 -p1 + cp %{SOURCE2} README.devel %build @@ -619,6 +624,9 @@ exit 0 %endif %changelog +* Tue Oct 27 2020 Adam Williamson - 1.4.4.6-2 +- Backport fix for Issue 2526 - retrocl backend created out of order + * Mon Oct 26 2020 Mark Reynolds - 1.4.4.6-1 - Bump version to 1.4.4.6 - Issue 4262 - Remove legacy tools subpackage (final cleanup)