Author: tridge
Date: 2006-07-19 00:13:01 +0000 (Wed, 19 Jul 2006)
New Revision: 17124

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17124

Log:

fixed a bug which caused resolve_ads() to spin forever if one of the
DCs isn't resolvable in DNS. The fix is to leave that DC out of the
returned list of DCs. I think the original code intended that anyway,
just didn't quite get it right ('i' wasn't incremented in that code
path, so the loop didn't terminate)

Modified:
   branches/SAMBA_3_0/source/libsmb/namequery.c


Changeset:
Modified: branches/SAMBA_3_0/source/libsmb/namequery.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/namequery.c        2006-07-18 20:19:55 UTC 
(rev 17123)
+++ branches/SAMBA_3_0/source/libsmb/namequery.c        2006-07-19 00:13:01 UTC 
(rev 17124)
@@ -1051,16 +1051,18 @@
                return False;
        }
 
-       i = 0;
-       while ( i < numdcs ) {
+       *return_count = 0;
 
+       for (i=0;i<numdcs;i++) {
+               struct ip_service *r = &(*return_iplist)[*return_count];
+
                /* use the IP address from the SRV structure if we have one */
                if ( is_zero_ip( dcs[i].ip ) )
-                       (*return_iplist)[i].ip   = 
*interpret_addr2(dcs[i].hostname);
+                       r->ip   = *interpret_addr2(dcs[i].hostname);
                else
-                       (*return_iplist)[i].ip = dcs[i].ip;
+                       r->ip = dcs[i].ip;
 
-               (*return_iplist)[i].port = dcs[i].port;
+               r->port = dcs[i].port;
                        
                /* make sure it is a valid IP.  I considered checking the 
negative
                   connection cache, but this is the wrong place for it.  Maybe 
only
@@ -1069,15 +1071,11 @@
                   The standard reason for falling back to netbios lookups is 
that 
                   our DNS server doesn't know anything about the DC's   -- 
jerry */    
                           
-               if ( is_zero_ip((*return_iplist)[i].ip) )
-                       continue;               
-
-               i++;
+               if ( ! is_zero_ip(r->ip) )
+                       (*return_count)++;
        }
                
        TALLOC_FREE( dcs );
-               
-       *return_count = i;
                                
        return True;
 }

Reply via email to