ITS#6837 make sure objectclasses are processed in correct

inheritance order
This commit is contained in:
Howard Chu 2011-02-19 02:48:47 +00:00
parent 626e3f9360
commit 6005349cbc

View File

@ -4760,6 +4760,12 @@ count_oc( ObjectClass *oc, ConfigOCs ***copp, int *nocs )
ConfigOCs co, *cop;
ObjectClass **sups;
for ( sups = oc->soc_sups; sups && *sups; sups++ ) {
if ( count_oc( *sups, copp, nocs ) ) {
return -1;
}
}
co.co_name = &oc->soc_cname;
cop = avl_find( CfOcTree, &co, CfOc_cmp );
if ( cop ) {
@ -4783,27 +4789,18 @@ count_oc( ObjectClass *oc, ConfigOCs ***copp, int *nocs )
}
}
for ( sups = oc->soc_sups; sups && *sups; sups++ ) {
if ( count_oc( *sups, copp, nocs ) ) {
return -1;
}
}
return 0;
}
static ConfigOCs **
count_ocs( Attribute *oc_at, int *nocs )
{
int i;
int i, j;
ConfigOCs **colst = NULL;
*nocs = 0;
for ( i = 0; !BER_BVISNULL( &oc_at->a_nvals[i] ); i++ )
/* count attrs */ ;
for ( ; i--; ) {
for ( i = oc_at->a_numvals; i--; ) {
ObjectClass *oc = oc_bvfind( &oc_at->a_nvals[i] );
assert( oc != NULL );
@ -4813,6 +4810,16 @@ count_ocs( Attribute *oc_at, int *nocs )
}
}
/* invert order */
i = 0;
j = *nocs - 1;
while ( i < j ) {
ConfigOCs *tmp = colst[i];
colst[i] = colst[j];
colst[j] = tmp;
i++; j--;
}
return colst;
}