diff options
author | Tomas Babej <tbabej@redhat.com> | 2014-04-01 09:20:09 +0200 |
---|---|---|
committer | Martin Kosek <mkosek@redhat.com> | 2014-04-08 14:23:18 +0200 |
commit | 8d2b3fe7a727b0b618d78b9e4be29ebf4d2586a7 (patch) | |
tree | e4df908dd4c79c31496b0b903d13041a4847e2b5 /daemons | |
parent | 5a0d52b9393a2a4f154aca617855cba3f83e989b (diff) | |
download | freeipa-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.c | 16 |
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); } |