Răsfoiți Sursa

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)
11771 - Resource leak (entrywsi.c)
11772 - Resource leak (entrywsi.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!)
Mark Reynolds 12 ani în urmă
părinte
comite
c99d4c0741

+ 1 - 0
ldap/servers/plugins/acl/acl.h

@@ -870,6 +870,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);

+ 3 - 4
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 */

+ 14 - 15
ldap/servers/plugins/acl/aclparse.c

@@ -1970,14 +1970,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;
@@ -2009,22 +2008,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 *)) ); 
@@ -2033,7 +2030,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 */
@@ -2042,10 +2038,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;
 }
 
 /*

+ 7 - 0
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,

+ 7 - 0
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);
     }
 }
 

+ 6 - 0
ldap/servers/plugins/pam_passthru/pam_ptconfig.c

@@ -602,6 +602,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);
@@ -688,6 +689,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;
             }
         }
@@ -696,9 +698,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);

+ 1 - 2
ldap/servers/plugins/replication/repl5_replica_config.c

@@ -1847,7 +1847,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;
@@ -1890,7 +1890,6 @@ check_replicas_are_done_cleaning(cleanruv_data *data )
             interval = 14400;
         }
     }
-    slapi_ch_free_string(&csnstr);
     slapi_ch_free_string(&filter);
 }
 

+ 1 - 0
ldap/servers/plugins/replication/windows_inc_protocol.c

@@ -1024,6 +1024,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" );
 }
 

+ 14 - 0
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;

+ 1 - 0
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;
 		       }

+ 7 - 3
ldap/servers/slapd/back-ldbm/dblayer.c

@@ -1980,7 +1980,7 @@ dblayer_get_id2entry_size(ldbm_instance *inst)
     char *id2entry_file = NULL;
     PRFileInfo64 info;
     int rc;
-    char inst_dir[MAXPATHLEN], *inst_dirp;
+    char inst_dir[MAXPATHLEN], *inst_dirp = NULL;
 
     if (NULL == inst) {
         return 0;
@@ -1989,6 +1989,9 @@ 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);
+    if(inst_dirp != inst_dir){
+        slapi_ch_free_string(&inst_dirp);
+    }
     rc = PR_GetFileInfo64(id2entry_file, &info);
     slapi_ch_free_string(&id2entry_file);
     if (rc) {
@@ -3160,6 +3163,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);
@@ -3175,8 +3181,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,

+ 6 - 1
ldap/servers/slapd/entry.c

@@ -574,6 +574,7 @@ str2entry_fast( const char *rawdn, const Slapi_RDN *srdn, char *s, int flags, in
 	}
 
 done:
+	csnset_free(&valuecsnset);
 	csn_free(&attributedeletioncsn);
 	csn_free(&maxcsn);
 	LDAPDebug( LDAP_DEBUG_TRACE, "<= str2entry_fast 0x%x\n",
@@ -766,6 +767,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;
@@ -786,7 +788,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;
@@ -842,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;
@@ -864,6 +866,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;
@@ -977,6 +980,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++ )
@@ -1319,6 +1323,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);
 

+ 35 - 27
ldap/servers/slapd/entrywsi.c

@@ -447,18 +447,21 @@ entry_add_present_values_wsi(Slapi_Entry *e, const char *type, struct berval **b
 	}
 	return retVal;
 }
+
 static int
 entry_add_present_values_wsi_single_valued(Slapi_Entry *e, const char *type, struct berval **bervals, const CSN *csn, int urp, long flags)
 {
 	int retVal= LDAP_SUCCESS;
 	Slapi_Value **valuestoadd = NULL;
+
 	valuearray_init_bervalarray(bervals,&valuestoadd); /* JCM SLOW FUNCTION */
 	if(!valuearray_isempty(valuestoadd))
 	{
 		Slapi_Attr *a= NULL;
 		long a_flags_orig;
 		int attr_state= entry_attr_find_wsi(e, type, &a);
-        	a_flags_orig = a->a_flags;
+
+		a_flags_orig = a->a_flags;
 		a->a_flags |= flags;
 		/* Check if the type of the to-be-added values has DN syntax or not. */
 		if (slapi_attr_is_dn_syntax_attr(a)) {
@@ -476,7 +479,6 @@ entry_add_present_values_wsi_single_valued(Slapi_Entry *e, const char *type, str
 			valuearray_update_csn (valuestoadd,CSN_TYPE_VALUE_UPDATED,csn);
 			valueset_add_valuearray_ext(&a->a_present_values, valuestoadd, SLAPI_VALUE_FLAG_PASSIN);
 			slapi_ch_free ( (void **)&valuestoadd );
-
 			/*
 			 * Now delete non-RDN values from a->a_present_values; and
 			 * restore possible RDN values from a->a_deleted_values
@@ -489,16 +491,16 @@ entry_add_present_values_wsi_single_valued(Slapi_Entry *e, const char *type, str
 			Slapi_Value **deletedvalues= NULL;
 			switch(attr_state)
 			{
-			case ATTRIBUTE_PRESENT:
-				/* The attribute is already on the present list */
-				break;
-			case ATTRIBUTE_DELETED:
-				/* Move the deleted attribute onto the present list */
-				entry_deleted_attribute_to_present_attribute(e, a);
-				break;
-			case ATTRIBUTE_NOTFOUND:
-				/* No-op - attribute was initialized & added to entry above */
-				break;
+				case ATTRIBUTE_PRESENT:
+					/* The attribute is already on the present list */
+					break;
+				case ATTRIBUTE_DELETED:
+					/* Move the deleted attribute onto the present list */
+					entry_deleted_attribute_to_present_attribute(e, a);
+					break;
+				case ATTRIBUTE_NOTFOUND:
+					/* No-op - attribute was initialized & added to entry above */
+					break;
 			}
 			/* Check if any of the values to be added are on the deleted list */
 			valueset_remove_valuearray(&a->a_deleted_values,
@@ -522,24 +524,28 @@ entry_add_present_values_wsi_single_valued(Slapi_Entry *e, const char *type, str
 			}
 			valuearray_update_csn(valuestoadd,CSN_TYPE_VALUE_UPDATED,csn);
 			retVal= attr_add_valuearray(a, valuestoadd, slapi_entry_get_dn_const(e));
-			valuearray_free(&valuestoadd);
 		}
 		a->a_flags = a_flags_orig;
 	}
+	valuearray_free(&valuestoadd);
+
 	return(retVal);
 }
