From 12552b47385b98ad294fdb1f229861998c83ec2f Mon Sep 17 00:00:00 2001
From: Mark Reynolds <mreynolds@redhat.com>
Date: Wed, 5 Jun 2013 16:19:57 -0400
Subject: [PATCH 92/99] Coverity Fixes (Part 4)
11753 - Resource leak (aclparse.c)
11754 - Resource leak (dna.c)
11755 - Resource leak (dna.c)
11756 - Resource leak (linked_attrs.c)
11757 - Resource leak (pam_ptconfig.c)
11758 - Resource leak (repl5_replica_config.c)
11759 - Resource leak (windows_inc_protocol.c)
11760 - Resource leak (syntaxes/value.c)
11761 - Resource leak (dblayer.c)
11764 - Resource leak (dblayer.c)
11766 - Resource leak (dblayer.c)
11769 - Resource leak (entry.c)
11770 - Resource leak (entry.c)
11773 - Resource leak (schema.c)
11774 - Resource leak (snmp_collator.c)
11775 - Resource leak (ldclt/data.c)
11776 - Resource leak (tools/mmldif.c)
11777 - Resource leak (snmp/main.c)
11778 - Resource leak (lib/libutil/dbconf.c)
11779 - Resource leak (lib/libaccess/register.cpp)
11781 - Resource leak (lib/libadmin/error.c)
11872 - Resource leak (agtmmap.c)
https://bugzilla.redhat.com/show_bug.cgi?id=970221
Reviewed by: nhosoi(Thanks!)
(cherry picked from commit 26127d5f7a96c33dfc46f3c8fc21de07455ea667)
(cherry picked from commit 3ab5aba6252798b895953a6f2af50916d3525ceb)
---
ldap/servers/plugins/acl/acl.h | 1 +
ldap/servers/plugins/acl/acllist.c | 7 +++---
ldap/servers/plugins/acl/aclparse.c | 29 +++++++++++-----------
ldap/servers/plugins/dna/dna.c | 7 ++++++
ldap/servers/plugins/linkedattrs/linked_attrs.c | 7 ++++++
ldap/servers/plugins/pam_passthru/pam_ptconfig.c | 6 +++++
.../plugins/replication/repl5_replica_config.c | 3 +--
.../plugins/replication/windows_inc_protocol.c | 1 +
ldap/servers/plugins/syntaxes/value.c | 14 +++++++++++
ldap/servers/slapd/agtmmap.c | 1 +
ldap/servers/slapd/back-ldbm/dblayer.c | 14 +++++++----
ldap/servers/slapd/entry.c | 7 +++++-
ldap/servers/slapd/schema.c | 6 +++--
ldap/servers/slapd/snmp_collator.c | 4 ++-
ldap/servers/slapd/tools/ldclt/data.c | 2 ++
ldap/servers/slapd/tools/mmldif.c | 6 +++++
ldap/servers/snmp/main.c | 3 +++
lib/ldaputil/dbconf.c | 7 ++++--
lib/libaccess/register.cpp | 1 +
lib/libadmin/error.c | 7 ++++--
20 files changed, 99 insertions(+), 34 deletions(-)
diff --git a/ldap/servers/plugins/acl/acl.h b/ldap/servers/plugins/acl/acl.h
index e2b04c3..c61ee70 100644
--- a/ldap/servers/plugins/acl/acl.h
+++ b/ldap/servers/plugins/acl/acl.h
@@ -866,6 +866,7 @@ int acllist_moddn_aci_needsLock ( Slapi_DN *oldsdn, char *newdn );
void acllist_print_tree ( Avlnode *root, int *depth, char *start, char *side);
AciContainer *acllist_get_aciContainer_new ( );
void acllist_done_aciContainer ( AciContainer *);
+void free_targetattrfilters( Targetattrfilter ***attrFilterArray);
aclUserGroup* aclg_find_userGroup (const char *n_dn);
void aclg_regen_ugroup_signature( aclUserGroup *ugroup);
diff --git a/ldap/servers/plugins/acl/acllist.c b/ldap/servers/plugins/acl/acllist.c
index e8198af..623a739 100644
--- a/ldap/servers/plugins/acl/acllist.c
+++ b/ldap/servers/plugins/acl/acllist.c
@@ -94,7 +94,6 @@ static int __acllist_add_aci ( aci_t *aci );
static int __acllist_aciContainer_node_cmp ( caddr_t d1, caddr_t d2 );
static int __acllist_aciContainer_node_dup ( caddr_t d1, caddr_t d2 );
static void __acllist_free_aciContainer ( AciContainer **container);
-static void free_targetattrfilters( Targetattrfilter ***input_attrFilterArray);
void my_print( Avlnode *root );
@@ -565,8 +564,9 @@ acllist_free_aci(aci_t *item)
slapi_ch_free ( (void **) &item );
}
-static void free_targetattrfilters( Targetattrfilter ***attrFilterArray) {
-
+void
+free_targetattrfilters( Targetattrfilter ***attrFilterArray)
+{
if (*attrFilterArray) {
int i = 0;
Targetattrfilter *attrfilter;
@@ -592,7 +592,6 @@ static void free_targetattrfilters( Targetattrfilter ***attrFilterArray) {
/* Now free the array */
slapi_ch_free ( (void **) attrFilterArray );
}
-
}
/* SEARCH */
diff --git a/ldap/servers/plugins/acl/aclparse.c b/ldap/servers/plugins/acl/aclparse.c
index 39d9f6c..8b11471 100644
--- a/ldap/servers/plugins/acl/aclparse.c
+++ b/ldap/servers/plugins/acl/aclparse.c
@@ -1935,14 +1935,13 @@ static int __acl__init_targetattrfilters( aci_t *aci, char *input_str) {
* We need to put each component into a targetattrfilter component of
* the array.
*
-*/
-
+ */
static int process_filter_list( Targetattrfilter ***input_attrFilterArray,
char * input_str) {
char *str, *end_attr;
Targetattrfilter *attrfilter = NULL;
- int numattr=0;
+ int numattr=0, rc = 0;
Targetattrfilter **attrFilterArray = NULL;
str = input_str;
@@ -1974,22 +1973,20 @@ static int process_filter_list( Targetattrfilter ***input_attrFilterArray,
memset (attrfilter, 0, sizeof(Targetattrfilter));
if (strstr( str,":") != NULL) {
-
if ( __acl_init_targetattrfilter( attrfilter, str ) != 0 ) {
slapi_ch_free((void**)&attrfilter);
- return(ACL_SYNTAX_ERR);
+ rc = ACL_SYNTAX_ERR;
+ break;
}
} else {
slapi_ch_free((void**)&attrfilter);
- return(ACL_SYNTAX_ERR);
+ rc = ACL_SYNTAX_ERR;
+ break;
}
-
/*
- * Add the attrfilte to the targetAttrFilter list
- */
-
-
+ * Add the attrfilter to the targetAttrFilter list
+ */
attrFilterArray = (Targetattrfilter **) slapi_ch_realloc (
(void *) attrFilterArray,
((numattr+1)*sizeof(Targetattrfilter *)) );
@@ -1998,7 +1995,6 @@ static int process_filter_list( Targetattrfilter ***input_attrFilterArray,
/* Move on to the next attribute in the list */
str = end_attr;
-
}/* while */
/* NULL terminate the list */
@@ -2007,10 +2003,13 @@ static int process_filter_list( Targetattrfilter ***input_attrFilterArray,
(void *) attrFilterArray,
((numattr+1)*sizeof(Targetattrfilter *)) );
attrFilterArray[numattr] = NULL;
+ if(rc){
+ free_targetattrfilters(&attrFilterArray);
+ } else {
+ *input_attrFilterArray = attrFilterArray;
+ }
- *input_attrFilterArray = attrFilterArray;
- return 0;
-
+ return rc;
}
/*
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index d3dfa52..958a4a7 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -1515,11 +1515,13 @@ dna_get_shared_servers(struct configEntry *config_entry, PRCList **servers)
* to lowest. */
struct dnaServer *sitem;
PRCList* item = PR_LIST_HEAD(*servers);
+ int inserted = 0;
while (item != *servers) {
sitem = (struct dnaServer *)item;
if (server->remaining > sitem->remaining) {
PR_INSERT_BEFORE(&(server->list), item);
+ inserted = 1;
break;
}
@@ -1528,9 +1530,13 @@ dna_get_shared_servers(struct configEntry *config_entry, PRCList **servers)
if (*servers == item) {
/* add to tail */
PR_INSERT_BEFORE(&(server->list), item);
+ inserted = 1;
break;
}
}
+ if(!inserted){
+ dna_free_shared_server(&server);
+ }
}
}
}
@@ -3340,6 +3346,7 @@ dna_pre_op(Slapi_PBlock * pb, int modtype)
bail:
if (resulting_e)
slapi_entry_free(resulting_e);
+ slapi_mods_free(&smods);
if (ret) {
slapi_log_error(SLAPI_LOG_PLUGIN, DNA_PLUGIN_SUBSYSTEM,
diff --git a/ldap/servers/plugins/linkedattrs/linked_attrs.c b/ldap/servers/plugins/linkedattrs/linked_attrs.c
index 4bea10f..7d8370d 100644
--- a/ldap/servers/plugins/linkedattrs/linked_attrs.c
+++ b/ldap/servers/plugins/linkedattrs/linked_attrs.c
@@ -755,6 +755,7 @@ linked_attrs_insert_config_index(struct configEntry *entry)
struct configEntry *config_entry = NULL;
struct configIndex *index_entry = NULL;
PRCList *list = PR_LIST_HEAD(g_managed_config_index);
+ int inserted = 0;
index_entry = (struct configIndex *)slapi_ch_calloc(1, sizeof(struct configIndex));
index_entry->config = entry;
@@ -769,6 +770,7 @@ linked_attrs_insert_config_index(struct configEntry *entry)
slapi_log_error(SLAPI_LOG_CONFIG, LINK_PLUGIN_SUBSYSTEM,
"store [%s] before [%s] \n", entry->dn,
config_entry->dn);
+ inserted = 1;
break;
}
@@ -779,6 +781,7 @@ linked_attrs_insert_config_index(struct configEntry *entry)
PR_INSERT_BEFORE(&(index_entry->list), list);
slapi_log_error(SLAPI_LOG_CONFIG, LINK_PLUGIN_SUBSYSTEM,
"store [%s] at tail\n", entry->dn);
+ inserted = 1;
break;
}
}
@@ -787,6 +790,10 @@ linked_attrs_insert_config_index(struct configEntry *entry)
slapi_log_error(SLAPI_LOG_CONFIG, LINK_PLUGIN_SUBSYSTEM,
"store [%s] at head \n", entry->dn);
PR_INSERT_LINK(&(index_entry->list), g_managed_config_index);
+ inserted = 1;
+ }
+ if(!inserted){
+ slapi_ch_free((void **)&index_entry);
}
}
diff --git a/ldap/servers/plugins/pam_passthru/pam_ptconfig.c b/ldap/servers/plugins/pam_passthru/pam_ptconfig.c
index fce8000..9391891 100644
--- a/ldap/servers/plugins/pam_passthru/pam_ptconfig.c
+++ b/ldap/servers/plugins/pam_passthru/pam_ptconfig.c
@@ -603,6 +603,7 @@ pam_passthru_apply_config (Slapi_Entry* e)
PRCList *list;
Slapi_Attr *a = NULL;
char *filter_str = NULL;
+ int inserted = 0;
pam_ident_attr = slapi_entry_attr_get_charptr(e, PAMPT_PAM_IDENT_ATTR);
map_method = slapi_entry_attr_get_charptr(e, PAMPT_MAP_METHOD_ATTR);
@@ -689,6 +690,7 @@ pam_passthru_apply_config (Slapi_Entry* e)
PR_INSERT_BEFORE(&(entry->list), list);
slapi_log_error(SLAPI_LOG_CONFIG, PAM_PASSTHRU_PLUGIN_SUBSYSTEM,
"store [%s] at tail\n", entry->dn);
+ inserted = 1;
break;
}
}
@@ -697,9 +699,13 @@ pam_passthru_apply_config (Slapi_Entry* e)
PR_INSERT_LINK(&(entry->list), pam_passthru_global_config);
slapi_log_error(SLAPI_LOG_CONFIG, PAM_PASSTHRU_PLUGIN_SUBSYSTEM,
"store [%s] at head \n", entry->dn);
+ inserted = 1;
}
bail:
+ if(!inserted){
+ pam_passthru_free_config_entry(&entry);
+ }
slapi_ch_free_string(&new_service);
slapi_ch_free_string(&map_method);
slapi_ch_free_string(&pam_ident_attr);
diff --git a/ldap/servers/plugins/replication/repl5_replica_config.c b/ldap/servers/plugins/replication/repl5_replica_config.c
index 7b684e9..5ca7706 100644
--- a/ldap/servers/plugins/replication/repl5_replica_config.c
+++ b/ldap/servers/plugins/replication/repl5_replica_config.c
@@ -1745,7 +1745,7 @@ check_replicas_are_done_cleaning(cleanruv_data *data )
{
Object *agmt_obj;
Repl_Agmt *agmt;
- char *csnstr = NULL;
+ char csnstr[CSN_STRSIZE];
char *filter = NULL;
int not_all_cleaned = 1;
int interval = 10;
@@ -1788,7 +1788,6 @@ check_replicas_are_done_cleaning(cleanruv_data *data )
interval = 14400;
}
}
- slapi_ch_free_string(&csnstr);
slapi_ch_free_string(&filter);
}
diff --git a/ldap/servers/plugins/replication/windows_inc_protocol.c b/ldap/servers/plugins/replication/windows_inc_protocol.c
index cb3b3d2..15d69a3 100644
--- a/ldap/servers/plugins/replication/windows_inc_protocol.c
+++ b/ldap/servers/plugins/replication/windows_inc_protocol.c
@@ -1026,6 +1026,7 @@ windows_inc_run(Private_Repl_Protocol *prp)
windows_conn_cancel_linger(prp->conn);
/* ... and disconnect, if currently connected */
windows_conn_disconnect(prp->conn);
+ ruv_destroy ( &ruv );
LDAPDebug0Args( LDAP_DEBUG_TRACE, "<= windows_inc_run\n" );
}
diff --git a/ldap/servers/plugins/syntaxes/value.c b/ldap/servers/plugins/syntaxes/value.c
index efef9a8..0335a89 100644
--- a/ldap/servers/plugins/syntaxes/value.c
+++ b/ldap/servers/plugins/syntaxes/value.c
@@ -282,10 +282,13 @@ value_cmp(
value_normalize_ext( v1->bv_val, syntax,
1 /* trim leading blanks */, &alt );
if (alt) {
+ int inserted = 0;
+
if (free_v1) {
slapi_ch_free_string(&v1->bv_val);
v1->bv_val = alt;
v1->bv_len = strlen(alt);
+ inserted = 1;
} else {
if (strlen(alt) < buffer_space) {
v1->bv_len = strlen(alt);
@@ -297,8 +300,12 @@ value_cmp(
v1 = (struct berval *)slapi_ch_malloc(sizeof(struct berval));
v1->bv_val = alt;
v1->bv_len = strlen(alt);
+ inserted = 1;
}
}
+ if(!inserted){
+ slapi_ch_free_string(&alt);
+ }
}
if (!free_v1) {
buffer_space -= v1->bv_len + 1;
@@ -320,10 +327,13 @@ value_cmp(
value_normalize_ext( v2->bv_val, syntax,
1 /* trim leading blanks */, &alt );
if (alt) {
+ int inserted = 0;
+
if (free_v2) {
slapi_ch_free_string(&v2->bv_val);
v2->bv_val = alt;
v2->bv_len = strlen(alt);
+ inserted = 1;
} else {
if (strlen(alt) < buffer_space) {
v2->bv_len = strlen(alt);
@@ -335,8 +345,12 @@ value_cmp(
v2 = (struct berval *)slapi_ch_malloc(sizeof(struct berval));
v2->bv_val = alt;
v2->bv_len = strlen(alt);
+ inserted = 1;
}
}
+ if(!inserted){
+ slapi_ch_free_string(&alt);
+ }
}
if (!free_v2) {
buffer_space -= v2->bv_len + 1;
diff --git a/ldap/servers/slapd/agtmmap.c b/ldap/servers/slapd/agtmmap.c
index f18138a..3922547 100644
--- a/ldap/servers/slapd/agtmmap.c
+++ b/ldap/servers/slapd/agtmmap.c
@@ -196,6 +196,7 @@ agt_mopen_stats (char * statsfile, int mode, int *hdl)
}
if(fstat (fd, &fileinfo) != 0){
+ close(fd);
rc = errno;
goto bail;
}
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c b/ldap/servers/slapd/back-ldbm/dblayer.c
index 960d99e..cb8ef68 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
+++ b/ldap/servers/slapd/back-ldbm/dblayer.c
@@ -1897,9 +1897,9 @@ dblayer_get_id2entry_size(ldbm_instance *inst)
{
struct ldbminfo *li = NULL;
char *id2entry_file = NULL;
- PRFileInfo info;
+ PRFileInfo64 info;
int rc;
- char inst_dir[MAXPATHLEN], *inst_dirp;
+ char inst_dir[MAXPATHLEN], *inst_dirp = NULL;
if (NULL == inst) {
return 0;
@@ -1908,7 +1908,10 @@ dblayer_get_id2entry_size(ldbm_instance *inst)
inst_dirp = dblayer_get_full_inst_dir(li, inst, inst_dir, MAXPATHLEN);
id2entry_file = slapi_ch_smprintf("%s/%s", inst_dirp,
ID2ENTRY LDBM_FILENAME_SUFFIX);
- rc = PR_GetFileInfo(id2entry_file, &info);
+ if(inst_dirp != inst_dir){
+ slapi_ch_free_string(&inst_dirp);
+ }
+ rc = PR_GetFileInfo64(id2entry_file, &info);
slapi_ch_free_string(&id2entry_file);
if (inst_dirp != inst_dir)
slapi_ch_free_string(&inst_dirp);
@@ -3069,6 +3072,9 @@ dblayer_open_file(backend *be, char* indexname, int open_flag,
}
abs_file_name = slapi_ch_smprintf("%s%c%s",
inst_dirp, get_sep(inst_dirp), file_name);
+ if (inst_dirp != inst_dir){
+ slapi_ch_free_string(&inst_dirp);
+ }
DB_OPEN(pENV->dblayer_openflags,
dbp, NULL/* txnid */, abs_file_name, subname, DB_BTREE,
open_flags, priv->dblayer_file_mode, return_value);
@@ -3084,8 +3090,6 @@ dblayer_open_file(backend *be, char* indexname, int open_flag,
goto out;
slapi_ch_free_string(&abs_file_name);
- if (inst_dirp != inst_dir)
- slapi_ch_free_string(&inst_dirp);
}
DB_OPEN(pENV->dblayer_openflags,
dbp, NULL, /* txnid */ rel_path, subname, DB_BTREE,
diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c
index f38c39e..a43dc21 100644
--- a/ldap/servers/slapd/entry.c
+++ b/ldap/servers/slapd/entry.c
@@ -552,6 +552,7 @@ str2entry_fast( const char *rawdn, char *s, int flags, int read_stateinfo )
}
done:
+ csnset_free(&valuecsnset);
csn_free(&attributedeletioncsn);
csn_free(&maxcsn);
LDAPDebug( LDAP_DEBUG_TRACE, "<= str2entry_fast 0x%x\n",
@@ -744,6 +745,7 @@ str2entry_dupcheck( const char *rawdn, char *s, int flags, int read_stateinfo )
( 0 != ( flags & SLAPI_STR2ENTRY_REMOVEDUPVALS ));
Slapi_Value *value = 0;
CSN *attributedeletioncsn= NULL;
+ CSNSet *valuecsnset= NULL;
CSN *maxcsn= NULL;
char *normdn = NULL;
int strict = 0;
@@ -764,7 +766,6 @@ str2entry_dupcheck( const char *rawdn, char *s, int flags, int read_stateinfo )
}
while ( (s = ldif_getline( &next )) != NULL )
{
- CSNSet *valuecsnset= NULL;
int value_state= VALUE_NOTFOUND;
int attr_state= VALUE_NOTFOUND;
int freeval = 0;
@@ -819,6 +820,7 @@ str2entry_dupcheck( const char *rawdn, char *s, int flags, int read_stateinfo )
"str2entry_dupcheck: Invalid DN: %s\n", rawdn);
slapi_entry_free( e );
if (freeval) slapi_ch_free_string(&bvvalue.bv_val);
+ csnset_free(&valuecsnset);
csn_free(&attributedeletioncsn);
csn_free(&maxcsn);
return NULL;
@@ -841,6 +843,7 @@ str2entry_dupcheck( const char *rawdn, char *s, int flags, int read_stateinfo )
"str2entry_dupcheck: Invalid DN: %s\n", rawdn);
slapi_entry_free( e );
if (freeval) slapi_ch_free_string(&bvvalue.bv_val);
+ csnset_free(&valuecsnset);
csn_free(&attributedeletioncsn);
csn_free(&maxcsn);
return NULL;
@@ -954,6 +957,7 @@ str2entry_dupcheck( const char *rawdn, char *s, int flags, int read_stateinfo )
if (freeval) slapi_ch_free_string(&bvvalue.bv_val);
csn_free(&attributedeletioncsn);
csn_free(&maxcsn);
+ csnset_free(&valuecsnset);
return NULL;
}
for ( i = 0; i < nattrs; i++ )
@@ -1285,6 +1289,7 @@ free_and_return:
}
slapi_ch_free((void **) &dyn_attrs );
if (value) slapi_value_free(&value);
+ csnset_free(&valuecsnset);
csn_free(&attributedeletioncsn);
csn_free(&maxcsn);
diff --git a/ldap/servers/slapd/schema.c b/ldap/servers/slapd/schema.c
index 1768c7e..258f6eb 100644
--- a/ldap/servers/slapd/schema.c
+++ b/ldap/servers/slapd/schema.c
@@ -3083,11 +3083,11 @@ read_oc_ldif ( const char *input, struct objclass **oc, char *errorbuf,
pnew_oc->oc_kind = kind;
*oc = pnew_oc;
+
return read_oc_ldif_return( LDAP_SUCCESS, pOcOid, psbOcName, pOcSup,
oc_origins, num_origins, pOcDesc );
}
-
static void
oc_free( struct objclass **ocp )
{
@@ -3969,7 +3969,9 @@ load_schema_dse(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *ignored,
if ( LDAP_SUCCESS != (*returncode = read_oc_ldif(s, &oc, returntext,
SLAPI_DSE_RETURNTEXT_SIZE, flags,
primary_file /* force user defined? */,
- schema_ds4x_compat))) {
+ schema_ds4x_compat)))
+ {
+ oc_free( &oc );
break;
}
if (flags & DSE_SCHEMA_NO_LOAD)
diff --git a/ldap/servers/slapd/snmp_collator.c b/ldap/servers/slapd/snmp_collator.c
index aeac7ae..b3d072a 100644
--- a/ldap/servers/slapd/snmp_collator.c
+++ b/ldap/servers/slapd/snmp_collator.c
@@ -738,8 +738,10 @@ snmp_update_cache_stats()
/* set the cache hits/cache entries info */
be = slapi_get_first_backend(&cookie);
- if (!be)
+ if (!be){
+ slapi_ch_free ((void **) &cookie);
return;
+ }
be_next = slapi_get_next_backend(cookie);
diff --git a/ldap/servers/slapd/tools/ldclt/data.c b/ldap/servers/slapd/tools/ldclt/data.c
index e0eac55..f6dd4ef 100644
--- a/ldap/servers/slapd/tools/ldclt/data.c
+++ b/ldap/servers/slapd/tools/ldclt/data.c
@@ -335,6 +335,8 @@ exit:
#ifdef _WIN32
if (findPath) free (findPath);
#endif
+ close(fd);
+
return rc;
}
diff --git a/ldap/servers/slapd/tools/mmldif.c b/ldap/servers/slapd/tools/mmldif.c
index 6d62338..fb97129 100644
--- a/ldap/servers/slapd/tools/mmldif.c
+++ b/ldap/servers/slapd/tools/mmldif.c
@@ -735,6 +735,7 @@ readrec(edfFILE * edf1, attrib1_t ** attrib)
attrib1_t * newlist = NULL;
attrib1_t * a;
int ignore_rec = FALSE;
+ int free_it = 0;
*attrib = NULL;
if (edf1->end) {
@@ -759,6 +760,9 @@ readrec(edfFILE * edf1, attrib1_t ** attrib)
/* that's for the case where the file */
/* has a trailing blank line */
freefreelist(freelist);
+ if(free_it){
+ freefreelist(att);
+ }
return IDDS_MM_EOF;
}
break; /* return */
@@ -790,9 +794,11 @@ readrec(edfFILE * edf1, attrib1_t ** attrib)
continue;
if (!freelist) {
att = (attrib1_t *)malloc(sizeof(attrib1_t));
+ free_it = 1;
} else {
att = freelist;
freelist = freelist->next;
+ free_it = 0;
}
att->namelen = vptr-line;
diff --git a/ldap/servers/snmp/main.c b/ldap/servers/snmp/main.c
index 0d1fb25..78d4814 100644
--- a/ldap/servers/snmp/main.c
+++ b/ldap/servers/snmp/main.c
@@ -322,6 +322,9 @@ load_config(char *conf_path)
/* load agentx-master setting */
p = p + 13;
if ((p = strtok(p, " \t\n")) != NULL) {
+ if (agentx_master){
+ free(agentx_master);
+ }
if ((agentx_master = (char *) malloc(strlen(p) + 1)) != NULL)
strcpy(agentx_master, p);
}
diff --git a/lib/ldaputil/dbconf.c b/lib/ldaputil/dbconf.c
index 746afc9..e6de3b7 100644
--- a/lib/ldaputil/dbconf.c
+++ b/lib/ldaputil/dbconf.c
@@ -263,7 +263,10 @@ static int dbconf_parse_propval (char *buf, char *ptr,
/* Success - we have prop & val */
propval = (DBPropVal_t *)malloc(sizeof(DBPropVal_t));
- if (!propval) return LDAPU_ERR_OUT_OF_MEMORY;
+ if (!propval){
+ if (encval) free(val);
+ return LDAPU_ERR_OUT_OF_MEMORY;
+ }
memset((void *)propval, 0, sizeof(DBPropVal_t));
propval->prop = strdup(prop);
propval->val = val ? strdup(val) : 0;
@@ -273,7 +276,7 @@ static int dbconf_parse_propval (char *buf, char *ptr,
return LDAPU_ERR_OUT_OF_MEMORY;
}
- if (encval) free(val); /* val was allocated by dbconf_decodeval */
+ if(encval) free(val); /* val was allocated by dbconf_decodeval */
insert_dbinfo_propval(db_info, propval);
return LDAPU_SUCCESS;
diff --git a/lib/libaccess/register.cpp b/lib/libaccess/register.cpp
index 595c1f2..798a926 100644
--- a/lib/libaccess/register.cpp
+++ b/lib/libaccess/register.cpp
@@ -793,6 +793,7 @@ ACL_AttrGetterRegister(NSErr_t *errp, const char *attr, ACLAttrGetterFn_t fn,
if (*hep == 0) { /* New entry */
PR_INIT_CLIST(&getter->list);
if (NULL == PR_HashTableAdd(ACLAttrGetterHash, attr, (void *)getter)) {
+ FREE(getter);
ACL_CritExit();
return -1;
}
diff --git a/lib/libadmin/error.c b/lib/libadmin/error.c
index c0a1f80..4ba9803 100644
--- a/lib/libadmin/error.c
+++ b/lib/libadmin/error.c
@@ -126,10 +126,13 @@ NSAPI_PUBLIC void output_alert(int type, char *info, char *details, int wait)
fprintf(stdout, "%s:%s\\n%s", error_headers[type], info, wrapped);
if(type==FILE_ERROR || type==SYSTEM_ERROR) {
err = get_error();
- if(err != 0)
+ if(err != 0){
+ char *err_str = verbose_error();
fprintf(stdout,
"\\n\\nThe system returned error number %d, "
- "which is %s.", err, verbose_error());
+ "which is %s.", err, err_str);
+ FREE(err_str);
+ }
}
fprintf(stdout, "\");");
--
1.8.1.4