]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/rwmmap.c
ITS#5747: Only use C99 flexible array member when supported
[openldap] / servers / slapd / overlays / rwmmap.c
index f18d80d2716ee404bd653a8cb0967f81c2c2add3..ad03d87effddc4ccf1c98be167fff91dedb434f3 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2007 The OpenLDAP Foundation.
+ * Copyright 1999-2008 The OpenLDAP Foundation.
  * Portions Copyright 1999-2003 Howard Chu.
  * Portions Copyright 2000-2003 Pierangelo Masarati.
  * All rights reserved.
@@ -81,7 +81,9 @@ rwm_map_init( struct ldapmap *lm, struct ldapmapping **m )
                return LDAP_NO_MEMORY;
        }
 
-       /* FIXME: I don't think this is needed any more... */
+       /* NOTE: this is needed to make sure that
+        *      rwm-map attribute *
+        * does not  filter out all attributes including objectClass */
        rc = slap_str2ad( "objectClass", &mapping[0].m_src_ad, &text );
        if ( rc != LDAP_SUCCESS ) {
                ch_free( mapping );
@@ -420,6 +422,15 @@ map_attr_value(
                                return -1;
                        }
 
+               } else if ( ad->ad_type->sat_equality->smr_usage & SLAP_MR_MUTATION_NORMALIZER ) {
+                       if ( ad->ad_type->sat_equality->smr_normalize(
+                               (SLAP_MR_DENORMALIZE|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX),
+                               NULL, NULL, value, &vtmp, NULL ) )
+                       {
+                               return -1;
+                       }
+                       freeval = 1;
+
                } else if ( ad == slap_schema.si_ad_objectClass
                                || ad == slap_schema.si_ad_structuralObjectClass )
                {
@@ -484,6 +495,10 @@ rwm_int_filter_map_rewrite(
                return LDAP_OTHER;
        }
 
+       if ( f->f_choice & SLAPD_FILTER_UNDEFINED ) {
+               goto computed;
+       }
+
        switch ( f->f_choice & SLAPD_FILTER_MASK ) {
        case LDAP_FILTER_EQUALITY:
                ad = f->f_av_desc;
@@ -695,7 +710,7 @@ rwm_int_filter_map_rewrite(
 
        case -1:
 computed:;
-               filter_free_x( op, f );
+               filter_free_x( op, f, 0 );
                f->f_choice = SLAPD_FILTER_COMPUTED;
                f->f_result = SLAPD_COMPARE_UNDEFINED;
                /* fallthru */