X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmra.c;h=54dde3964ee2b4e8bc5527705727094148ac450c;hb=7684514535dbe9f407b420bab76f06861ad7587d;hp=7d43bba1f0e942ba87fb845f94d8a1f6326920c3;hpb=7f773613f8486b1ce4ed30efba4520e0249fd202;p=openldap diff --git a/servers/slapd/mra.c b/servers/slapd/mra.c index 7d43bba1f0..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,12 +23,22 @@ #include "slap.h" +#ifdef LDAP_COMP_MATCH +#include "component.h" +#endif + void mra_free( Operation *op, MatchingRuleAssertion *mra, int freeit ) { +#ifdef LDAP_COMP_MATCH + /* free component assertion */ + if ( mra->ma_rule->smr_usage & SLAP_MR_COMPONENT && mra->ma_cf ) { + component_free( mra->ma_cf ); + } +#endif /* op->o_tmpfree( mra->ma_value.bv_val, op->o_tmpmemctx ); */ ch_free( mra->ma_value.bv_val ); if ( freeit ) op->o_tmpfree( (char *) mra, op->o_tmpmemctx ); @@ -47,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 ); @@ -130,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; + } } } @@ -183,11 +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; }