summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2006-05-07 15:05:32 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:16:54 -0500
commit60493551d1fe928b6d4c8a25dc642a70d01bc7d5 (patch)
tree097eab72f7081ca7fbe22315b823752f0ccdea21
parentce5f1afc75d0ece2ebc06eb06ec404c2a8467480 (diff)
downloadsamba-60493551d1fe928b6d4c8a25dc642a70d01bc7d5.tar.gz
samba-60493551d1fe928b6d4c8a25dc642a70d01bc7d5.tar.bz2
samba-60493551d1fe928b6d4c8a25dc642a70d01bc7d5.zip
r15492: 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 (This used to be commit 221a6de7d028f5c9bb9da038650868582d44e7e5)
-rw-r--r--source3/libads/ldap_utils.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/source3/libads/ldap_utils.c b/source3/libads/ldap_utils.c
index 105fd2e5b9..58f1c20ad2 100644
--- a/source3/libads/ldap_utils.c
+++ b/source3/libads/ldap_utils.c
@@ -48,15 +48,16 @@ ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope
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);
@@ -79,6 +80,15 @@ ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope
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);