]> git.sur5r.net Git - openldap/commitdiff
ITS#6434
authorQuanah Gibson-Mount <quanah@openldap.org>
Wed, 14 Apr 2010 19:34:43 +0000 (19:34 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 14 Apr 2010 19:34:43 +0000 (19:34 +0000)
CHANGES
servers/slapd/overlays/rwm.c

diff --git a/CHANGES b/CHANGES
index 49f3d5214941b7578bafff49116cc38f425ac4bf..286d3077d6aa62931badd30f20b5c54bab5d515e 100644 (file)
--- 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)
index 176ccccff5e1a44f64632913ecc18654c05450fb..18b8e51e1eef8dcb128d4afa1466f9107280d40f 100644 (file)
@@ -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 ) {