Blob Blame History Raw
autofs-5.0.6 - Fix LDAP result leaks on error paths

From: Leonardo Chiquitto <leonardo.lists@gmail.com>

According to ldap_search_s(3), the result structure must be freed
with ldap_msgfree() even when the search function returned failure.
---

 CHANGELOG             |    1 +
 modules/lookup_ldap.c |    6 ++++++
 2 files changed, 7 insertions(+), 0 deletions(-)


diff --git a/CHANGELOG b/CHANGELOG
index 66b804f..dc91c25 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@
 - fix paged query more results check.
 - fix dumpmaps not reading maps.
 - fix result null check in read_one_map().
+- fix LDAP result leaks on error paths.
 
 28/06/2011 autofs-5.0.6
 -----------------------
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
index 22ff355..29323b2 100644
--- a/modules/lookup_ldap.c
+++ b/modules/lookup_ldap.c
@@ -347,6 +347,8 @@ static int get_query_dn(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt
 			error(logopt,
 			      MODPREFIX "query failed for %s: %s",
 			      query, ldap_err2string(rv));
+			if (result)
+				ldap_msgfree(result);
 			free(query);
 			return 0;
 		}
@@ -1573,6 +1575,8 @@ int lookup_read_master(struct master *master, time_t age, void *context)
 		error(logopt, MODPREFIX "query failed for %s: %s",
 		      query, ldap_err2string(rv));
 		unbind_ldap_connection(logging, ldap, ctxt);
+		if (result)
+			ldap_msgfree(result);
 		free(query);
 		return NSS_STATUS_NOTFOUND;
 	}
@@ -2586,6 +2590,8 @@ static int lookup_one(struct autofs_point *ap,
 	if ((rv != LDAP_SUCCESS) || !result) {
 		crit(ap->logopt, MODPREFIX "query failed for %s", query);
 		unbind_ldap_connection(ap->logopt, ldap, ctxt);
+		if (result)
+			ldap_msgfree(result);
 		free(query);
 		return CHE_FAIL;
 	}