]> git.sur5r.net Git - openldap/commitdiff
import leak plug from slapo-rwm
authorPierangelo Masarati <ando@openldap.org>
Thu, 3 Nov 2005 15:20:33 +0000 (15:20 +0000)
committerPierangelo Masarati <ando@openldap.org>
Thu, 3 Nov 2005 15:20:33 +0000 (15:20 +0000)
servers/slapd/back-meta/config.c
servers/slapd/back-meta/init.c

index 18f3a772d96646dbb84d57fd57efcff6d0be0849..078d2ee0c6f8669215d365a2b076e4be9a0a1215 100644 (file)
@@ -939,17 +939,17 @@ ldap_back_map_config(
                        fname, lineno );
                return 1;
        }
-       ber_str2bv( src, 0, 1, &mapping->src );
-       ber_str2bv( dst, 0, 1, &mapping->dst );
-       mapping[ 1 ].src = mapping->dst;
-       mapping[ 1 ].dst = mapping->src;
+       ber_str2bv( src, 0, 1, &mapping[ 0 ].src );
+       ber_str2bv( dst, 0, 1, &mapping[ 0 ].dst );
+       mapping[ 1 ].src = mapping[ 0 ].dst;
+       mapping[ 1 ].dst = mapping[ 0 ].src;
 
        /*
         * schema check
         */
        if ( is_oc ) {
                if ( src[ 0 ] != '\0' ) {
-                       if ( oc_bvfind( &mapping->src ) == NULL ) {
+                       if ( oc_bvfind( &mapping[ 0 ].src ) == NULL ) {
                                fprintf( stderr,
        "%s: line %d: warning, source objectClass '%s' "
        "should be defined in schema\n",
@@ -962,7 +962,7 @@ ldap_back_map_config(
                        }
                }
 
-               if ( oc_bvfind( &mapping->dst ) == NULL ) {
+               if ( oc_bvfind( &mapping[ 0 ].dst ) == NULL ) {
                        fprintf( stderr,
        "%s: line %d: warning, destination objectClass '%s' "
        "is not defined in schema\n",
@@ -974,7 +974,7 @@ ldap_back_map_config(
                AttributeDescription    *ad = NULL;
 
                if ( src[ 0 ] != '\0' ) {
-                       rc = slap_bv2ad( &mapping->src, &ad, &text );
+                       rc = slap_bv2ad( &mapping[ 0 ].src, &ad, &text );
                        if ( rc != LDAP_SUCCESS ) {
                                fprintf( stderr,
        "%s: line %d: warning, source attributeType '%s' "
@@ -989,7 +989,7 @@ ldap_back_map_config(
                                 * and add it here.
                                 */
 
-                               rc = slap_bv2undef_ad( &mapping->src,
+                               rc = slap_bv2undef_ad( &mapping[ 0 ].src,
                                                &ad, &text, SLAP_AD_PROXIED );
                                if ( rc != LDAP_SUCCESS ) {
                                        fprintf( stderr,
@@ -1003,7 +1003,7 @@ ldap_back_map_config(
                        ad = NULL;
                }
 
-               rc = slap_bv2ad( &mapping->dst, &ad, &text );
+               rc = slap_bv2ad( &mapping[ 0 ].dst, &ad, &text );
                if ( rc != LDAP_SUCCESS ) {
                        fprintf( stderr,
        "%s: line %d: warning, destination attributeType '%s' "
@@ -1015,7 +1015,7 @@ ldap_back_map_config(
                         * and add it here.
                         */
 
-                       rc = slap_bv2undef_ad( &mapping->dst,
+                       rc = slap_bv2undef_ad( &mapping[ 0 ].dst,
                                        &ad, &text, SLAP_AD_PROXIED );
                        if ( rc != LDAP_SUCCESS ) {
                                fprintf( stderr,
@@ -1027,7 +1027,7 @@ ldap_back_map_config(
                }
        }
 
-       if ( (src[ 0 ] != '\0' && avl_find( map->map, (caddr_t)mapping, mapping_cmp ) != NULL)
+       if ( (src[ 0 ] != '\0' && avl_find( map->map, (caddr_t)&mapping[ 0 ], mapping_cmp ) != NULL)
                        || avl_find( map->remap, (caddr_t)&mapping[ 1 ], mapping_cmp ) != NULL)
        {
                fprintf( stderr,
@@ -1037,7 +1037,7 @@ ldap_back_map_config(
        }
 
        if ( src[ 0 ] != '\0' ) {
-               avl_insert( &map->map, (caddr_t)mapping,
+               avl_insert( &map->map, (caddr_t)&mapping[ 0 ],
                                        mapping_cmp, mapping_dup );
        }
        avl_insert( &map->remap, (caddr_t)&mapping[ 1 ],
@@ -1047,8 +1047,8 @@ ldap_back_map_config(
 
 error_return:;
        if ( mapping ) {
-               ch_free( mapping->src.bv_val );
-               ch_free( mapping->dst.bv_val );
+               ch_free( mapping[ 0 ].src.bv_val );
+               ch_free( mapping[ 0 ].dst.bv_val );
                ch_free( mapping );
        }
 
index b78a652ccc7752316ec427a4562eed8113e581ea..a978646f1f8c270f0c575220b177a2c09e1f2d95 100644 (file)
@@ -163,6 +163,17 @@ mapping_free(
        ch_free( mapping );
 }
 
+static void
+mapping_dst_free(
+       void            *v_mapping )
+{
+       struct ldapmapping *mapping = v_mapping;
+
+       if ( BER_BVISEMPTY( &mapping->dst ) ) {
+               mapping_free( &mapping[ -1 ] );
+       }
+}
+
 static void
 target_free(
        metatarget_t    *mt )
@@ -191,9 +202,9 @@ target_free(
        if ( mt->mt_rwmap.rwm_rw ) {
                rewrite_info_delete( &mt->mt_rwmap.rwm_rw );
        }
-       avl_free( mt->mt_rwmap.rwm_oc.remap, NULL );
+       avl_free( mt->mt_rwmap.rwm_oc.remap, mapping_dst_free );
        avl_free( mt->mt_rwmap.rwm_oc.map, mapping_free );
-       avl_free( mt->mt_rwmap.rwm_at.remap, NULL );
+       avl_free( mt->mt_rwmap.rwm_at.remap, mapping_dst_free );
        avl_free( mt->mt_rwmap.rwm_at.map, mapping_free );
 }