]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/mra.c
Fix prev commit, renaming schema
[openldap] / servers / slapd / mra.c
index 097f34b25c7bda96525b1d8af9539c7af211e7f0..54dde3964ee2b4e8bc5527705727094148ac450c 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * 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
 
 #include "slap.h"
 
+#ifdef LDAP_COMP_MATCH
+#include "component.h"
+#endif
+
 void
 mra_free(
        Operation *op,
@@ -31,8 +35,9 @@ 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
        /* op->o_tmpfree( mra->ma_value.bv_val, op->o_tmpmemctx ); */
        ch_free( mra->ma_value.bv_val );
@@ -52,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 );
 
@@ -135,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;
+                       }
                }
        }
 
@@ -188,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;
        }