Dominick Meglio host file path discovery patch for windows

pull/1/head
Daniel Stenberg 20 years ago
parent db2efff373
commit 2bf866b0ce
  1. 14
      CHANGES
  2. 21
      ares_gethostbyaddr.c
  3. 22
      ares_gethostbyname.c
  4. 4
      ares_private.h

@ -1,5 +1,19 @@
Changelog for the c-ares project
* September 26
- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is
located in a static location. It assumed
C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact,
the location of the HOSTS file can be changed via a registry setting.
There is a key called DatabasePath which specifies the path to the HOSTS
file:
http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx
The patch will make c-ares correctly consult the registry for the location
of this file.
* August 29
- Gisle Vanem fixed the MSVC build files.

@ -150,12 +150,23 @@ static int file_lookup(struct in_addr *addr, struct hostent **host)
char PATH_HOSTS[MAX_PATH];
if (IsNT) {
GetSystemDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, PATH_HOSTS_NT);
} else {
char tmp[MAX_PATH];
HKEY hkeyHosts;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
== ERROR_SUCCESS)
{
DWORD dwLength = MAX_PATH;
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, tmp,
&dwLength);
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
}
else
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, PATH_HOSTS_9X);
}
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
extern const char *_w32_GetHostsFile (void);

@ -220,15 +220,25 @@ static int file_lookup(const char *name, struct hostent **host)
int status;
#ifdef WIN32
char PATH_HOSTS[MAX_PATH];
if (IsNT) {
GetSystemDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, PATH_HOSTS_NT);
} else {
char tmp[MAX_PATH];
HKEY hkeyHosts;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
== ERROR_SUCCESS)
{
DWORD dwLength = MAX_PATH;
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, tmp,
&dwLength);
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
}
else
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, PATH_HOSTS_9X);
}
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
extern const char *_w32_GetHostsFile (void);

@ -46,8 +46,8 @@
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
#define NAMESERVER "NameServer"
#define DHCPNAMESERVER "DhcpNameServer"
#define PATH_HOSTS_NT "\\drivers\\etc\\hosts"
#define PATH_HOSTS_9X "\\hosts"
#define DATABASEPATH "DatabasePath"
#define WIN_PATH_HOSTS "\\hosts"
#elif defined(WATT32)

Loading…
Cancel
Save