fix nasty subtype bug (too many results)

This commit is contained in:
Pierangelo Masarati 2004-03-18 23:38:55 +00:00
parent abd39c093b
commit 6beb139e61
2 changed files with 37 additions and 2 deletions

View File

@ -398,6 +398,24 @@ backsql_id2entry( backsql_srch_info *bsi, Entry *e, backsql_entryID *eid )
continue;
}
/* if one of the attributes listed here is
* a subtype of another, it must be ignored,
* because subtypes are already dealt with
* by backsql_supad2at()
*/
for ( j = 0; bsi->bsi_attrs[ j ].an_name.bv_val; j++ ) {
/* skip self */
if ( j == i ) {
continue;
}
/* skip subtypes */
if ( is_at_subtype( attr->an_desc->ad_type, bsi->bsi_attrs[ j ].an_desc->ad_type ) )
{
goto next;
}
}
rc = backsql_supad2at( bsi->bsi_oc, attr->an_desc, &vat );
if ( rc != 0 || vat == NULL ) {
Debug( LDAP_DEBUG_TRACE, "backsql_id2entry(): "
@ -413,6 +431,8 @@ backsql_id2entry( backsql_srch_info *bsi, Entry *e, backsql_entryID *eid )
}
ch_free( vat );
next:;
}
} else {

View File

@ -595,8 +595,23 @@ supad2at_f( void *v_at, void *v_arg )
if ( is_at_subtype( at->bam_ad->ad_type, va->ad->ad_type ) ) {
backsql_at_map_rec **ret;
unsigned i;
ret = ch_realloc( va->ret, sizeof( backsql_at_map_rec *) * ( va->n + 2 ) );
/* if already listed, holler! (should never happen) */
if ( va->ret ) {
for ( i = 0; i < va->n; i++ ) {
if ( va->ret[ i ]->bam_ad == at->bam_ad ) {
break;
}
}
if ( i < va->n ) {
return 0;
}
}
ret = ch_realloc( va->ret,
sizeof( backsql_at_map_rec *) * ( va->n + 2 ) );
if ( ret == NULL ) {
ch_free( va->ret );
return SUPAD2AT_STOP;
@ -632,7 +647,7 @@ backsql_supad2at( backsql_oc_map_rec *objclass, AttributeDescription *supad,
va.ret = NULL;
va.ad = supad;
va.n = 0;
rc = avl_apply( objclass->bom_attrs, supad2at_f, &va,
SUPAD2AT_STOP, AVL_INORDER );
if ( rc == SUPAD2AT_STOP ) {