summaryrefslogtreecommitdiffstats
path: root/daemons
diff options
context:
space:
mode:
authorTomas Babej <tbabej@redhat.com>2014-04-01 09:20:09 +0200
committerMartin Kosek <mkosek@redhat.com>2014-04-08 14:23:18 +0200
commit8d2b3fe7a727b0b618d78b9e4be29ebf4d2586a7 (patch)
treee4df908dd4c79c31496b0b903d13041a4847e2b5 /daemons
parent5a0d52b9393a2a4f154aca617855cba3f83e989b (diff)
downloadfreeipa-8d2b3fe7a727b0b618d78b9e4be29ebf4d2586a7.tar.gz
freeipa-8d2b3fe7a727b0b618d78b9e4be29ebf4d2586a7.tar.xz
freeipa-8d2b3fe7a727b0b618d78b9e4be29ebf4d2586a7.zip
ipa-range-check: Fix memory leaks when freeing range object
When cleaning the range_info struct, simple free of the struct is not enough, we have to free contents of char pointers in the struct as well. https://fedorahosted.org/freeipa/ticket/4276
Diffstat (limited to 'daemons')
-rw-r--r--daemons/ipa-slapi-plugins/ipa-range-check/ipa_range_check.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/daemons/ipa-slapi-plugins/ipa-range-check/ipa_range_check.c b/daemons/ipa-slapi-plugins/ipa-range-check/ipa_range_check.c
index 391e2259b..4f0640eaf 100644
--- a/daemons/ipa-slapi-plugins/ipa-range-check/ipa_range_check.c
+++ b/daemons/ipa-slapi-plugins/ipa-range-check/ipa_range_check.c
@@ -78,6 +78,14 @@ struct range_info {
uint32_t secondary_base_rid;
};
+static void free_range_info(struct range_info *range) {
+ if (range != NULL) {
+ slapi_ch_free_string(&(range->name));
+ slapi_ch_free_string(&(range->domain_id));
+ free(range);
+ }
+}
+
static int slapi_entry_to_range_info(struct slapi_entry *entry,
struct range_info **_range)
{
@@ -131,7 +139,7 @@ static int slapi_entry_to_range_info(struct slapi_entry *entry,
done:
if (ret != 0) {
- free(range);
+ free_range_info(range);
}
return ret;
@@ -388,7 +396,7 @@ static int ipa_range_check_pre_op(Slapi_PBlock *pb, int modtype)
}
no_overlap = ranges_overlap(new_range, old_range);
- free(old_range);
+ free_range_info(old_range);
old_range = NULL;
if (no_overlap != 0) {
ret = LDAP_CONSTRAINT_VIOLATION;
@@ -426,8 +434,8 @@ done:
slapi_free_search_results_internal(search_pb);
slapi_pblock_destroy(search_pb);
slapi_sdn_free(&dn);
- free(old_range);
- free(new_range);
+ free_range_info(old_range);
+ free_range_info(new_range);
if (free_entry) {
slapi_entry_free(entry);
}