X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Frwmmap.c;h=ad03d87effddc4ccf1c98be167fff91dedb434f3;hb=996be22a8c966521eb8e277a95051be317de247f;hp=c1d3cafc95cdf95aee95b9dcd98366f3f02edc5d;hpb=ca7ad7f2e320328912d6b3bc1335935961daa029;p=openldap diff --git a/servers/slapd/overlays/rwmmap.c b/servers/slapd/overlays/rwmmap.c index c1d3cafc95..ad03d87eff 100644 --- a/servers/slapd/overlays/rwmmap.c +++ b/servers/slapd/overlays/rwmmap.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * 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 ); @@ -403,9 +405,7 @@ map_attr_value( dncookie fdc = *dc; int rc; -#ifdef ENABLE_REWRITE fdc.ctx = "searchFilterAttrDN"; -#endif /* ENABLE_REWRITE */ vtmp = *value; rc = rwm_dn_massage_normalize( &fdc, value, &vtmp ); @@ -422,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 ) { @@ -486,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; @@ -697,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 */ @@ -751,7 +764,6 @@ rwm_filter_map_rewrite( rc = rwm_int_filter_map_rewrite( op, dc, f, fstr ); -#ifdef ENABLE_REWRITE if ( rc != 0 ) { return rc; } @@ -798,7 +810,6 @@ rwm_filter_map_rewrite( rc = LDAP_OTHER; break; } -#endif /* ENABLE_REWRITE */ return rc; } @@ -834,14 +845,9 @@ rwm_referral_rewrite( * Rewrite the dn if needed */ dc.rwmap = rwmap; -#ifdef ENABLE_REWRITE dc.conn = op->o_conn; dc.rs = rs; dc.ctx = (char *)cookie; -#else /* ! ENABLE_REWRITE */ - dc.tofrom = ((int *)cookie)[0]; - dc.normalized = 0; -#endif /* ! ENABLE_REWRITE */ for ( last = 0; !BER_BVISNULL( &a_vals[last] ); last++ ) ; @@ -1007,14 +1013,9 @@ rwm_dnattr_rewrite( * Rewrite the dn if needed */ dc.rwmap = rwmap; -#ifdef ENABLE_REWRITE dc.conn = op->o_conn; dc.rs = rs; dc.ctx = (char *)cookie; -#else /* ! ENABLE_REWRITE */ - dc.tofrom = ((int *)cookie)[0]; - dc.normalized = 0; -#endif /* ! ENABLE_REWRITE */ for ( last = 0; !BER_BVISNULL( &in[last] ); last++ ); last--;