Browse Source

Ticket 47519 - memory leaks in access control

The leaks originally reported in the ticket could not be reproduced by
myself or the reporter.  This fix is completely theoretical, and solely
based on the valgrind report.

https://fedorahosted.org/389/ticket/47519

Reviewed by: richm(Thanks!)
Mark Reynolds 12 years ago
parent
commit
85bc265fd8

+ 3 - 3
ldap/servers/plugins/acl/acl.c

@@ -3710,8 +3710,7 @@ acl_copyEval_context ( struct acl_pblock *aclpb, aclEvalContext *src,
 
 
 			if ( aclpb) aclpb->aclpb_stat_num_copy_attrs++;
 			if ( aclpb) aclpb->aclpb_stat_num_copy_attrs++;
 
 
-			if ( dest->acle_attrEval[dd_slot].attrEval_name )
-				slapi_ch_free ( (void **) &dest->acle_attrEval[dd_slot].attrEval_name );
+			slapi_ch_free_string( &dest->acle_attrEval[dd_slot].attrEval_name);
 
 
 			dest->acle_attrEval[dd_slot].attrEval_name  = 
 			dest->acle_attrEval[dd_slot].attrEval_name  = 
 				slapi_ch_strdup ( src->acle_attrEval[i].attrEval_name );
 				slapi_ch_strdup ( src->acle_attrEval[i].attrEval_name );
@@ -3730,7 +3729,7 @@ acl_copyEval_context ( struct acl_pblock *aclpb, aclEvalContext *src,
 	}
 	}
 
 
 	dest->acle_numof_attrs = d_slot;
 	dest->acle_numof_attrs = d_slot;
-	dest->acle_attrEval[d_slot].attrEval_name  =  NULL;
+	slapi_ch_free_string( &dest->acle_attrEval[d_slot].attrEval_name);
 
 
 	if ( copy_attr_only )
 	if ( copy_attr_only )
 		return;
 		return;
@@ -3927,6 +3926,7 @@ acl__get_attrEval ( struct acl_pblock *aclpb, char *attr )
 			c_attrEval->attrEval_s_aciIndex = 0;
 			c_attrEval->attrEval_s_aciIndex = 0;
 		}
 		}
 		/* clean it before use */
 		/* clean it before use */
+		slapi_ch_free_string(&c_attrEval->attrEval_name);
 		c_attrEval->attrEval_name = slapi_ch_strdup ( attr );
 		c_attrEval->attrEval_name = slapi_ch_strdup ( attr );
 		aclpb->aclpb_curr_attrEval = c_attrEval;
 		aclpb->aclpb_curr_attrEval = c_attrEval;
 	}
 	}

+ 1 - 2
ldap/servers/plugins/acl/acl_ext.c

@@ -991,8 +991,7 @@ acl__done_aclpb ( struct acl_pblock *aclpb )
 	slapi_sdn_done ( aclpb->aclpb_authorization_sdn );
 	slapi_sdn_done ( aclpb->aclpb_authorization_sdn );
 	aclpb->aclpb_pblock = NULL;
 	aclpb->aclpb_pblock = NULL;
 
 
-	if ( aclpb->aclpb_search_base )
-		slapi_ch_free ( (void **) &aclpb->aclpb_search_base );
+	slapi_ch_free_string(&aclpb->aclpb_search_base );
 	for ( i=0; i < aclpb->aclpb_num_deny_handles; i++ )
 	for ( i=0; i < aclpb->aclpb_num_deny_handles; i++ )
 		aclpb->aclpb_deny_handles[i] = NULL;
 		aclpb->aclpb_deny_handles[i] = NULL;
 	aclpb->aclpb_num_deny_handles = 0;
 	aclpb->aclpb_num_deny_handles = 0;

+ 3 - 2
ldap/servers/plugins/acl/acllist.c

@@ -639,6 +639,7 @@ acllist_init_scan (Slapi_PBlock *pb, int scope, const char *base)
 	
 	
 	basedn = slapi_ch_strdup (base);
 	basedn = slapi_ch_strdup (base);
 	index = 0;
 	index = 0;
+	slapi_ch_free_string(&aclpb->aclpb_search_base);
 	aclpb->aclpb_search_base = slapi_ch_strdup ( base );
 	aclpb->aclpb_search_base = slapi_ch_strdup ( base );
 
 
 	while (basedn) {
 	while (basedn) {
@@ -651,7 +652,7 @@ acllist_init_scan (Slapi_PBlock *pb, int scope, const char *base)
 		                                 (IFP) __acllist_aciContainer_node_cmp);
 		                                 (IFP) __acllist_aciContainer_node_cmp);
 		if ( index >= aclpb_max_selected_acls -2 ) {
 		if ( index >= aclpb_max_selected_acls -2 ) {
 			aclpb->aclpb_handles_index[0] = -1;
 			aclpb->aclpb_handles_index[0] = -1;
-			slapi_ch_free ( (void **) &basedn);
+			slapi_ch_free_string(&basedn);
 			break;
 			break;
 		} else if ( NULL != root ) {
 		} else if ( NULL != root ) {
 			aclpb->aclpb_base_handles_index[index++] = root->acic_index;
 			aclpb->aclpb_base_handles_index[index++] = root->acic_index;
@@ -664,7 +665,7 @@ acllist_init_scan (Slapi_PBlock *pb, int scope, const char *base)
 			                  "Failed to find root for base: %s \n", basedn );
 			                  "Failed to find root for base: %s \n", basedn );
 		}
 		}
 		tmp = slapi_dn_parent ( basedn );
 		tmp = slapi_dn_parent ( basedn );
-		slapi_ch_free ( (void **) &basedn);
+		slapi_ch_free_string(&basedn);
 		basedn = tmp;
 		basedn = tmp;
 	}
 	}