Author: abartlet Date: 2006-05-07 15:05:32 +0000 (Sun, 07 May 2006) New Revision: 15492
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15492 Log: Without this patch, the LDAP client libs will call abort() in ldap_get_values_len, because they were handed a NULL msgs pointer, for example in ads_pull_sid(). This occurs when the AD server fails at the connect stage. (The toubled AD server is actually Samba4 in my example). Andrew Bartlett Modified: branches/SAMBA_3_0/source/libads/ldap_utils.c Changeset: Modified: branches/SAMBA_3_0/source/libads/ldap_utils.c =================================================================== --- branches/SAMBA_3_0/source/libads/ldap_utils.c 2006-05-07 15:02:27 UTC (rev 15491) +++ branches/SAMBA_3_0/source/libads/ldap_utils.c 2006-05-07 15:05:32 UTC (rev 15492) @@ -48,16 +48,17 @@ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); } - while (count--) { - *res = NULL; - status = ads_do_search_all(ads, bp, scope, expr, attrs, res); - if (ADS_ERR_OK(status)) { - DEBUG(5,("Search for %s gave %d replies\n", - expr, ads_count_replies(ads, *res))); - SAFE_FREE(bp); - return status; - } + *res = NULL; + status = ads_do_search_all(ads, bp, scope, expr, attrs, res); + if (ADS_ERR_OK(status)) { + DEBUG(5,("Search for %s gave %d replies\n", + expr, ads_count_replies(ads, *res))); + SAFE_FREE(bp); + return status; + } + while (--count) { + if (*res) ads_msgfree(ads, *res); *res = NULL; @@ -79,6 +80,15 @@ SAFE_FREE(bp); return status; } + + *res = NULL; + status = ads_do_search_all(ads, bp, scope, expr, attrs, res); + if (ADS_ERR_OK(status)) { + DEBUG(5,("Search for %s gave %d replies\n", + expr, ads_count_replies(ads, *res))); + SAFE_FREE(bp); + return status; + } } SAFE_FREE(bp);