+
 static int
 entry_add_present_values_wsi_multi_valued(Slapi_Entry *e, const char *type, struct berval **bervals, const CSN *csn, int urp, long flags)
 {
 	int retVal= LDAP_SUCCESS;
 	Slapi_Value **valuestoadd = NULL;
+
 	valuearray_init_bervalarray(bervals,&valuestoadd); /* JCM SLOW FUNCTION */
 	if(!valuearray_isempty(valuestoadd))
 	{
-		Slapi_Attr *a= NULL;
+		Slapi_Attr *a = NULL;
 		long a_flags_orig;
-		int attr_state= entry_attr_find_wsi(e, type, &a);
-	        a_flags_orig = a->a_flags;
+		int attr_state = entry_attr_find_wsi(e, type, &a);
+
+		a_flags_orig = a->a_flags;
 		a->a_flags |= flags;
 		/* Check if the type of the to-be-added values has DN syntax or not. */
 		if (slapi_attr_is_dn_syntax_attr(a)) {
@@ -577,18 +583,19 @@ entry_add_present_values_wsi_multi_valued(Slapi_Entry *e, const char *type, stru
 		else
 		{
 			Slapi_Value **deletedvalues= NULL;
+
 			switch(attr_state)
 			{
-			case ATTRIBUTE_PRESENT:
-				/* The attribute is already on the present list */
-				break;
-			case ATTRIBUTE_DELETED:
-				/* Move the deleted attribute onto the present list */
-				entry_deleted_attribute_to_present_attribute(e, a);
-				break;
-			case ATTRIBUTE_NOTFOUND:
-				/* No-op - attribute was initialized & added to entry above */
-				break;
+				case ATTRIBUTE_PRESENT:
+					/* The attribute is already on the present list */
+					break;
+				case ATTRIBUTE_DELETED:
+					/* Move the deleted attribute onto the present list */
+					entry_deleted_attribute_to_present_attribute(e, a);
+					break;
+				case ATTRIBUTE_NOTFOUND:
+					/* No-op - attribute was initialized & added to entry above */
+					break;
 			}
 			/* Check if any of the values to be added are on the deleted list */
 			valueset_remove_valuearray(&a->a_deleted_values,
@@ -612,10 +619,11 @@ entry_add_present_values_wsi_multi_valued(Slapi_Entry *e, const char *type, stru
 			}
 			valuearray_update_csn(valuestoadd,CSN_TYPE_VALUE_UPDATED,csn);
 			retVal= attr_add_valuearray(a, valuestoadd, slapi_entry_get_dn_const(e));
-			valuearray_free(&valuestoadd);
 		}
 		a->a_flags = a_flags_orig;
 	}
+	valuearray_free(&valuestoadd);
+
 	return(retVal);
 }
 

+ 4 - 1
ldap/servers/slapd/schema.c

@@ -3238,6 +3238,7 @@ 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, pOcDesc );
 }
 
@@ -4750,7 +4751,9 @@ load_schema_dse(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *ignored,
             if ( LDAP_SUCCESS != (*returncode = parse_oc_str(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)

+ 3 - 1
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);
 

+ 2 - 0
ldap/servers/slapd/tools/ldclt/data.c

@@ -335,6 +335,8 @@ exit:
 #ifdef _WIN32
   if (findPath) free (findPath);
 #endif
+  close(fd);
+
   return rc;
 }
 

+ 6 - 0
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;
 		

+ 3 - 0
ldap/servers/snmp/main.c

@@ -311,6 +311,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);
             }

+ 5 - 2
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;

+ 1 - 0
lib/libaccess/register.cpp

@@ -791,6 +791,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;
         }

+ 5 - 2
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, "\");");