X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmra.c;h=54dde3964ee2b4e8bc5527705727094148ac450c;hb=f3c2c7ba48e67468e4052cea4699ffabad59a741;hp=688786e313d2e15c94948a79f7ce774b08063bb5;hpb=d616bd4ff834e72e9fb7accf98b492d45c0aba5c;p=openldap diff --git a/servers/slapd/mra.c b/servers/slapd/mra.c index 688786e313..54dde3964e 100644 --- a/servers/slapd/mra.c +++ b/servers/slapd/mra.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2004 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,6 +23,10 @@ #include "slap.h" +#ifdef LDAP_COMP_MATCH +#include "component.h" +#endif + void mra_free( Operation *op, @@ -31,7 +35,7 @@ mra_free( { #ifdef LDAP_COMP_MATCH /* free component assertion */ - if ( mra->ma_rule->smr_usage & SLAP_MR_COMPONENT ) { + if ( mra->ma_rule->smr_usage & SLAP_MR_COMPONENT && mra->ma_cf ) { component_free( mra->ma_cf ); } #endif @@ -53,9 +57,10 @@ get_mra( struct berval type = BER_BVNULL; struct berval value = BER_BVNULL; struct berval rule_text = BER_BVNULL; - MatchingRuleAssertion ma; - - memset( &ma, 0, sizeof ma); + MatchingRuleAssertion ma = { 0 }; +#ifdef LDAP_COMP_MATCH + AttributeAliasing* aa = NULL; +#endif rtag = ber_scanf( ber, "{t" /*"}"*/, &tag ); @@ -136,7 +141,12 @@ get_mra( if( type.bv_val != NULL ) { rc = slap_bv2ad( &type, &ma.ma_desc, text ); if( rc != LDAP_SUCCESS ) { - return rc; + rc = slap_bv2undef_ad( &type, &ma.ma_desc, text, + SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); + + if( rc != LDAP_SUCCESS ) { + return rc; + } } } @@ -189,10 +199,13 @@ get_mra( if( rc != LDAP_SUCCESS ) return rc; #ifdef LDAP_COMP_MATCH - /* Matching Rule for Component Matching */ - Debug( LDAP_DEBUG_FILTER, "matchingrule %s\n", - ma.ma_rule->smr_mrule.mr_oid, 0, 0); - if( ma.ma_rule && ma.ma_rule->smr_usage & SLAP_MR_COMPONENT ) { + /* Check If this attribute is aliased */ + if ( is_aliased_attribute && ma.ma_desc && ( aa = is_aliased_attribute ( ma.ma_desc ) ) ) { + rc = get_aliased_filter ( op, &ma, aa, text ); + if ( rc != LDAP_SUCCESS ) return rc; + } + else if ( ma.ma_rule && ma.ma_rule->smr_usage & SLAP_MR_COMPONENT ) { + /* Matching Rule for Component Matching */ rc = get_comp_filter( op, &ma.ma_value, &ma.ma_cf, text ); if ( rc != LDAP_SUCCESS ) return rc; }