From 375db33d13ab1fe414419a6f9cfb0b41c999862d Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 22 Jun 2017 18:08:40 +0100 Subject: [PATCH] ITS#8678 temporary hack --- servers/slapd/back-mdb/modify.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/servers/slapd/back-mdb/modify.c b/servers/slapd/back-mdb/modify.c index d5c5e151a1..6de49c29ef 100644 --- a/servers/slapd/back-mdb/modify.c +++ b/servers/slapd/back-mdb/modify.c @@ -49,11 +49,20 @@ mdb_modify_idxflags( ap = attr_find( oldattrs, desc ); if ( ap ) ap->a_flags |= SLAP_ATTR_IXDEL; - /* Find all other attrs that index to same slot */ - for ( ap = newattrs; ap; ap = ap->a_next ) { - ai = mdb_index_mask( op->o_bd, ap->a_desc, &ix2 ); - if ( ai && ix2.bv_val == ix_at.bv_val ) - ap->a_flags |= SLAP_ATTR_IXADD; + /* ITS#8678 FIXME + * If using 32bit hashes, or substring index, must account for + * possible index collisions. If no substring index, and using + * 64bit hashes, assume we don't need to check for collisions. + * + * In 2.5 use refcounts and avoid all of this mess. + */ + if (!slap_hash64(-1) || (ai->ai_indexmask & SLAP_INDEX_SUBSTR)) { + /* Find all other attrs that index to same slot */ + for ( ap = newattrs; ap; ap = ap->a_next ) { + ai = mdb_index_mask( op->o_bd, ap->a_desc, &ix2 ); + if ( ai && ix2.bv_val == ix_at.bv_val ) + ap->a_flags |= SLAP_ATTR_IXADD; + } } } else {