Initial ITS#3333 fix

(needs to be applied to other filter cases)
This commit is contained in:
Kurt Zeilenga 2004-09-17 21:43:28 +00:00
parent 452fc403dd
commit 9c5768cd8e

View file

@ -359,6 +359,7 @@ test_ava_filter(
AttributeAssertion *ava, AttributeAssertion *ava,
int type ) int type )
{ {
int rc;
Attribute *a; Attribute *a;
if ( !access_allowed( op, e, if ( !access_allowed( op, e,
@ -423,6 +424,8 @@ test_ava_filter(
return LDAP_COMPARE_FALSE; return LDAP_COMPARE_FALSE;
} }
rc = LDAP_COMPARE_FALSE;
for(a = attrs_find( e->e_attrs, ava->aa_desc ); for(a = attrs_find( e->e_attrs, ava->aa_desc );
a != NULL; a != NULL;
a = attrs_find( a->a_next, ava->aa_desc ) ) a = attrs_find( a->a_next, ava->aa_desc ) )
@ -430,6 +433,13 @@ test_ava_filter(
MatchingRule *mr; MatchingRule *mr;
struct berval *bv; struct berval *bv;
if (( ava->aa_desc != a->a_desc ) && !access_allowed( op, e,
a->a_desc, &ava->aa_value, ACL_SEARCH, NULL ))
{
rc = LDAP_INSUFFICIENT_ACCESS;
continue;
}
switch ( type ) { switch ( type ) {
case LDAP_FILTER_APPROX: case LDAP_FILTER_APPROX:
mr = a->a_desc->ad_type->sat_approx; mr = a->a_desc->ad_type->sat_approx;
@ -450,17 +460,23 @@ test_ava_filter(
mr = NULL; mr = NULL;
} }
if( mr == NULL ) continue; if( mr == NULL ) {
rc = LDAP_OTHER;
continue;
}
for ( bv = a->a_nvals; bv->bv_val != NULL; bv++ ) { for ( bv = a->a_nvals; bv->bv_val != NULL; bv++ ) {
int ret; int ret;
int rc; int tmprc;
const char *text; const char *text;
rc = value_match( &ret, a->a_desc, mr, 0, tmprc = value_match( &ret, a->a_desc, mr, 0,
bv, &ava->aa_value, &text ); bv, &ava->aa_value, &text );
if( rc != LDAP_SUCCESS ) return rc; if( tmprc != LDAP_SUCCESS ) {
rc = tmprc;
continue;
}
switch ( type ) { switch ( type ) {
case LDAP_FILTER_EQUALITY: case LDAP_FILTER_EQUALITY:
@ -479,7 +495,7 @@ test_ava_filter(
} }
} }
return LDAP_COMPARE_FALSE; return rc;
} }