]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/rwmmap.c
forgot access control...
[openldap] / servers / slapd / overlays / rwmmap.c
index 8fa42c91eef855ccf92950a89c1450888c915e06..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 );
@@ -493,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;
@@ -704,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 */