]> git.sur5r.net Git - openldap/commitdiff
free replica info as appropriate
authorPierangelo Masarati <ando@openldap.org>
Sun, 7 Aug 2005 15:01:13 +0000 (15:01 +0000)
committerPierangelo Masarati <ando@openldap.org>
Sun, 7 Aug 2005 15:01:13 +0000 (15:01 +0000)
servers/slapd/ad.c
servers/slapd/backend.c
servers/slapd/proto-slap.h
servers/slapd/repl.c

index c690d2efdbd33f4b4501dbcdb3b474558e0503bc..a067e059cc27ef2cdc840dd88245506356ce7e1e 100644 (file)
@@ -775,13 +775,16 @@ str2anlist( AttributeName *an, char *in, const char *brkstr )
        AttributeName *anew;
 
        /* find last element in list */
-       for (i = 0; an && an[i].an_name.bv_val; i++);
+       if ( an != NULL ) {
+               for ( i = 0; !BER_BVISNULL( &an[ i ].an_name ) ; i++)
+                       ;
+       }
        
        /* protect the input string from strtok */
        str = ch_strdup( in );
 
        /* Count words in string */
-       j=1;
+       j = 1;
        for ( s = str; *s; s++ ) {
                if ( strchr( brkstr, *s ) != NULL ) {
                        j++;
@@ -839,7 +842,7 @@ str2anlist( AttributeName *an, char *in, const char *brkstr )
                anew++;
        }
 
-       anew->an_name.bv_val = NULL;
+       BER_BVZERO( &anew->an_name );
        free( str );
        return( an );
 
index cd32557290570303839b865e0fbb179ceeaebdd7..b5204ce7bc347b898670fcda8895eb103bd8bbe2 100644 (file)
@@ -422,6 +422,11 @@ void backend_destroy_one( BackendDB *bd, int dynamic )
        }
        acl_destroy( bd->be_acl, frontendDB->be_acl );
        limits_destroy( bd->be_limits );
+       if ( bd->be_replogfile ) {
+               ch_free( bd->be_replogfile );
+       }
+       destroy_replica_info( bd );
+
        if ( dynamic ) {
                free( bd );
        }
@@ -465,6 +470,9 @@ int backend_destroy(void)
                        free( bd->be_rootpw.bv_val );
                }
                acl_destroy( bd->be_acl, frontendDB->be_acl );
+
+               assert( bd->be_replogfile == NULL );
+               assert( bd->be_replica == NULL );
        }
 
        return 0;
index ce907de38b251ecc52b1ea8dce48841938537515..1902de4d4c229619803f6f7fd4f5069c2dc39906 100644 (file)
@@ -1228,6 +1228,7 @@ LDAP_SLAPD_F (int) get_alias_dn LDAP_P((
  */
 LDAP_SLAPD_F (int) add_replica_info LDAP_P(( Backend *be,
        const char *uri, const char *host ));
+LDAP_SLAPD_F (int) destroy_replica_info LDAP_P (( Backend *be ));
 LDAP_SLAPD_F (int) add_replica_suffix LDAP_P(( Backend *be,
        int nr, const char *suffix ));
 LDAP_SLAPD_F (int) add_replica_attrs LDAP_P(( Backend *be,
index cfc2cb3d3bcf5c49b84328bf67d19ca9ff615699..e269539f658a777b54325073db147096918d0c24 100644 (file)
 
 int
 add_replica_info(
-    Backend     *be,
-    const char  *uri, 
-    const char  *host 
-)
+       Backend         *be,
+       const char      *uri, 
+       const char      *host )
 {
        int i = 0;
 
@@ -69,6 +68,45 @@ add_replica_info(
        return( i );
 }
 
+int
+destroy_replica_info(
+       Backend         *be )
+{
+       int i = 0;
+
+       assert( be );
+
+       if ( be->be_replica == NULL ) {
+               return 0;
+       }
+
+       for ( ; be->be_replica[ i ] != NULL; i++ ) {
+
+               ch_free( (char *)be->be_replica[ i ]->ri_uri );
+
+               ber_bvarray_free( be->be_replica[ i ]->ri_nsuffix );
+
+               if ( be->be_replica[ i ]->ri_attrs ) {
+                       AttributeName   *an = be->be_replica[ i ]->ri_attrs;
+                       int             j;
+
+                       for ( j = 0; !BER_BVISNULL( &an[ j ].an_name ); j++ )
+                       {
+                               ch_free( an[ j ].an_name.bv_val );
+                       }
+                       ch_free( an );
+               }
+
+               bindconf_free( &be->be_replica[ i ]->ri_bindconf );
+
+               ch_free( be->be_replica[ i ] );
+       }
+
+       ch_free( be->be_replica );
+
+       return 0;
+}
+
 int
 add_replica_suffix(
     Backend     *be,