Module: kamailio
Branch: master
Commit: 87edc25fd458be80ed5cfec21fbe2940a8f9c17f
URL: 
https://github.com/kamailio/kamailio/commit/87edc25fd458be80ed5cfec21fbe2940a8f9c17f

Author: Vitaliy Aleksandrov <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2017-04-18T14:27:12+02:00

ldap: fix memory leak that happens after calling  ldap_result_next()

  - GH #1071

---

Modified: src/modules/ldap/ldap_api_fn.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/87edc25fd458be80ed5cfec21fbe2940a8f9c17f.diff
Patch: 
https://github.com/kamailio/kamailio/commit/87edc25fd458be80ed5cfec21fbe2940a8f9c17f.patch

---

diff --git a/src/modules/ldap/ldap_api_fn.c b/src/modules/ldap/ldap_api_fn.c
index 05b4119..d95d1cc 100644
--- a/src/modules/ldap/ldap_api_fn.c
+++ b/src/modules/ldap/ldap_api_fn.c
@@ -39,6 +39,7 @@
 #include "ld_session.h"
 
 static LDAP* last_ldap_handle = NULL;
+static LDAPMessage* last_ldap_result_holder = NULL;
 static LDAPMessage* last_ldap_result = NULL;
 
 int get_connected_ldap_session(
@@ -111,9 +112,10 @@ int get_connected_ldap_session(char* _lds_name, struct 
ld_session** _lds)
                }
                else
                {
-                       if (last_ldap_result != NULL)
+                       if (last_ldap_result_holder != NULL)
                        {
-                               ldap_msgfree(last_ldap_result);
+                               ldap_msgfree(last_ldap_result_holder);
+                               last_ldap_result_holder = NULL;
                                last_ldap_result = NULL;
                        }
                        ldap_disconnect(_lds_name);
@@ -412,9 +414,10 @@ int lds_search(
        /*
         * free last_ldap_result
         */
-        if (last_ldap_result != NULL) {
-                ldap_msgfree(last_ldap_result);
-                last_ldap_result = NULL;
+        if (last_ldap_result_holder != NULL) {
+                ldap_msgfree(last_ldap_result_holder);
+                last_ldap_result_holder = NULL;
+               last_ldap_result = NULL;
         }
 
        
@@ -445,7 +448,7 @@ int lds_search(
                NULL,
                &lds->client_search_timeout,
                0,
-               &last_ldap_result);
+               &last_ldap_result_holder);
 
 #ifdef LDAP_PERF
        gettimeofday(&after_search, NULL);
@@ -458,10 +461,10 @@ int lds_search(
 
        if (*_ld_error != LDAP_SUCCESS)
        {
-               if (last_ldap_result != NULL)
+               if (last_ldap_result_holder != NULL)
                {
-                       ldap_msgfree(last_ldap_result);
-                       last_ldap_result = NULL;
+                       ldap_msgfree(last_ldap_result_holder);
+                       last_ldap_result_holder = NULL;
                }
 
                if (LDAP_API_ERROR(*_ld_error))
@@ -476,13 +479,15 @@ int lds_search(
        }
 
        last_ldap_handle = lds->handle;
-       *_ld_result_count = ldap_count_entries(lds->handle, last_ldap_result);
+       *_ld_result_count = ldap_count_entries(lds->handle, 
last_ldap_result_holder);
        if (*_ld_result_count < 0)
        {
                LM_DBG("[%s]: ldap_count_entries failed\n", _lds_name);
                return -1;
        }
 
+       last_ldap_result = last_ldap_result_holder;
+
        return 0;
 }
 


_______________________________________________
Kamailio (SER) - Development Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to