From c6052ac8b0b8830b443ef34117317977b93c721b Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sat, 31 Aug 2002 21:23:45 +0000 Subject: [PATCH] Add mr_usable_with_at() routine. Use both in generation of rule uses, but also in test_filter_mra() --- servers/slapd/filterentry.c | 6 ++---- servers/slapd/mr.c | 37 +++++++++++++++++++++++-------------- servers/slapd/proto-slap.h | 3 +++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/servers/slapd/filterentry.c b/servers/slapd/filterentry.c index 111e258e61..01a89c4f45 100644 --- a/servers/slapd/filterentry.c +++ b/servers/slapd/filterentry.c @@ -270,8 +270,7 @@ static int test_mra_filter( int rc; /* check if matching is appropriate */ - if ( strcmp( mra->ma_rule->smr_syntax->ssyn_oid, - a->a_desc->ad_type->sat_syntax->ssyn_oid ) != 0 ) { + if ( !mr_usable_with_at( mra->ma_rule, a->a_desc->ad_type )) { continue; } @@ -346,8 +345,7 @@ static int test_mra_filter( const char *text = NULL; /* check if matching is appropriate */ - if ( strcmp( mra->ma_rule->smr_syntax->ssyn_oid, - ad->ad_type->sat_syntax->ssyn_oid ) != 0 ) { + if ( !mr_usable_with_at( mra->ma_rule, ad->ad_type )) { continue; } diff --git a/servers/slapd/mr.c b/servers/slapd/mr.c index 8a203b9784..701c646c18 100644 --- a/servers/slapd/mr.c +++ b/servers/slapd/mr.c @@ -383,21 +383,9 @@ matching_rule_use_init( void ) at = NULL; for ( at_start( &at ); at; at_next( &at ) ) { if( at->sat_flags & SLAP_AT_HIDE ) continue; - if( mr->smr_usage & SLAP_MR_EXT && ( - mr->smr_syntax == at->sat_syntax || - mr == at->sat_equality || - mr == at->sat_approx ) ) - { - ldap_charray_add( &applies_oids, at->sat_cname.bv_val ); - } else if ( mr->smr_compat_syntaxes ) { - int i; - for( i=0; mr->smr_compat_syntaxes[i]; i++ ) { - if( at->sat_syntax == mr->smr_compat_syntaxes[i] ) { - ldap_charray_add( &applies_oids, at->sat_cname.bv_val ); - break; - } - } + if( mr_usable_with_at( mr, at )) { + ldap_charray_add( &applies_oids, at->sat_cname.bv_val ); } } @@ -437,6 +425,27 @@ matching_rule_use_init( void ) return( 0 ); } +int mr_usable_with_at( + MatchingRule *mr, + AttributeType *at ) +{ + if( mr->smr_usage & SLAP_MR_EXT && ( + mr->smr_syntax == at->sat_syntax || + mr == at->sat_equality || mr == at->sat_approx ) ) + { + return 1; + } + + if ( mr->smr_compat_syntaxes ) { + int i; + for( i=0; mr->smr_compat_syntaxes[i]; i++ ) { + if( at->sat_syntax == mr->smr_compat_syntaxes[i] ) { + return 1; + } + } + } + return 0; +} #if defined( SLAPD_SCHEMA_DN ) diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index b01a223b57..fb5e49d36d 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -630,6 +630,9 @@ LDAP_SLAPD_F (int) matching_rule_use_init LDAP_P(( void )); LDAP_SLAPD_F (int) mr_schema_info( Entry *e ); LDAP_SLAPD_F (int) mru_schema_info( Entry *e ); +LDAP_SLAPD_F (int) mr_usable_with_at( MatchingRule *mr, + AttributeType *at ); + /* * mra.c */