|
@@ -39,6 +39,7 @@
|
|
#include "ld_session.h"
|
|
#include "ld_session.h"
|
|
|
|
|
|
static LDAP* last_ldap_handle = NULL;
|
|
static LDAP* last_ldap_handle = NULL;
|
|
|
|
+static LDAPMessage* last_ldap_result_holder = NULL;
|
|
static LDAPMessage* last_ldap_result = NULL;
|
|
static LDAPMessage* last_ldap_result = NULL;
|
|
|
|
|
|
int get_connected_ldap_session(
|
|
int get_connected_ldap_session(
|
|
@@ -111,9 +112,10 @@ int get_connected_ldap_session(char* _lds_name, struct ld_session** _lds)
|
|
}
|
|
}
|
|
else
|
|
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;
|
|
last_ldap_result = NULL;
|
|
}
|
|
}
|
|
ldap_disconnect(_lds_name);
|
|
ldap_disconnect(_lds_name);
|
|
@@ -412,9 +414,10 @@ int lds_search(
|
|
/*
|
|
/*
|
|
* free last_ldap_result
|
|
* 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,
|
|
NULL,
|
|
&lds->client_search_timeout,
|
|
&lds->client_search_timeout,
|
|
0,
|
|
0,
|
|
- &last_ldap_result);
|
|
|
|
|
|
+ &last_ldap_result_holder);
|
|
|
|
|
|
#ifdef LDAP_PERF
|
|
#ifdef LDAP_PERF
|
|
gettimeofday(&after_search, NULL);
|
|
gettimeofday(&after_search, NULL);
|
|
@@ -458,10 +461,10 @@ int lds_search(
|
|
|
|
|
|
if (*_ld_error != LDAP_SUCCESS)
|
|
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))
|
|
if (LDAP_API_ERROR(*_ld_error))
|
|
@@ -476,13 +479,15 @@ int lds_search(
|
|
}
|
|
}
|
|
|
|
|
|
last_ldap_handle = lds->handle;
|
|
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)
|
|
if (*_ld_result_count < 0)
|
|
{
|
|
{
|
|
LM_DBG("[%s]: ldap_count_entries failed\n", _lds_name);
|
|
LM_DBG("[%s]: ldap_count_entries failed\n", _lds_name);
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ last_ldap_result = last_ldap_result_holder;
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|