From 8fef28c0592e1c833ac1e3877493539a65cfc8de Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Wed, 14 Apr 2010 19:34:43 +0000 Subject: [PATCH] ITS#6434 --- CHANGES | 1 + servers/slapd/overlays/rwm.c | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 49f3d52149..286d3077d6 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,7 @@ OpenLDAP 2.4.21 Release (2009/12/20) Fixed slapo-collect REP_ENTRY flag handling (ITS#5340,ITS#6423) Fixed slapo-dynlist REP_ENTRY flag handling (ITS#5340,ITS#6423) Fixed slapo-rwm REP_ENTRY flag handling (ITS#5340,ITS#6423) + Fixed slapo-rwm olcRwmMap handling (ITS#6434) Fixed slapo-translucent with back-null (ITS#6403) Fixed slapo-unique criteria checking (ITS#6270) Fixed slapo-valsort REP_ENTRY flag handling (ITS#5340,ITS#6423) diff --git a/servers/slapd/overlays/rwm.c b/servers/slapd/overlays/rwm.c index 176ccccff5..18b8e51e1e 100644 --- a/servers/slapd/overlays/rwm.c +++ b/servers/slapd/overlays/rwm.c @@ -1924,7 +1924,7 @@ static ConfigOCs rwmocs[] = { }; static void -slap_rewrite_unparse( BerVarray in, BerVarray *out ) +slap_bv_x_ordered_unparse( BerVarray in, BerVarray *out ) { int i; BerVarray bva = NULL; @@ -2041,7 +2041,7 @@ rwm_cf_gen( ConfigArgs *c ) rc = 1; } else { - slap_rewrite_unparse( rwmap->rwm_bva_rewrite, &c->rvalue_vals ); + slap_bv_x_ordered_unparse( rwmap->rwm_bva_rewrite, &c->rvalue_vals ); if ( !c->rvalue_vals ) { rc = 1; } @@ -2065,7 +2065,10 @@ rwm_cf_gen( ConfigArgs *c ) rc = 1; } else { - value_add( &c->rvalue_vals, rwmap->rwm_bva_map ); + slap_bv_x_ordered_unparse( rwmap->rwm_bva_map, &c->rvalue_vals ); + if ( !c->rvalue_vals ) { + rc = 1; + } } break; @@ -2323,11 +2326,18 @@ rwm_cf_gen( ConfigArgs *c ) rc = 0; break; - case RWM_CF_MAP: - if ( c->valx >= 0 ) { - return 1; + case RWM_CF_MAP: { + int cnt = 0; + + if ( rwmap->rwm_bva_map ) { + for ( ; !BER_BVISNULL( &rwmap->rwm_bva_map[ cnt ]); cnt++ ) + /* just count */ ; } + /* can only append */ + if ( c->valx >= 0 && c->valx != cnt ) return 1; + + /* try to configure; FIXME: modifications not atomic! */ argv0 = c->argv[ 0 ]; c->argv[ 0 ] += STRLENOF( "rwm-" ); rc = rwm_m_config( &db, c->fname, c->lineno, c->argc, c->argv ); @@ -2345,7 +2355,7 @@ rwm_cf_gen( ConfigArgs *c ) ber_bvarray_add( &rwmap->rwm_bva_map, &bv ); } } - break; + } break; case RWM_CF_NORMALIZE_MAPPED: if ( c->value_int ) { -- 2.39.5