]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/mra.c
Fix ITS#3424
[openldap] / servers / slapd / mra.c
index d9e1ec622647156e900da3cfd4134896095d60d7..688786e313d2e15c94948a79f7ce774b08063bb5 100644 (file)
@@ -29,6 +29,12 @@ mra_free(
        MatchingRuleAssertion *mra,
        int     freeit )
 {
+#ifdef LDAP_COMP_MATCH
+       /* free component assertion */
+       if ( mra->ma_rule->smr_usage & SLAP_MR_COMPONENT ) {
+               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 );
@@ -180,17 +186,18 @@ get_mra(
                SLAP_MR_EXT|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX,
                &value, &ma.ma_value, text, op->o_tmpmemctx );
 
-       if( rc != LDAP_SUCCESS ) {
-               return rc;
-       }
+       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 )
-               rc = get_comp_filter( op, &ma.ma_value, &ma.cf, text );
+       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 ) {
+               rc = get_comp_filter( op, &ma.ma_value, &ma.ma_cf, text );
                if ( rc != LDAP_SUCCESS ) return rc;
+       }
 #endif
+
        length = sizeof(ma);
        /* Append rule_text to end of struct */
        if (rule_text.bv_val) length += rule_text.bv_len + 1;