mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-12 10:54:48 +08:00
(ITS#6987) Consider only same attribute siblings for Cft_misc.
For all other ce_types it holds that each is represented by one attribute, making ce_type matching for X-ORDERED siblings equivalent to how back-ldif handles them. Cft_misc is means "all other types", however no overlay/backend so far has used different attributes as siblings, triggering the difference in handling between bconfig.c and back-ldif.
This commit is contained in:
parent
5fcc9285fb
commit
122faa5bd9
@ -4766,9 +4766,42 @@ check_name_index( CfEntryInfo *parent, ConfigType ce_type, Entry *e,
|
||||
}
|
||||
}
|
||||
|
||||
/* count related kids */
|
||||
for (nsibs=0, ce=parent->ce_kids; ce; ce=ce->ce_sibs) {
|
||||
if ( ce->ce_type == ce_type ) nsibs++;
|
||||
/* count related kids, for entries of type Cft_Misc, consider only
|
||||
* same attribute siblings */
|
||||
if ( ce_type == Cft_Misc )
|
||||
{
|
||||
AttributeDescription *ad = NULL;
|
||||
|
||||
ptr1 = strchr( rdn.bv_val, '=' );
|
||||
assert( ptr1 != NULL );
|
||||
|
||||
rdn.bv_len = ptr1 - rdn.bv_val;
|
||||
slap_bv2ad( &rdn, &ad, &ptr2 );
|
||||
assert( ad != NULL );
|
||||
|
||||
for (nsibs=0, ce=parent->ce_kids; ce; ce=ce->ce_sibs) {
|
||||
AttributeDescription *ad2 = NULL;
|
||||
if ( ce->ce_type != ce_type )
|
||||
continue;
|
||||
|
||||
dnRdn( &ce->ce_entry->e_name, &rdn );
|
||||
|
||||
ptr1 = strchr( rdn.bv_val, '=' );
|
||||
assert( ptr1 != NULL );
|
||||
|
||||
rdn.bv_len = ptr1 - rdn.bv_val;
|
||||
slap_bv2ad( &rdn, &ad2, &ptr2 );
|
||||
assert( ad2 != NULL );
|
||||
|
||||
if ( ad == ad2 )
|
||||
nsibs++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (nsibs=0, ce=parent->ce_kids; ce; ce=ce->ce_sibs) {
|
||||
if ( ce->ce_type == ce_type ) nsibs++;
|
||||
}
|
||||
}
|
||||
|
||||
/* account for -1 frontend */
|
||||
|
Loading…
Reference in New Issue
Block a user