From f2faf11204e3ef0bc6a92554761cb0f0ac2a1103 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 19 Jul 2006 00:13:01 +0000 Subject: r17124: 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) (This used to be commit d7ec9f3cc0439e9e0f4c98988b14ae2155d931b9) --- source3/libsmb/namequery.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'source3') diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 0172ab9514..f6dbe3c548 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -1051,16 +1051,18 @@ static BOOL resolve_ads(const char *name, int name_type, return False; } - i = 0; - while ( i < numdcs ) { + *return_count = 0; + + for (i=0;iip = *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 @@ static BOOL resolve_ads(const char *name, int name_type, 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; } -- cgit