From cd5fc30dd7eae2812d847e142a95f1f44b39d5e9 Mon Sep 17 00:00:00 2001
From: Mark Reynolds <mreynolds@redhat.com>
Date: Tue, 11 Mar 2014 16:44:34 -0400
Subject: [PATCH 180/225] Ticket 47740 - Coverity Fixes (Mark - part 1)
Fixed these issues:
12510 - resource leak in lib/libutil/certmap.c
12509 - resource leak in ldap/servers/plugins/chainingdb/cb_bind.c
12508 - resource leak in ldap/servers/plugins/replication/repl5_replica_config.c
12507 - resource leak in ldap/servers/plugins/replication/repl5_replica_config.c
12506 - resource leak in ldap/servers/plugins/chainingdb/cb_config.c
12505 - resource leak in ldap/servers/plugins/posix-winsync/posix-winsync.c
12500 - resource leak in ldap/servers/plugins/chainingdb/cb_instance.c
https://fedorahosted.org/389/ticket/47740
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit d3ed247b7ed59eac8776ea9e73ee21ec8bcd2011)
(cherry picked from commit ea59c06fdb40f3fe7bd90742dfb9a49a46c27334)
---
ldap/servers/plugins/chainingdb/cb_bind.c | 5 +-
ldap/servers/plugins/chainingdb/cb_config.c | 70 ++++++++++------------
ldap/servers/plugins/chainingdb/cb_instance.c | 61 +++++++++----------
ldap/servers/plugins/posix-winsync/posix-winsync.c | 9 +--
.../plugins/replication/repl5_replica_config.c | 2 +
lib/ldaputil/certmap.c | 5 +-
6 files changed, 75 insertions(+), 77 deletions(-)
diff --git a/ldap/servers/plugins/chainingdb/cb_bind.c b/ldap/servers/plugins/chainingdb/cb_bind.c
index 18e526a..7c22931 100644
--- a/ldap/servers/plugins/chainingdb/cb_bind.c
+++ b/ldap/servers/plugins/chainingdb/cb_bind.c
@@ -307,6 +307,7 @@ chainingdb_bind( Slapi_PBlock *pb )
rc = status;
allocated_errmsg = 1;
} else if ( LDAP_USER_CANCELLED != rc ) {
+ slapi_ch_free_string(&errmsg);
errmsg = ldap_err2string( rc );
if (rc == LDAP_TIMEOUT) {
cb_ping_farm(cb,NULL,0);
@@ -332,8 +333,8 @@ chainingdb_bind( Slapi_PBlock *pb )
ldap_controls_free( resctrls );
}
slapi_ch_free((void **)& matcheddn );
- if ( allocated_errmsg && errmsg != NULL ) {
- slapi_ch_free((void **)& errmsg );
+ if ( allocated_errmsg ) {
+ slapi_ch_free_string(&errmsg);
}
slapi_sdn_free(&mysdn);
diff --git a/ldap/servers/plugins/chainingdb/cb_config.c b/ldap/servers/plugins/chainingdb/cb_config.c
index 717ea3c..d05470c 100644
--- a/ldap/servers/plugins/chainingdb/cb_config.c
+++ b/ldap/servers/plugins/chainingdb/cb_config.c
@@ -487,45 +487,39 @@ cb_config_modify_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entr
slapi_rwlock_unlock(cb->config.rwl_config_lock);
} else
- if ( !strcasecmp ( attr_name, CB_CONFIG_GLOBAL_CHAINABLE_COMPONENTS )) {
- char * config_attr_value;
- int done=0;
-
- slapi_rwlock_wrlock(cb->config.rwl_config_lock);
-
- for (j = 0; mods[i]->mod_bvalues && mods[i]->mod_bvalues[j]; j++) {
- config_attr_value = (char *) mods[i]->mod_bvalues[j]->bv_val;
- if (SLAPI_IS_MOD_REPLACE(mods[i]->mod_op)) {
- if (!done) {
- charray_free(cb->config.chainable_components);
- cb->config.chainable_components=NULL;
- done=1;
- }
- charray_add(&cb->config.chainable_components,
- slapi_dn_normalize(slapi_ch_strdup(config_attr_value)
-));
- } else
- if (SLAPI_IS_MOD_ADD(mods[i]->mod_op)) {
- charray_add(&cb->config.chainable_components,
- slapi_dn_normalize(slapi_ch_strdup(config_attr_value)
-));
- } else
- if (SLAPI_IS_MOD_DELETE(mods[i]->mod_op)) {
- charray_remove(cb->config.chainable_components,
- slapi_dn_normalize(slapi_ch_strdup(config_attr_value)
-),
- 0 /* freeit */);
- }
- }
- if (NULL == mods[i]->mod_bvalues) {
- charray_free(cb->config.chainable_components);
- cb->config.chainable_components=NULL;
- }
-
- slapi_rwlock_unlock(cb->config.rwl_config_lock);
- }
-
+ if ( !strcasecmp ( attr_name, CB_CONFIG_GLOBAL_CHAINABLE_COMPONENTS )) {
+ char *config_attr_value;
+ char *attr_val;
+ int done=0;
+
+ slapi_rwlock_wrlock(cb->config.rwl_config_lock);
+
+ for (j = 0; mods[i]->mod_bvalues && mods[i]->mod_bvalues[j]; j++) {
+ config_attr_value = (char *) mods[i]->mod_bvalues[j]->bv_val;
+ if (SLAPI_IS_MOD_REPLACE(mods[i]->mod_op)) {
+ if (!done) {
+ charray_free(cb->config.chainable_components);
+ cb->config.chainable_components=NULL;
+ done=1;
+ }
+ charray_add(&cb->config.chainable_components,
+ slapi_dn_normalize(slapi_ch_strdup(config_attr_value)));
+ } else if (SLAPI_IS_MOD_ADD(mods[i]->mod_op)) {
+ charray_add(&cb->config.chainable_components,
+ slapi_dn_normalize(slapi_ch_strdup(config_attr_value)));
+ } else if (SLAPI_IS_MOD_DELETE(mods[i]->mod_op)) {
+ attr_val = slapi_dn_normalize(slapi_ch_strdup(config_attr_value));
+ charray_remove(cb->config.chainable_components, attr_val, 0 /* freeit */);
+ slapi_ch_free_string(&attr_val);
+ }
+ }
+ if (NULL == mods[i]->mod_bvalues) {
+ charray_free(cb->config.chainable_components);
+ cb->config.chainable_components=NULL;
+ }
+ slapi_rwlock_unlock(cb->config.rwl_config_lock);
+ }
}
*returncode=LDAP_SUCCESS;
return SLAPI_DSE_CALLBACK_OK;
diff --git a/ldap/servers/plugins/chainingdb/cb_instance.c b/ldap/servers/plugins/chainingdb/cb_instance.c
index 95781b5..ce7675b 100644
--- a/ldap/servers/plugins/chainingdb/cb_instance.c
+++ b/ldap/servers/plugins/chainingdb/cb_instance.c
@@ -417,43 +417,40 @@ int cb_instance_modify_config_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefor
continue;
}
if ( !strcasecmp ( attr_name, CB_CONFIG_CHAINING_COMPONENTS )) {
- char * config_attr_value;
- int done=0;
+ char *config_attr_value;
+ char *attr_val;
+ int done=0;
int j;
- slapi_rwlock_wrlock(inst->rwl_config_lock);
- for (j = 0; mods[i]->mod_bvalues && mods[i]->mod_bvalues[j]; j++) {
- config_attr_value = (char *) mods[i]->mod_bvalues[j]->bv_val;
- if (SLAPI_IS_MOD_REPLACE(mods[i]->mod_op)) {
- if (!done) {
- charray_free(inst->chaining_components);
- inst->chaining_components=NULL;
- done=1;
- }
+ slapi_rwlock_wrlock(inst->rwl_config_lock);
+ for (j = 0; mods[i]->mod_bvalues && mods[i]->mod_bvalues[j]; j++) {
+ config_attr_value = (char *) mods[i]->mod_bvalues[j]->bv_val;
+ if (SLAPI_IS_MOD_REPLACE(mods[i]->mod_op)) {
+ if (!done) {
+ charray_free(inst->chaining_components);
+ inst->chaining_components=NULL;
+ done=1;
+ }
/* XXXSD assume dns */
- charray_add(&inst->chaining_components,
- slapi_dn_normalize(slapi_ch_strdup(config_attr_value)));
- } else
- if (SLAPI_IS_MOD_ADD(mods[i]->mod_op)) {
- charray_add(&inst->chaining_components,
- slapi_dn_normalize(slapi_ch_strdup(config_attr_value)));
- } else
- if (SLAPI_IS_MOD_DELETE(mods[i]->mod_op)) {
- charray_remove(inst->chaining_components,
- slapi_dn_normalize(slapi_ch_strdup(config_attr_value)),
- 0 /* freeit */);
- }
- }
- if (NULL == mods[i]->mod_bvalues) {
- charray_free(inst->chaining_components);
- inst->chaining_components=NULL;
- }
- slapi_rwlock_unlock(inst->rwl_config_lock);
- continue;
+ charray_add(&inst->chaining_components,
+ slapi_dn_normalize(slapi_ch_strdup(config_attr_value)));
+ } else if (SLAPI_IS_MOD_ADD(mods[i]->mod_op)) {
+ charray_add(&inst->chaining_components,
+ slapi_dn_normalize(slapi_ch_strdup(config_attr_value)));
+ } else if (SLAPI_IS_MOD_DELETE(mods[i]->mod_op)) {
+ attr_val = slapi_dn_normalize(slapi_ch_strdup(config_attr_value));
+ charray_remove(inst->chaining_components,attr_val, 0 /* freeit */);
+ slapi_ch_free_string(&attr_val);
+ }
+ }
+ if (NULL == mods[i]->mod_bvalues) {
+ charray_free(inst->chaining_components);
+ inst->chaining_components=NULL;
+ }
+ slapi_rwlock_unlock(inst->rwl_config_lock);
+ continue;
}
-
-
if (SLAPI_IS_MOD_DELETE(mods[i]->mod_op) ||
SLAPI_IS_MOD_ADD(mods[i]->mod_op)) {
diff --git a/ldap/servers/plugins/posix-winsync/posix-winsync.c b/ldap/servers/plugins/posix-winsync/posix-winsync.c
index 92a3a79..0919159 100644
--- a/ldap/servers/plugins/posix-winsync/posix-winsync.c
+++ b/ldap/servers/plugins/posix-winsync/posix-winsync.c
@@ -1373,21 +1373,22 @@ posix_winsync_end_update_cb(void *cbdata, const Slapi_DN *ds_subtree, const Slap
int rc = 0;
char *dn = slapi_create_dn_string("cn=%s,cn=%s,cn=tasks,cn=config",
posix_winsync_plugin_name, MEMBEROFTASK);
- slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
- "--> posix_winsync_end_update_cb, create task %s\n", dn);
+
if (NULL == dn) {
slapi_pblock_destroy(pb);
+ slapi_entry_free(e_task);
slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name,
"posix_winsync_end_update_cb: "
"failed to create task dn: cn=%s,%s,cn=tasks,cn=config\n",
posix_winsync_plugin_name, MEMBEROFTASK);
return;
}
-
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_end_update_cb, create task %s\n", dn);
slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
"--> posix_winsync_end_update_cb, init'ing task\n");
- slapi_entry_init(e_task, slapi_ch_strdup(dn), NULL);
+ slapi_entry_init(e_task, dn, NULL);
slapi_entry_add_string(e_task, "cn", slapi_ch_strdup(posix_winsync_plugin_name));
slapi_entry_add_string(e_task, "objectClass", "extensibleObject");
slapi_entry_add_string(e_task, "basedn", slapi_sdn_get_dn(ds_subtree));
diff --git a/ldap/servers/plugins/replication/repl5_replica_config.c b/ldap/servers/plugins/replication/repl5_replica_config.c
index 9a0b190..d020ffb 100644
--- a/ldap/servers/plugins/replication/repl5_replica_config.c
+++ b/ldap/servers/plugins/replication/repl5_replica_config.c
@@ -416,10 +416,12 @@ replica_config_modify (Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry*
}
else if (strcasecmp (config_attr, attr_replicaType) == 0)
{
+ slapi_ch_free_string(&new_repl_type);
new_repl_type = slapi_ch_strdup(config_attr_value);
}
else if (strcasecmp (config_attr, attr_replicaId) == 0)
{
+ slapi_ch_free_string(&new_repl_id);
new_repl_id = slapi_ch_strdup(config_attr_value);
}
else if (strcasecmp (config_attr, attr_flags) == 0)
diff --git a/lib/ldaputil/certmap.c b/lib/ldaputil/certmap.c
index f3da425..e27633c 100644
--- a/lib/ldaputil/certmap.c
+++ b/lib/ldaputil/certmap.c
@@ -745,7 +745,10 @@ static int ldapu_cert_searchfn_default (void *cert, LDAP *ld,
len = strlen(certmap_info->searchAttr) + strlen(subjectDN) +
strlen("=") + 1;
certFilter = (char *)ldapu_malloc(len * sizeof(char));
- if (!certFilter) return LDAPU_ERR_OUT_OF_MEMORY;
+ if (!certFilter){
+ free(subjectDN);
+ return LDAPU_ERR_OUT_OF_MEMORY;
+ }
sprintf(certFilter, "%s=%s", certmap_info->searchAttr, subjectDN);
free(subjectDN);
if ( ldapu_strcasecmp(basedn, "") ) {
--
1.8.1.4