1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

There is some memory corruption hidden somewhere in our winbind code. If I

could reproduce it, I would fix it, but for now just make sure we always
SAFE_FREE() and set our starting pointers to NULL.

Andrew Bartlett
This commit is contained in:
Andrew Bartlett 0001-01-01 00:00:00 +00:00
parent 6e5b084c20
commit c279e178bc

View File

@ -35,6 +35,8 @@ ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope
int count = 3; int count = 3;
char *bp; char *bp;
*res = NULL;
if (!ads->ld && if (!ads->ld &&
time(NULL) - ads->last_attempt < ADS_RECONNECT_TIME) { time(NULL) - ads->last_attempt < ADS_RECONNECT_TIME) {
return ADS_ERROR(LDAP_SERVER_DOWN); return ADS_ERROR(LDAP_SERVER_DOWN);
@ -42,15 +44,17 @@ ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope
bp = strdup(bind_path); bp = strdup(bind_path);
if (!bp) if (!bp) {
return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
}
while (count--) { while (count--) {
*res = NULL;
status = ads_do_search_all(ads, bp, scope, expr, attrs, res); status = ads_do_search_all(ads, bp, scope, expr, attrs, res);
if (ADS_ERR_OK(status)) { if (ADS_ERR_OK(status)) {
DEBUG(5,("Search for %s gave %d replies\n", DEBUG(5,("Search for %s gave %d replies\n",
expr, ads_count_replies(ads, *res))); expr, ads_count_replies(ads, *res)));
free(bp); SAFE_FREE(bp);
return status; return status;
} }
@ -72,11 +76,11 @@ ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope
DEBUG(1,("ads_search_retry: failed to reconnect (%s)\n", DEBUG(1,("ads_search_retry: failed to reconnect (%s)\n",
ads_errstr(status))); ads_errstr(status)));
ads_destroy(&ads); ads_destroy(&ads);
free(bp); SAFE_FREE(bp);
return status; return status;
} }
} }
free(bp); SAFE_FREE(bp);
if (!ADS_ERR_OK(status)) if (!ADS_ERR_OK(status))
DEBUG(1,("ads reopen failed after error %s\n", DEBUG(1,("ads reopen failed after error %s\n",