From 0e1de2d773c274ae2981a69a05c61919b52143ee Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 26 Oct 2004 14:22:37 +0000 Subject: r3264: fix lmhosts lookup so that we don't say we found something when we really didn't (This used to be commit c7036f824627dc555185a52ed95d3e0132babcd8) --- source3/libsmb/namequery.c | 53 +++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 2e6842088a..cdbc7f758a 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -847,6 +847,7 @@ static BOOL resolve_lmhosts(const char *name, int name_type, pstring lmhost_name; int name_type2; struct in_addr return_ip; + BOOL result = False; *return_iplist = NULL; *return_count = 0; @@ -854,38 +855,42 @@ static BOOL resolve_lmhosts(const char *name, int name_type, DEBUG(3,("resolve_lmhosts: Attempting lmhosts lookup for name %s<0x%x>\n", name, name_type)); fp = startlmhosts(dyn_LMHOSTSFILE); - if(fp) { - while (getlmhostsent(fp, lmhost_name, &name_type2, - &return_ip)) { - if (!strequal(name, lmhost_name)) - continue; + if ( fp == NULL ) + return False; - if ((name_type2 != -1) && (name_type != name_type2)) - continue; + while (getlmhostsent(fp, lmhost_name, &name_type2, &return_ip)) + { - *return_iplist = (struct ip_service *) - realloc((*return_iplist), - sizeof(struct ip_service) * - ((*return_count)+1)); + if (!strequal(name, lmhost_name)) + continue; - if ((*return_iplist) == NULL) { - DEBUG(3,("resolve_lmhosts: malloc fail !\n")); - return False; - } + if ((name_type2 != -1) && (name_type != name_type2)) + continue; - (*return_iplist)[*return_count].ip = return_ip; - (*return_iplist)[*return_count].port = PORT_NONE; - *return_count += 1; + *return_iplist = (struct ip_service *)realloc((*return_iplist), + sizeof(struct ip_service) * ((*return_count)+1)); - /* Multiple names only for DC lookup */ - if (name_type != 0x1c) - break; + if ((*return_iplist) == NULL) { + DEBUG(3,("resolve_lmhosts: malloc fail !\n")); + return False; } - endlmhosts(fp); - return True; + + (*return_iplist)[*return_count].ip = return_ip; + (*return_iplist)[*return_count].port = PORT_NONE; + *return_count += 1; + + /* we found something */ + result = True; + + /* Multiple names only for DC lookup */ + if (name_type != 0x1c) + break; } - return False; + + endlmhosts(fp); + + return result; } -- cgit