summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoriko Hosoi <nhosoi@redhat.com>2010-05-19 15:02:41 -0700
committerNoriko Hosoi <nhosoi@redhat.com>2010-05-19 15:19:37 -0700
commit466052e83b57f58a0d5a2ee3fed8129376169323 (patch)
tree53af4e397aaad6d80c2e4fac5c6f9fc7e502a623
parentf999c42c3c4a2c39143fa9bfeddc55d03b25f8dc (diff)
downloadds-466052e83b57f58a0d5a2ee3fed8129376169323.tar.gz
ds-466052e83b57f58a0d5a2ee3fed8129376169323.tar.xz
ds-466052e83b57f58a0d5a2ee3fed8129376169323.zip
593110 - backup-restore does not ALWAYS work
https://bugzilla.redhat.com/show_bug.cgi?id=593110 Fix description: ldap/servers/slapd/back-ldbm/dblayer.c -- A memory area that stores nsslapd-directory was shared between 2 structures: struct ldbminfo and dblayer_private. In dblayer_post_close, dblayer_private is released but not struct ldbminfo. The latter does not know the memory area is freed. This fix changes it so that each structure has its own copy. ldap/servers/plugins/acl/acl.c -- A variable result_status had a chance to be evaluated w/o an initialization.
-rw-r--r--ldap/servers/plugins/acl/acl.c2
-rw-r--r--ldap/servers/slapd/back-ldbm/dblayer.c9
2 files changed, 8 insertions, 3 deletions
diff --git a/ldap/servers/plugins/acl/acl.c b/ldap/servers/plugins/acl/acl.c
index 715ad1ea..574c862e 100644
--- a/ldap/servers/plugins/acl/acl.c
+++ b/ldap/servers/plugins/acl/acl.c
@@ -3913,7 +3913,7 @@ acl__recompute_acl ( Acl_PBlock *aclpb,
char *unused_str1, *unused_str2;
char *acl_tag, *testRight[2];
int j, expr_num;
- int result_status, cache_result;
+ int result_status = ACL_RES_INVALID, cache_result;
PRUint32 cookie;
aci_t *aci;
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c b/ldap/servers/slapd/back-ldbm/dblayer.c
index 35c392db..ae66be60 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
+++ b/ldap/servers/slapd/back-ldbm/dblayer.c
@@ -1447,7 +1447,10 @@ int dblayer_start(struct ldbminfo *li, int dbmode)
return -1;
}
PR_Lock(li->li_config_mutex);
- priv->dblayer_home_directory = li->li_directory; /* nsslapd-directory */
+ /* li->li_directory comes from nsslapd-directory */
+ /* dblayer_home_directory is freed in dblayer_post_close.
+ * li_directory needs to live beyond dblayer. */
+ priv->dblayer_home_directory = slapi_ch_strdup(li->li_directory);
priv->dblayer_cachesize = li->li_dbcachesize;
priv->dblayer_file_mode = li->li_mode;
priv->dblayer_ncache = li->li_dbncache;
@@ -5535,7 +5538,9 @@ int dblayer_restore(struct ldbminfo *li, char *src_dir, Slapi_Task *task, char *
/* DBDB this is a hack, take out later */
PR_Lock(li->li_config_mutex);
- priv->dblayer_home_directory = li->li_directory;
+ /* dblayer_home_directory is freed in dblayer_post_close.
+ * li_directory needs to live beyond dblayer. */
+ priv->dblayer_home_directory = slapi_ch_strdup(li->li_directory);
priv->dblayer_cachesize = li->li_dbcachesize;
priv->dblayer_ncache = li->li_dbncache;
priv->dblayer_file_mode = li->li_mode;