From e8ca2abed76b550fd3baddcfb17f2c9a630d6b71 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 14 Dec 2007 01:40:42 +0000 Subject: [PATCH] 2278. [bug] win32: handle the case where Windows returns no searchlist or DNS suffix. [RT #17354] --- CHANGES | 3 +++ lib/lwres/win32/lwconfig.c | 18 ++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index 68e14d78b3..8e261d30b4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2278. [bug] win32: handle the case where Windows returns no + searchlist or DNS suffix. [RT #17354] + 2277. [bug] Empty zone names were not correctly being caught at in the post parse checks. [RT #17357] diff --git a/lib/lwres/win32/lwconfig.c b/lib/lwres/win32/lwconfig.c index 10e9946a98..c6fb6331e4 100644 --- a/lib/lwres/win32/lwconfig.c +++ b/lib/lwres/win32/lwconfig.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: lwconfig.c,v 1.6 2007/06/18 23:47:51 tbox Exp $ */ +/* $Id: lwconfig.c,v 1.7 2007/12/14 01:40:42 marka Exp $ */ /* * We do this so that we may incorporate everything in the main routines @@ -51,7 +51,6 @@ get_win32_searchlist(lwres_context_t *ctx) { char searchlist[MAX_PATH]; DWORD searchlen = MAX_PATH; char *cp; - int idx; lwres_conf_t *confdata; REQUIRE(ctx != NULL); @@ -69,19 +68,17 @@ get_win32_searchlist(lwres_context_t *ctx) { keyFound = FALSE; RegCloseKey(hKey); } - - confdata->searchnxt = 0; - idx = 0; + confdata->searchnxt = 0; cp = strtok((char *)searchlist, ", \0"); while (cp != NULL) { if (confdata->searchnxt == LWRES_CONFMAXSEARCH) break; if (strlen(cp) <= MAX_PATH && strlen(cp) > 0) { - confdata->search[idx] = lwres_strdup(ctx, cp); + confdata->search[confdata->searchnxt] = lwres_strdup(ctx, cp); + if (confdata->search[confdata->searchnxt] != NULL) + confdata->searchnxt++; } - idx++; - confdata->searchnxt++; cp = strtok(NULL, ", \0"); } } @@ -125,13 +122,14 @@ lwres_conf_parse(lwres_context_t *ctx, const char *filename) { get_win32_searchlist(ctx); /* Use only if there is no search list */ - if (confdata->searchnxt == 0) { + if (confdata->searchnxt == 0 && strlen(FixedInfo->DomainName) > 0) { confdata->domainname = lwres_strdup(ctx, FixedInfo->DomainName); if (confdata->domainname == NULL) { GlobalFree(FixedInfo); return (LWRES_R_FAILURE); } - } + } else + confdata->domainname = NULL; /* Get the list of nameservers */ pIPAddr = &FixedInfo->DnsServerList;