mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
fix nasty subtype bug (too many results)
This commit is contained in:
parent
abd39c093b
commit
6beb139e61
@ -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 {
|
||||
|
@ -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 ) {
|
||||
|
Loading…
Reference in New Issue
Block a user