File 0003-Revert-Issue-6417-If-an-entry-RDN-is-identical-to-th.patch of Package 389-ds.39710

From 6a6d2f833942728f9f89a723e8f0cd17ea7d3277 Mon Sep 17 00:00:00 2001
From: William <william@blackhats.net.au>
Date: Wed, 2 Jul 2025 12:57:47 +1000
Subject: [PATCH 3/3] Revert "Issue 6417 - If an entry RDN is identical to the
 suffix, then Entryrdn gets broken during a reindex (#6418)"

This reverts commit ccbb8bae354363a8332dd3c5621c7ceb8b43b21a.
---
 .../tests/suites/indexes/entryrdn_test.py     | 109 +-----------------
 .../back-ldbm/db-mdb/mdb_import_threads.c     |   2 +-
 ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c  |  11 +-
 3 files changed, 4 insertions(+), 118 deletions(-)

diff --git a/dirsrvtests/tests/suites/indexes/entryrdn_test.py b/dirsrvtests/tests/suites/indexes/entryrdn_test.py
index 0f1f8f79f..49535f8ab 100644
--- a/dirsrvtests/tests/suites/indexes/entryrdn_test.py
+++ b/dirsrvtests/tests/suites/indexes/entryrdn_test.py
@@ -11,16 +11,11 @@ import os
 import pytest
 import ldap
 import logging
-from lib389 import Entry
 from lib389._constants import DEFAULT_BENAME, DEFAULT_SUFFIX
-from lib389.backend import Backends, Backend
-from lib389.mappingTree import MappingTrees
-from lib389.configurations.sample import create_base_domain
-from lib389.idm.domain import Domain
-from lib389.idm.user import UserAccounts, UserAccount
+from lib389.backend import Backends
+from lib389.idm.user import UserAccounts
 from lib389.idm.organizationalunit import OrganizationalUnits
 from lib389.topologies import topology_m2 as topo_m2
-from lib389.topologies import topology_st
 from lib389.agreement import Agreements
 from lib389.utils import ds_is_older, ensure_bytes
 from lib389.tasks import Tasks,ExportTask, ImportTask
@@ -145,107 +140,7 @@ def test_tombstone(topo_m2):
     assert error is False
     checkdbscancount(s1, 'nsuniqueid', EXPECTED_NB_NSNIQUEID)
 
-def test_entry_rdn_same_as_suffix(topology_st, request):
-    """
-    Test that a reindex is successful even if an entry
-    has a RDN that is identical to the suffix
 
-    :id: 7f5a38e9-b979-4664-b132-81df0e60f38a
-    :setup: standalone
-    :steps:
-        1. Create a new backend with suffix 'dc=dup_rdn' (ID 1)
-        2. Create a dummy entry 'ou=my_org,dc=dup_rdn' (ID 2)
-        3. Create the problematic entry 'dc=dup_rdn,dc=dup_rdn' (ID 3)
-        4. Create a dummy entry 'ou=my_org,dc=dup_rdn,dc=dup_rdn' (ID 4)
-        5. Do an offline reindex
-        6. Check that entryrdn contains the key P3 (parent of ID 3)
-        7. Check that error log does not contain 'entryrdn_insert_key - Same DN'
-    :expectedresults:
-        1. Should succeed
-        2. Should succeed
-        3. Should succeed
-        4. Should succeed
-        5. Should succeed
-        6. Should succeed
-        7. Should succeed
-    """
-    inst = topology_st.standalone
-
-    # Create a suffix 'dc=dup_rdn'
-    be_name = 'domain'
-    dc_value = 'dup_rdn'
-    suffix = 'dc=' + dc_value
-    rdn = 'my_org'
-    be1 = Backend(inst)
-    be1.create(properties={
-            'cn': be_name,
-            'nsslapd-suffix': suffix,
-        },
-        create_mapping_tree=False
-    )
-
-    mts = MappingTrees(inst)
-    mt = mts.create(properties={
-        'cn': suffix,
-        'nsslapd-state': 'backend',
-        'nsslapd-backend': be_name,
-    })
-
-    # Create the domain entry 'dc=dup_rdn'
-    create_base_domain(inst, suffix)
-
-    # Create the org ou=my_org,dc=dup_rdn
-    ous = OrganizationalUnits(inst, suffix)
-    ou = ous.create(properties={ 'ou': rdn })
-
-    # when reindexing entryrdn the following entry
-    # (dc=dup_rdn,dc=dup_rdn) Triggers
-    # this message.
-    # This is because its RDN (dc=dup_rdn) is also
-    # the suffix DN
-    info_message = 'entryrdn_insert_key - Same DN (dn: %s) is already in the entryrdn file with different' % (ou.dn)
-    log.info("In case if the bug still exist this line should be in the error log")
-    log.info(" --> " + info_message)
-
-    # Create the domain entry 'dc=dup_rdn,dc=dup_rdn'
-    trigger_entry = suffix + "," + suffix
-    domain = Domain(inst, dn=trigger_entry)
-    domain.create(properties={
-        'dc': dc_value,
-        'description': 'Entry with RDN identical to suffix'
-    })
-
-    # Create the org ou=my_org,dc=dup_rdn,dc=dup_rdn
-    ous = OrganizationalUnits(inst, trigger_entry)
-    ou = ous.create(properties={ 'ou': rdn })
-
-
-    # Trigger an offline reindex
-    log.info('Offline reindex, stopping the server')
-    topology_st.standalone.stop()
-
-    log.info('Reindex all the suffix')
-    topology_st.standalone.db2index(bename=be_name)
-
-    # make sure the key 'P3' (parent of 'dc=dup_rdn,dc=dup_rdn') exists
-    dbscanout = topology_st.standalone.dbscan(bename=be_name, index='entryrdn')
-    log.info(dbscanout)
-    assert(ensure_bytes('P3') in ensure_bytes(dbscanout))
-
-    # make sure there is no failure detected/logged in error logs
-    if topology_st.standalone.get_db_lib() == "mdb":
-        pattern_str = ".*Inconsistent id2entry database.*"
-    else:
-        pattern_str = ".*entryrdn_insert_key - Same DN.*is already in the entryrdn file with different.*$"
-    assert not topology_st.standalone.ds_error_log.match(pattern_str)
-
-
-    def fin():
-        topology_st.standalone.restart()
-        mt.delete()
-        be1.delete()
-
-    request.addfinalizer(fin)
 
 if __name__ == "__main__":
     # Run isolated
diff --git a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_import_threads.c b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_import_threads.c
index 0cbf9a6fc..8eea7db65 100644
--- a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_import_threads.c
+++ b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_import_threads.c
@@ -737,7 +737,7 @@ get_entry_type(WorkerQueueData_t *wqelmt, Slapi_DN *sdn)
     int len = SLAPI_ATTR_UNIQUEID_LENGTH;
     const char *ndn = slapi_sdn_get_ndn(sdn);
 
-    if (slapi_be_issuffix(be, sdn) && (wqelmt->wait_id == 1)) {
+    if (slapi_be_issuffix(be, sdn)) {
         return DNRC_SUFFIX;
     }
     if (PL_strncasecmp(ndn, SLAPI_ATTR_UNIQUEID, len) || ndn[len] != '=') {
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c
index 4de293199..9b8763d5e 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c
@@ -1166,16 +1166,7 @@ entryrdn_lookup_dn(backend *be,
                     }
                     goto bail;
                 }
-                if (workid == 1) {
-                    /* The loop (workid) iterates from the starting 'id'
-                     * up to the suffix ID (i.e. '1').
-                     * A corner case (#6417) is if an entry, on the path
-                     * 'id' -> suffix, has the same RDN than the suffix.
-                     * In order to erroneously believe the loop hits the suffix
-                     * we need to check that 'workid' is '1' (suffix)
-                     */
-                    maybesuffix = 1;
-                }
+                maybesuffix = 1;
             } else {
                 _entryrdn_cursor_print_error("entryrdn_lookup_dn",
                                              key.data, data.size, data.ulen, rc);
-- 
2.50.0

openSUSE Build Service is sponsored by