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);
 

Reply via email to