ldap/servers/slapd/back-ldbm/dblayer.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
New commits:
commit 26aad754b1a559fbea02806cebf2ed7f6ab22848
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Thu Jan 16 10:36:19 2014 -0500
Ticket 47654 - fix double free
Bug Description: Under certain circumstances the dbhome directory gets freed twice.
Fix Description: Copy the db home directory into the private db directory array,
instead
of passing a reference to it.
https://fedorahosted.org/389/ticket/47654
Reviewed by: rmeggins(Thanks!)
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c
b/ldap/servers/slapd/back-ldbm/dblayer.c
index 2384471..9fae72b 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
+++ b/ldap/servers/slapd/back-ldbm/dblayer.c
@@ -1357,7 +1357,7 @@ dblayer_make_env(struct dblayer_private_env **env, struct ldbminfo
*li)
if (home_dir && *home_dir &&
!charray_utf8_inlist(priv->dblayer_data_directories, home_dir))
{
- charray_add(&(priv->dblayer_data_directories), home_dir);
+ charray_add(&(priv->dblayer_data_directories),
slapi_ch_strdup(home_dir));
}
/* user specified log dir */
@@ -2928,9 +2928,8 @@ int dblayer_post_close(struct ldbminfo *li, int dbmode)
charray_free(priv->dblayer_data_directories);
priv->dblayer_data_directories = NULL;
}
- if(dbmode == DBLAYER_NORMAL_MODE){
- slapi_ch_free_string(&priv->dblayer_home_directory);
- }
+ slapi_ch_free_string(&priv->dblayer_dbhome_directory);
+ slapi_ch_free_string(&priv->dblayer_home_directory);
return return_value;
}
@@ -2964,7 +2963,6 @@ int dblayer_close(struct ldbminfo *li, int dbmode)
return_value |= dblayer_instance_close(be);
}
}
- LDAPDebug1Arg(LDAP_DEBUG_ANY,"MARK dbmode %d\n",dbmode);
if (return_value != 0) {
/* force recovery next startup if any close failed */