summaryrefslogtreecommitdiffstats
path: root/src/windows
diff options
context:
space:
mode:
authorSam Hartman <hartmans@mit.edu>2011-09-28 20:57:53 +0000
committerSam Hartman <hartmans@mit.edu>2011-09-28 20:57:53 +0000
commit17ffebf7ff813118f15d7346e0211089fe2e95f0 (patch)
tree9f88a39d8bbfd6589eb8cc9272fc759664eff953 /src/windows
parent0a13c0a9bfd1a7cff850d60851500aea34dffa6d (diff)
downloadkrb5-17ffebf7ff813118f15d7346e0211089fe2e95f0.tar.gz
krb5-17ffebf7ff813118f15d7346e0211089fe2e95f0.tar.xz
krb5-17ffebf7ff813118f15d7346e0211089fe2e95f0.zip
Windows fixes: enable DNS lookups; turn on KDC lookup by default
Moved wshelper from windows to util to fix build order dependencies. Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com> git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25273 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/Makefile.in2
-rw-r--r--src/windows/wshelper/Makefile.in64
-rw-r--r--src/windows/wshelper/dllmain.c264
-rw-r--r--src/windows/wshelper/gethna.c477
-rw-r--r--src/windows/wshelper/hesiod.c359
-rw-r--r--src/windows/wshelper/hesmailh.c87
-rw-r--r--src/windows/wshelper/hespwnam.c196
-rw-r--r--src/windows/wshelper/hesservb.c137
-rw-r--r--src/windows/wshelper/inetaton.c153
-rw-r--r--src/windows/wshelper/pwd.h15
-rw-r--r--src/windows/wshelper/res_comp.c361
-rw-r--r--src/windows/wshelper/res_init.c814
-rw-r--r--src/windows/wshelper/res_quer.c561
-rw-r--r--src/windows/wshelper/resource.h29
-rw-r--r--src/windows/wshelper/resource.rc64
-rw-r--r--src/windows/wshelper/string.rc29
-rw-r--r--src/windows/wshelper/ver.rc.inc57
-rw-r--r--src/windows/wshelper/wsh-int.h5
-rw-r--r--src/windows/wshelper/wshelp32.def33
-rw-r--r--src/windows/wshelper/wshelp64.def33
-rw-r--r--src/windows/wshelper/wshelper.def42
21 files changed, 1 insertions, 3781 deletions
diff --git a/src/windows/Makefile.in b/src/windows/Makefile.in
index 008cfa90f..ed3d1cffc 100644
--- a/src/windows/Makefile.in
+++ b/src/windows/Makefile.in
@@ -1,3 +1,3 @@
BUILDTOP=..
NO_OUTPRE=1
-SUBDIRS= wshelper lib leashdll cns gss gina ms2mit kfwlogon
+SUBDIRS= lib leashdll cns gss gina ms2mit kfwlogon
diff --git a/src/windows/wshelper/Makefile.in b/src/windows/wshelper/Makefile.in
deleted file mode 100644
index f573bf52e..000000000
--- a/src/windows/wshelper/Makefile.in
+++ /dev/null
@@ -1,64 +0,0 @@
-BUILDTOP=..\..
-
-DLL_NAME=wshelp32
-DEF_FILE=wshelp32.def
-
-# Use 64-bit DLL_NAME and DEF_FILE on 64-bit platforms
-!if ("$(CPU)" == "IA64") || ("$(CPU)" == "AMD64") || ("$(CPU)" == "ALPHA64")
-DLL_NAME=wshelp64
-DEF_FILE=wshelp64.def
-!endif
-
-
-OBJS= $(OUTPRE)dllmain.$(OBJEXT) \
- $(OUTPRE)gethna.$(OBJEXT) \
- $(OUTPRE)hesiod.$(OBJEXT) \
- $(OUTPRE)hesmailh.$(OBJEXT) \
- $(OUTPRE)hespwnam.$(OBJEXT) \
- $(OUTPRE)hesservb.$(OBJEXT) \
- $(OUTPRE)inetaton.$(OBJEXT) \
- $(OUTPRE)res_comp.$(OBJEXT) \
- $(OUTPRE)res_init.$(OBJEXT) \
- $(OUTPRE)res_quer.$(OBJEXT)
-
-RESFILE = $(OUTPRE)resource.res
-XOBJS = $(RESFILE)
-
-RCFLAGS = -I$(BUILDTOP)\include -I$(BUILDTOP) -DWSHELPER_LIB
-
-###From another project inside K 1.9:
-###VERSIONRC = $(BUILDTOP)\windows\version.rc
-###RCFLAGS=$(CPPFLAGS) -I$(top_srcdir) -D_WIN32 -DRES_ONLY
-
-
-# Set NODEBUG if building release instead of debug
-
-LOCALINCLUDES = -I$(BUILDTOP)\include
-
-WINLIBS = advapi32.lib user32.lib ws2_32.lib dnsapi.lib
-
-WINDLLFLAGS = /nologo /dll /incremental:no /release $(LOPTS)
-
-DEFINES = -DUNICODE -D_UNICODE
-!ifdef NODEBUG
-DEFINES = $(DEFINES)
-!else
-DEFINES = $(DEFINES) -DDBG
-!endif
-
-all-windows::
-all-windows:: $(OUTPRE)$(DLL_NAME).dll
-
-clean-windows::
- $(RM) $(OUTPRE)$(DLL_NAME).dll
-
-$(OUTPRE)$(DLL_NAME).dll: $(DEF_FILE) $(OBJS) $(XOBJS)
- link $(WINDLLFLAGS) -def:$(DEF_FILE) -out:$*.dll \
- $(OBJS) $(XOBJS) $(WINLIBS) $(SCLIB)
- $(_VC_MANIFEST_EMBED_DLL)
-
-$(OUTPRE)dllmain.$(OBJEXT): pwd.h
-$(OUTPRE)hespwnam.$(OBJEXT): pwd.h
-$(OUTPRE)dllmain.$(OBJEXT): wsh-int.h
-$(OUTPRE)res_init.$(OBJEXT): wsh-int.h
-$(RESFILE): resource.rc ../version.rc ../kerberos.ver
diff --git a/src/windows/wshelper/dllmain.c b/src/windows/wshelper/dllmain.c
deleted file mode 100644
index 5ae0016e6..000000000
--- a/src/windows/wshelper/dllmain.c
+++ /dev/null
@@ -1,264 +0,0 @@
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winsock.h>
-#include "wsh-int.h"
-#include <windns.h>
-#include "hesiod.h"
-#include "pwd.h"
-
-
-DWORD dwHesIndex; // for hes_to_bind
-DWORD dwHesMailIndex; // for hes_getmailhost
-DWORD dwHesServIndex; // for hes_getservbyname
-DWORD dwHesPwNamIndex; // for hes_getpwnam;
-DWORD dwHesPwUidIndex; // for hes_getpwuid
-DWORD dwGhnIndex; // for rgethostbyname
-DWORD dwGhaIndex; // for rgethostbyaddr
-
-#define LISTSIZE 15
-
-void FreeThreadLocalMemory();
-void AllocateThreadLocalMemory();
-void FreePasswdStruct(LPVOID lpvData);
-void FreeHostentStruct(LPVOID lpvData);
-
-BOOL
-WINAPI
-DllMain(
- HINSTANCE hinstDLL, // handle to DLL module
- DWORD fdwReason, // reason for calling function
- LPVOID lpvReserved // reserved
-)
-{
- switch(fdwReason)
- {
- case DLL_PROCESS_ATTACH:
- if ((dwHesIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwHesMailIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwHesServIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwHesPwNamIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwHesPwUidIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwHesPwUidIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwGhnIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- if ((dwGhaIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)
- return FALSE;
- res_init_startup();
- case DLL_THREAD_ATTACH:
- // Initialize the TLS index for this thread.
- AllocateThreadLocalMemory();
- break;
-
- case DLL_THREAD_DETACH:
-
- // Release the allocated memory for this thread.
- FreeThreadLocalMemory();
- break;
-
-
- case DLL_PROCESS_DETACH:
- // Release the TLS index.
- FreeThreadLocalMemory();
- TlsFree(dwHesIndex);
- TlsFree(dwHesMailIndex);
- TlsFree(dwHesServIndex);
- TlsFree(dwHesPwNamIndex);
- TlsFree(dwHesPwUidIndex);
- TlsFree(dwGhnIndex);
- TlsFree(dwGhaIndex);
-
- res_init_cleanup();
- break;
- }
- return TRUE;
-}
-
-void AllocateThreadLocalMemory()
-{
- LPVOID lpvData;
-
- lpvData = (LPVOID) LocalAlloc(LPTR, DNS_MAX_NAME_BUFFER_LENGTH);
- if (lpvData != NULL)
- TlsSetValue(dwHesIndex, lpvData);
-
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct hes_postoffice));
- if (lpvData != NULL)
- TlsSetValue(dwHesMailIndex, lpvData);
-
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct servent));
- if (lpvData != NULL)
- TlsSetValue(dwHesServIndex, lpvData);
-
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct passwd));
- if (lpvData != NULL)
- TlsSetValue(dwHesPwNamIndex, lpvData);
-
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct passwd));
- if (lpvData != NULL)
- TlsSetValue(dwHesPwUidIndex, lpvData);
-
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct hostent));
- if (lpvData != NULL)
- TlsSetValue(dwGhnIndex, lpvData);
-
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct hostent));
- if (lpvData != NULL)
- TlsSetValue(dwGhaIndex, lpvData);
-
-}
-void FreeThreadLocalMemory()
-{
- LPVOID lpvData;
- int i;
-
- lpvData = TlsGetValue(dwHesIndex);
- if (lpvData != NULL)
- LocalFree((HLOCAL) lpvData);
-
- // free hes_postoffice
- lpvData = TlsGetValue(dwHesMailIndex);
- if (lpvData)
- {
- struct hes_postoffice* p = (struct hes_postoffice*) lpvData;
- if (p->po_type)
- {
- LocalFree(p->po_type);
- p->po_type = NULL;
- }
- if (p->po_host)
- {
- LocalFree(p->po_host);
- p->po_host = NULL;
- }
- if (p->po_name)
- {
- LocalFree(p->po_name);
- p->po_name = NULL;
- }
- LocalFree((HLOCAL) lpvData);
- }
-
- // free servent
- lpvData = TlsGetValue(dwHesServIndex);
- if (lpvData)
- {
- struct servent* s = (struct servent*) lpvData;
- if (s->s_name)
- {
- LocalFree(s->s_name);
- s->s_name = NULL;
- }
- if (s->s_proto)
- {
- LocalFree(s->s_proto);
- s->s_proto = NULL;
- }
- if (s->s_aliases)
- {
- for (i = 0; i<LISTSIZE; i++)
- {
- if (s->s_aliases[i])
- {
- LocalFree(s->s_aliases[i]);
- s->s_aliases[i] = NULL;
- }
- }
- LocalFree(s->s_aliases);
- }
- LocalFree((HLOCAL) lpvData);
- }
-
- // free struct passwd
- lpvData = TlsGetValue(dwHesPwNamIndex);
- FreePasswdStruct(lpvData);
-
- lpvData = TlsGetValue(dwHesPwUidIndex);
- FreePasswdStruct(lpvData);
-
- // free struct hostent
- lpvData = TlsGetValue(dwGhnIndex);
- FreeHostentStruct(lpvData);
-
- lpvData = TlsGetValue(dwGhaIndex);
- FreeHostentStruct(lpvData);
-
-}
-
-
-void FreeHostentStruct(LPVOID lpvData)
-{
- if (lpvData)
- {
- int i = 0;
- struct hostent* host = (struct hostent*) lpvData;
- if (host->h_name)
- LocalFree(host->h_name);
- if (host->h_aliases)
- {
- while(host->h_aliases[i])
- {
- LocalFree(host->h_aliases[i]);
- host->h_aliases[i] = NULL;
- i++;
- }
- LocalFree(host->h_aliases);
- }
- if (host->h_addr_list)
- {
- i = 0;
- while (host->h_addr_list[i])
- {
- LocalFree(host->h_addr_list[i]);
- host->h_addr_list[i] = NULL;
- i++;
- }
- LocalFree(host->h_addr_list);
- }
- LocalFree((HLOCAL) lpvData);
- }
-}
-
-void FreePasswdStruct(LPVOID lpvData)
-{
- if (lpvData)
- {
- struct passwd* p = (struct passwd*) lpvData;
- if (p->pw_name)
- {
- LocalFree(p->pw_name);
- p->pw_name = NULL;
- }
- if (p->pw_passwd)
- {
- LocalFree(p->pw_passwd);
- p->pw_passwd = NULL;
- }
- if (p->pw_comment)
- {
- LocalFree(p->pw_comment);
- p->pw_comment = NULL;
- }
- if (p->pw_gecos)
- {
- LocalFree(p->pw_gecos);
- p->pw_gecos = NULL;
- }
- if (p->pw_dir)
- {
- LocalFree(p->pw_dir);
- p->pw_dir = NULL;
- }
- if (p->pw_shell)
- {
- LocalFree(p->pw_shell);
- p->pw_shell = NULL;
- }
- LocalFree((HLOCAL) lpvData);
- }
-}
diff --git a/src/windows/wshelper/gethna.c b/src/windows/wshelper/gethna.c
deleted file mode 100644
index 8914c3270..000000000
--- a/src/windows/wshelper/gethna.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
-* @doc RESOLVE
-*
-* @module gethna.c |
-*
-* This file contains the function definitions for:
-* rgethostbyname,
-* rgethostbyaddr,
-* rdn_expand,
-* gethinfobyname,
-* getmxbyname,
-* getrecordbyname,
-* rrhost,
-* rgetservbyname,
-* and some other internal functions called by these functions.
-*
-*
-* WSHelper DNS/Hesiod Library for WINSOCK
-*
-*/
-
-/*
- * Copyright (c) 1985, 1988 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)gethostnamadr.c 6.48 (Berkeley) 1/10/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <windows.h>
-#include <winsock.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <windns.h>
-
-#ifdef _WIN32
-#include <mitwhich.h>
-#endif
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-
-extern DWORD dwGhnIndex;
-extern DWORD dwGhaIndex;
-
-unsigned long WINAPI inet_aton(register const char *, struct in_addr *);
-
-
-#ifdef _DEBUG
-#ifndef DEBUG
-#define DEBUG
-#endif
-#endif
-
-
-extern int WINAPI hes_error( void );
-DNS_STATUS doquery(const char* queryname, struct hostent* host);
-
-/*
- query the dns name space for a host given the host name
- \param[in] name Pointer to the null-terminated name of the host to resolve. It can be a fully qualified host name such as x.mit.edu
- or it can be a simple host name such as x. If it is a simple host name, the default domain name is
- appended to do the search.
- \retval a pointer to the structure hostent. a structure allocated by the library. The hostent structure contains
- the results of a successful search for the host specified in the name parameter. The caller must never
- attempt to modify this structure or to free any of its components. Furthermore, only one copy of this
- structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another rgethostbyname.
- NULL if the search has failed
-
-*/
-struct hostent *
-WINAPI
-rgethostbyname(char *name)
-{
- struct hostent* host;
- DNS_STATUS status;
- const char *cp;
- char queryname[DNS_MAX_NAME_BUFFER_LENGTH ];
-#ifdef DEBUG
- char debstr[80];
-#endif
- char** domain;
- struct in_addr host_addr;
-
- host = (struct hostent*)(TlsGetValue(dwGhnIndex));
- if (host == NULL) {
- LPVOID lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct hostent));
- if (lpvData != NULL) {
- TlsSetValue(dwGhnIndex, lpvData);
- host = (struct hostent*)lpvData;
- } else
- return NULL;
- }
-
- if (host->h_name == NULL)
- host->h_name = LocalAlloc(LPTR, DNS_MAX_LABEL_BUFFER_LENGTH);
- if (host->h_aliases == NULL)
- host->h_aliases = LocalAlloc(LPTR, 1*sizeof(LPSTR));
- if (host->h_addr_list == NULL)
- {
- host->h_addr_list = LocalAlloc(LPTR, 2*sizeof(LPSTR));
- host->h_addr_list[0] = LocalAlloc(LPTR, DNS_MAX_LABEL_BUFFER_LENGTH);
- }
-
-
- /*
- * disallow names consisting only of digits/dots, unless
- * they end in a dot.
- */
- if (isdigit(name[0])) {
- for (cp = name;; ++cp) {
- if (!*cp) {
- if (*--cp == '.')
- break;
- /*
- * All-numeric, no dot at the end.
- * Fake up a hostent as if we'd actually
- * done a lookup.
- */
- if (!inet_aton(name, &host_addr)) {
- return((struct hostent *) NULL);
- }
- strcpy(host->h_name, name);
- host->h_aliases[0] = NULL;
- host->h_addrtype = AF_INET;
- host->h_length = sizeof(u_long);
- memcpy(host->h_addr_list[0], &host_addr, sizeof(host_addr));
- host->h_addr_list[1] = NULL;
- return (host);
- }
- if (!isdigit(*cp) && *cp != '.')
- break;
- }
- }
-
- strcpy(queryname, name);
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- return NULL;
- if (strchr(name, '.') == NULL)
- {
- if (_res.options & RES_DEFNAMES)
- {
- for (domain = _res.dnsrch; *domain; domain++) {
- strcpy(queryname, name);
- strcat(queryname, ".");
- strcat(queryname, *domain);
- status = doquery(queryname, host);
- if (status == 0)
- break;
- }
- }
- }
- else {
- status = doquery(queryname, host);
- }
-
- if (status) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- {
- wsprintf(debstr, "res_query failed\n");
- OutputDebugString(debstr);
- }
-#endif
- return NULL;
- }
- return host;
-}
-
-
-/*
- an internal function used by rgethostbyname that does the actual DnsQuery call and populates the hostent
- structure.
-
- \param[in] Name of the owner of the record set being queried
- \param[in, out] populated hostent structure
-
- \retval DNS_STATUS value returned by DnsQuery
-
-*/
-DNS_STATUS doquery(const char* queryname, struct hostent* host)
-{
- DNS_STATUS status;
- PDNS_RECORD pDnsRecord, pDnsIter;
- DNS_FREE_TYPE freetype ;
- struct in_addr host_addr;
- char querynamecp[DNS_MAX_NAME_BUFFER_LENGTH];
- size_t len;
-
- freetype = DnsFreeRecordListDeep;
- strcpy(querynamecp, queryname);
- status = DnsQuery_A(queryname, //pointer to OwnerName
- DNS_TYPE_A, //Type of the record to be queried
- DNS_QUERY_STANDARD,
- NULL, //contains DNS server IP address
- &pDnsRecord, //Resource record comprising the response
- NULL); //reserved for future use
-
- if (status)
- return status;
-
- /* If the query name includes a trailing separator in order to prevent
- * a local domain search, remove the separator during the file name
- * comparisons. */
- len = strlen(querynamecp);
- if (querynamecp[len-1] == '.')
- querynamecp[len-1] = '\0';
-
- for (pDnsIter = pDnsRecord; pDnsIter; pDnsIter=pDnsIter->pNext) {
- /* if we get an A record, keep it */
- if (pDnsIter->wType == DNS_TYPE_A && stricmp(querynamecp, pDnsIter->pName)==0)
- break;
-
- /* if we get a CNAME, look for a corresponding A record */
- if (pDnsIter->wType == DNS_TYPE_CNAME && stricmp(queryname, pDnsIter->pName)==0) {
- strcpy(querynamecp, pDnsIter->Data.CNAME.pNameHost);
- }
- }
- if (pDnsIter == NULL)
- return DNS_ERROR_RCODE_NAME_ERROR;
-
- strcpy(host->h_name, pDnsIter->pName);
- host->h_addrtype = AF_INET;
- host->h_length = sizeof(u_long);
- host->h_aliases[0] = NULL;
- host_addr.S_un.S_addr = (pDnsIter->Data.A.IpAddress);
- memcpy(host->h_addr_list[0], (char*)&host_addr, sizeof(pDnsIter->Data.A.IpAddress));
- host->h_addr_list[1] = NULL;
- DnsRecordListFree(pDnsRecord, freetype);
-
- return 0;
-}
-
-
-/*
- retrieves the host information corresponding to a network address in the DNS database
- \param[in] addr Pointer to an address in network byte order
- \param[in] len Length of the address, in bytes
- \param[in] type Type of the address, such as the AF_INET address family type (defined as TCP,
- UDP, and other associated Internet protocols). Address family types and their corresponding
- values are defined in the Winsock2.h header file.
- \retval returns a pointer to the hostent structure that contains the name and address corresponding
- to the given network address. The structure is allocated by the library. The caller must never
- attempt to modify this structure or to free any of its components. Furthermore, only one copy of this
- structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another rgethostbyaddr.
- NULL if the search has failed
-
-*/
-
-struct hostent *
-WINAPI
-rgethostbyaddr(const char *addr, int len, int type)
-{
- DNS_STATUS status;
- struct hostent* host;
-#ifdef DEBUG
- char debstr[80];
-#endif
-
- PDNS_RECORD pDnsRecord;
- DNS_FREE_TYPE freetype ;
- char qbuf[BUFSIZ];
-
- if (type != AF_INET)
- return ((struct hostent *) NULL);
-
- wsprintf(qbuf, "%u.%u.%u.%u.in-addr.arpa",
- ((unsigned)addr[3] & 0xff),
- ((unsigned)addr[2] & 0xff),
- ((unsigned)addr[1] & 0xff),
- ((unsigned)addr[0] & 0xff));
-
-
- freetype = DnsFreeRecordListDeep;
-
-
- status = DnsQuery_A(qbuf, //pointer to OwnerName
- DNS_TYPE_PTR, //Type of the record to be queried
- DNS_QUERY_STANDARD,
- NULL, //contains DNS server IP address
- &pDnsRecord, //Resource record comprising the response
- NULL); //reserved for future use
-
- if (status) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- {
- wsprintf(debstr, "res_query failed\n");
- OutputDebugString(debstr);
- }
-#endif
-
- return NULL;
- }
-
- host = (struct hostent*)(TlsGetValue(dwGhaIndex));
- if (host == NULL) {
- LPVOID lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct hostent));
- if (lpvData != NULL) {
- TlsSetValue(dwGhaIndex, lpvData);
- host = (struct hostent*)lpvData;
- } else
- return NULL;
- }
-
- if (host->h_name == NULL)
- host->h_name = LocalAlloc(LPTR, DNS_MAX_LABEL_BUFFER_LENGTH);
- if (host->h_aliases == NULL)
- host->h_aliases = LocalAlloc(LPTR, 1*sizeof(LPSTR));
- if (host->h_addr_list == NULL)
- {
- host->h_addr_list = LocalAlloc(LPTR, 2*sizeof(LPSTR));
- host->h_addr_list[0] = LocalAlloc(LPTR, DNS_MAX_LABEL_BUFFER_LENGTH);
- }
-
- strcpy(host->h_name, pDnsRecord->Data.Ptr.pNameHost);
- host->h_addrtype = type;
- host->h_length = len;
- host->h_aliases[0] = NULL;
- memcpy(host->h_addr_list[0], addr, sizeof(unsigned long));
- host->h_addr_list[1] = NULL;
- DnsRecordListFree(pDnsRecord, freetype);
-
- return host;
-
-}
-
-
-/*
-
- @doc MISC
-
- @func LPSTR WINAPI | gethinfobyname | Given the name
- of a host query the nameservers for the T_HINFO information
- associated with the host. unsupported
-
- @parm LPSTR | name | pointer to the name of the host that the query is about.
-
- @rdesc NULL or a pointer to the T_HINFO.
-
-
-*/
-
-LPSTR
-WINAPI
-gethinfobyname(LPSTR name)
-{
- return NULL;
-
-}
-
-
-/*
-
- @func struct mxent * WINAPI | getmxbyname | This
- function will query the nameservers for the MX records associated
- with the given hostname. Note that the return is a pointer to the
- mxent structure so an application making this call can iterate
- through the different records returned and can also reference the
- preference information associated with each hostname returned. unsupported
-
- @parm LPSTR | name | The name of the host for which we want MX records.
-
- @rdesc NULL or a pointer to a mxent structure.
-
- */
-
-struct mxent *
-WINAPI
-getmxbyname(LPSTR name)
-{
- return NULL;
-}
-
-
-/*
-
- @func LPSTR WINAPI | getrecordbyname | This function
- will query the nameservers about the given hostname for and DNS
- record type that the application wishes to query. unsupported
-
- @parm LPSTR | name | a pointer to the hostname
-
- @parm int | rectype | a DNS record type, e.g. T_MX, T_HINFO, ...
-
- @rdesc The return is NULL or a pointer to a string containing the
- data returned. It is up to the calling application to parse the
- string appropriately for the rectype queried.
-
-*/
-
-LPSTR
-WINAPI
-getrecordbyname(LPSTR name, int rectype)
-{
- return NULL;
-}
-
-
-/*
-
- @func DWORD WINAPI | rrhost | This function emulates the
- rhost function that was part of Excelan / Novell's LAN WorkPlace TCP/IP API.
- Given a pointer to an IP hostname it will return the IP address as a 32 bit
- integer.
-
-
- @parm LPSTR | lpHost | a pointer to the hostname.
-
- @rdesc 0 or the IP address as a 32 bit integer.
-
-*/
-
-DWORD WINAPI rrhost( LPSTR lpHost )
-{
- return (DWORD) 0;
-}
-
-
-/*
- retrieves service information corresponding to a service name and protocol.
-
- \param[in] name Pointer to a null-terminated service name.
- \param[in] proto pointer to a null-terminated protocol name. getservbyname should match both
- the name and the proto.
-
- \retval a pointer to the servent structure containing the name(s) and service number that match the name and proto
- parameters. The structure is allocated by the library. The caller must never
- attempt to modify this structure or to free any of its components. Furthermore, only one copy of this
- structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another rgetservbyname.
- NULL if the search has failed
-
-*/
-
-struct servent * WINAPI rgetservbyname(LPCSTR name, LPCSTR proto)
-{
- struct servent * WINAPI hes_getservbyname(LPCSTR name, LPCSTR proto);
- struct servent *tmpent;
-
- tmpent = hes_getservbyname(name, proto);
- return (!hes_error()) ? tmpent : getservbyname(name, proto);
-}
diff --git a/src/windows/wshelper/hesiod.c b/src/windows/wshelper/hesiod.c
deleted file mode 100644
index b448849cf..000000000
--- a/src/windows/wshelper/hesiod.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- @doc HESIOD
-
- @module hesiod.c |
-
- This module contains the defintions for the exported functions:
- hes_to_bind
- hes_resolve
- hes_error
- hes_free
- as well as the internal function hes_init. The hes_init function
- is the one that determines what the Hesiod servers are for your
- site and will parse the configuration files, if any are
- present.
-
- WSHelper DNS/Hesiod Library for WINSOCK
-
-*/
-
-/* This file is part of the Hesiod library.
- *
- * The BIND 4.8.1 implementation of T_TXT is incorrect; BIND 4.8.1 declares
- * it as a NULL terminated string. The RFC defines T_TXT to be a length
- * byte followed by arbitrary changes.
- *
- * Because of this incorrect declaration in BIND 4.8.1, when this bug is fixed,
- * T_TXT requests between machines running different versions of BIND will
- * not be compatible (nor is there any way of adding compatibility).
- *
- * Copyright 1988 by the Massachusetts Institute of Technology. See the
- * file <mit-copyright.h> for copying and distribution information.
- */
-
-#define index(str, c) strchr(str,c)
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include <windows.h>
-#include <winsock.h>
-#include <string.h>
-#include <hesiod.h>
-#include <resolv.h>
-#include <windns.h>
-
-#include "resource.h"
-
-
-#define USE_HS_QUERY /* undefine this if your higher-level name servers */
- /* don't know class HS */
-
-char HesConfigFile[_MAX_PATH];
-static char Hes_LHS[256];
-static char Hes_RHS[256];
-static int Hes_Errno = HES_ER_UNINIT;
-
-extern DWORD dwHesIndex;
-
-
-
-/*
-
- @func int | hes_init |
-
- This function is not exported. It takes no arguments. However it is
- important to understand how this works. It sets the global variables
- Hes_LHS and Hes_RHS which are used to form the Hesiod
- queries. Understanding how this works and setting up the correct
- configuration will determine if the Hesiod queries will work at your
- site. Settings can be configured by makgin source code changes and
- rebuilding the DLL, editing resources in the DLL, using a
- configuration file, or setting an environment variable.
-
- The function first tries to open the HesConfigFile and set the
- Hes_RHS and Hes_LHS variables from this. If there is no config file
- then the function tries to load a string resource from the DLL to
- set the LHS and RHS. If the string resources cannot be loaded then
- the LHS and RHS will be set by the values of DEF_LHS and DEF_RHS,
- these are defined in hesiod.h. Note that the string resources are by
- default set to these same values since the RC files include hesiod.h
-
- Finally if the user sets the environment variable HES_DOMAIN the RHS
- will be overridden by the value of the HES_DOMAIN value.
-
- Note that LoadString requires us to first find the module handle of
- the DLL. We have to use the internal module name as defined in the
- DEF file. If you change the library name within the DEF file you
- also need to change the appropriate string in hesiod.c
-
-*/
-int hes_init( void )
-{
- register FILE *fp;
- register char *key;
- register char *cp;
- char buf[MAXDNAME+7];
- HMODULE hModWSHelp;
-
-
- Hes_Errno = HES_ER_UNINIT;
- Hes_LHS[0] = '\0';
- Hes_RHS[0] = '\0';
-
- // Note: these must match the DEF file entries
-#if defined(_WIN64)
- hModWSHelp = GetModuleHandle( "WSHELP64" );
-#else
- hModWSHelp = GetModuleHandle( "WSHELP32" );
-#endif
-
- if(!LoadString( hModWSHelp, IDS_DEF_HES_CONFIG_FILE,
- HesConfigFile, sizeof(HesConfigFile) )){
- strcpy( HesConfigFile, HESIOD_CONF);
- }
-
- if ((fp = fopen(HesConfigFile, "r")) == NULL) {
- /* use defaults compiled in */
- /* no file or no access uses defaults */
- /* but poorly formed file returns error */
-
- if(!LoadString( hModWSHelp, IDS_DEF_HES_RHS, Hes_RHS, sizeof(Hes_RHS) )){
- strcpy( Hes_RHS, DEF_RHS);
- }
-
- if(!LoadString( hModWSHelp, IDS_DEF_HES_LHS, Hes_LHS, sizeof(Hes_LHS) )){
- strcpy( Hes_LHS, DEF_LHS);
- }
- } else {
- while(fgets((LPSTR) buf, MAXDNAME+7, fp) != NULL) {
- cp = (LPSTR) buf;
- if (*cp == '#' || *cp == '\n'){
- continue;
- }
- while(*cp == ' ' || *cp == '\t'){
- cp++;
- }
- key = cp;
- while(*cp != ' ' && *cp != '\t' && *cp != '='){
- cp++;
- }
- *cp++ = '\0';
- if (strcmp(key, "lhs") == 0){
- strncpy(&Hes_LHS[0], cp, (strlen(cp)-1));
- } else if (strcmp(key, "rhs") == 0){
- strncpy(&Hes_RHS[0], cp, (strlen(cp)-1));
- } else {
- continue;
- }
- while(*cp == ' ' || *cp == '\t' || *cp == '='){
- cp++;
- }
- if (*cp != '.') {
- Hes_Errno = HES_ER_CONFIG;
- fclose(fp);
- return(Hes_Errno);
- }
- // len = strlen(cp);
- // *cpp = calloc((unsigned int) len, sizeof(char));
- // (void) strncpy(*cpp, cp, len-1);
- }
- fclose(fp);
- }
- /* see if the RHS is overridden by environment variable */
- if ((cp = getenv("HES_DOMAIN")) != NULL){
- // Hes_RHS = strcpy(malloc(strlen(cp)+1),cp);
- strcpy(Hes_RHS,cp);
- }
- /* the LHS may be null, the RHS must not be null */
- if (Hes_RHS == NULL)
- Hes_Errno = HES_ER_CONFIG;
- else
- Hes_Errno = HES_ER_OK;
- return(Hes_Errno);
-}
-
-
-/*
- hes_to_bind function use the LHS and RHS values and
- binds them with the parameters so that a well formed DNS query may
- be performed.
-
- \param[in] HesiodName The Hesiod name such as a username or service name
- \param[in] HesiodNameType The Hesiod name type such as pobox, passwd, or sloc
-
- \retval Returns NULL if there was an error. Otherwise the pointer to a string containing a valid query is returned.
-
-*/
-char *
-WINAPI
-hes_to_bind(LPSTR HesiodName,
- LPSTR HesiodNameType)
-{
- register char *cp, **cpp;
- char* bindname;
- LPVOID lpvData;
- char *RHS;
-
- cp = NULL;
- cpp = NULL;
-
- bindname = (LPSTR)(TlsGetValue(dwHesIndex));
- if (bindname == NULL)
- {
- lpvData = LocalAlloc(LPTR, DNS_MAX_NAME_BUFFER_LENGTH);
- if (lpvData != NULL)
- {
- TlsSetValue(dwHesIndex, lpvData);
- bindname = (LPSTR)lpvData;
- }
- else
- return NULL;
- }
- if (Hes_Errno == HES_ER_UNINIT || Hes_Errno == HES_ER_CONFIG)
- (void) hes_init();
- if (Hes_Errno == HES_ER_CONFIG)
- return(NULL);
- if (cp = index(HesiodName,'@')) {
- if (index(++cp,'.'))
- RHS = cp;
- else
- if (cpp = hes_resolve(cp, "rhs-extension"))
- RHS = *cpp;
- else {
- Hes_Errno = HES_ER_NOTFOUND;
- return(NULL);
- }
- (void) strcpy(bindname,HesiodName);
- (*index(bindname,'@')) = '\0';
- } else {
- RHS = Hes_RHS;
- (void) strcpy(bindname, HesiodName);
- }
- (void) strcat(bindname, ".");
- (void) strcat(bindname, HesiodNameType);
- if (Hes_LHS) {
- if (Hes_LHS[0] != '.')
- (void) strcat(bindname,".");
- (void) strcat(bindname, Hes_LHS);
- }
- if (RHS[0] != '.')
- (void) strcat(bindname,".");
- (void) strcat(bindname, RHS);
-
- if(cpp != NULL )
- hes_free(cpp);
-
- return(bindname);
-}
-
-
-/*
- This function calls hes_to_bind to form a valid hesiod query, then queries the dns database.
- defined in hesiod.c
-
- \param[in] HesiodName The Hesiod name such as a username or service name
- \param[in] HesiodNameType The Hesiod name type such as pobox, passwd, or sloc
-
- \retval returns a NULL terminated vector of strings (a la argv),
- one for each resource record containing Hesiod data, or NULL if
- there is any error. If there is an error call hes_error() to get
- further information. You will need to call hes_free to free the result
-
-*/
-char **
-WINAPI
-hes_resolve(LPSTR HesiodName, LPSTR HesiodNameType)
-{
- register char *cp;
- LPSTR* retvec;
- DNS_STATUS status;
-
- PDNS_RECORD pDnsRecord;
- PDNS_RECORD pR;
- DNS_FREE_TYPE freetype ;
- int i = 0;
- freetype = DnsFreeRecordListDeep;
-
-
- cp = hes_to_bind(HesiodName, HesiodNameType);
- if (cp == NULL) return(NULL);
- errno = 0;
-
-
- status = DnsQuery_A(cp, //pointer to OwnerName
- DNS_TYPE_TEXT, //Type of the record to be queried
- DNS_QUERY_STANDARD, // Bypasses the resolver cache on the lookup.
- NULL, //contains DNS server IP address
- &pDnsRecord, //Resource record comprising the response
- NULL); //reserved for future use
-
- if (status) {
- errno = status;
- Hes_Errno = HES_ER_NOTFOUND;
- return NULL;
- }
-
- pR = pDnsRecord;
- while (pR)
- {
- if (pR->wType == DNS_TYPE_TEXT)
- i++;
- pR = pR->pNext;
- }
- i++;
- retvec = LocalAlloc(LPTR, i*sizeof(LPSTR));
- pR = pDnsRecord;
- i = 0;
- while (pR)
- {
- if (pR->wType == DNS_TYPE_TEXT){
- SIZE_T l = strlen(((pR->Data).Txt.pStringArray)[0]);
- retvec[i] = LocalAlloc(LPTR, l+1);
- strcpy(retvec[i], ((pR->Data).Txt.pStringArray)[0]);
- i++;
- }
- pR = pR->pNext;
- }
- retvec[i] = NULL;
- DnsRecordListFree(pDnsRecord, freetype);
- return retvec;
-
-}
-
-
-/*
- The function hes_error may be called to determine the
- source of the error. It does not take an argument.
-
- \retval return one of the HES_ER_* codes defined in hesiod.h.
-*/
-
-int
-WINAPI
-hes_error(void)
-{
- return(Hes_Errno);
-}
-
-
-/*
-
- The function hes_free should be called to free up memeory returned by
- hes_resolve
-
- \param[in] hesinfo a NULL terminiated array of strings returned by hes_resolve
-
-
-*/
-void
-WINAPI
-hes_free(LPSTR* info)
-{
- int i= 0;
- for (; info[i]; i++)
- {
- LocalFree(info[i]);
- }
- LocalFree(info);
-} \ No newline at end of file
diff --git a/src/windows/wshelper/hesmailh.c b/src/windows/wshelper/hesmailh.c
deleted file mode 100644
index 32791e8d6..000000000
--- a/src/windows/wshelper/hesmailh.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * @doc HESIOD
- *
- * @module hesmailh.c |
- *
- * This file contains hes_postoffice, which retrieves post-office information
- * for a user.
- *
- * For copying and distribution information, see the file
- * <lt> mit-copyright.h <gt>
- *
- * Original version by Steve Dyer, IBM/Project Athena.
- *
- * WSHelper DNS/Hesiod Library for WINSOCK
- */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h> /*s*/
-
-#include <hesiod.h>
-
-
-#define LINESIZE 80
-
-extern DWORD dwHesMailIndex;
-
-
-/*
- This call is used to obtain a user's type of mail account and the location of that
- account. E.g. POP PO10.MIT.EDU or IMAP IMAP-TEST.MIT.EDU
-
- defined in hesmailh.c
-
- \param[in] user The username to be used when querying for the Hesiod Name Type POBOX.
-
- \retval NULL if there was an error or if there was no entry for the
- username. Otherwise a pointer to a hes_postoffice structure is
- returned. The caller must never attempt to modify this structure or to free
- any of its components. Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another getmailhost call
-
-*/
-struct hes_postoffice *
-WINAPI
-hes_getmailhost(LPSTR user)
-{
- struct hes_postoffice* ret;
- char linebuf[LINESIZE];
- char *p, *tmp;
- char **cp;
-
-
- cp = hes_resolve(user, "pobox");
- if (cp == NULL) return(NULL);
-
- ret = (struct hes_postoffice*)(TlsGetValue(dwHesMailIndex));
- if (ret == NULL) {
- LPVOID lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct hes_postoffice));
- if (lpvData != NULL) {
- TlsSetValue(dwHesMailIndex, lpvData);
- ret = (struct hes_postoffice*)lpvData;
- } else
- return NULL;
- }
- if (!ret->po_type)
- ret->po_type = LocalAlloc(LPTR, LINESIZE);
- if (!ret->po_host)
- ret->po_host = LocalAlloc(LPTR, LINESIZE);
- if (!ret->po_name)
- ret->po_name = LocalAlloc(LPTR, LINESIZE);
- strcpy(linebuf, *cp);
-
- p = linebuf;
- tmp = linebuf;
- while(!isspace(*p)) p++;
- *p++ = '\0';
- strcpy(ret->po_type, tmp);
- tmp = p;
- while(!isspace(*p)) p++;
- *p++ = '\0';
- strcpy(ret->po_host, tmp);
- strcpy(ret->po_name, p);
- if (cp)
- hes_free(cp);
- return(ret);
-}
diff --git a/src/windows/wshelper/hespwnam.c b/src/windows/wshelper/hespwnam.c
deleted file mode 100644
index 55ddf01c1..000000000
--- a/src/windows/wshelper/hespwnam.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * @doc HESIOD
- *
- * @module hespwnam.c |
- *
- * This file contains hes_getpwnam, for retrieving passwd information about
- * a user.
- *
- * For copying and distribution information, see the file
- * <lt> mit-copyright.h <gt>
- *
- * Original version by Steve Dyer, IBM/Project Athena.
- *
- * WSHelper DNS/Hesiod Library for WINSOCK
- *
- *
- */
-
-/* This file contains hes_getpwnam, for retrieving passwd information about
- * a user.
- *
- * For copying and distribution information, see the file <mit-copyright.h>
- *
- * Original version by Steve Dyer, IBM/Project Athena.
- *
- */
-
-#include <stdio.h>
-#include <string.h> /*s*/
-
-#include <stdlib.h>
-
-#include <windows.h>
-#include <hesiod.h>
-
-#include "pwd.h"
-
-extern DWORD dwHesPwNamIndex;
-extern DWORD dwHesPwUidIndex;
-
-#define MAX_PW_BUFFER_LENGTH 64
-
-static char *
-_NextPWField(char *ptr);
-
-struct passwd * GetPasswdStruct(struct passwd* pw, char* buf);
-
-
-
-
-/*
- Given a UID this function will return the pwd information, eg username, uid,
- gid, fullname, office location, phone number, home directory, and default shell
-
- defined in hespwnam.c
- \param uid The user ID
- \retval NULL if there was an error or a pointer to the passwd structure. The caller must
- never attempt to modify this structure or to free any of its components.
- Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another hes_getpwuid call
-*/
-struct passwd *
-WINAPI
-hes_getpwuid(int uid)
-{
- char **pp;
- struct passwd* pw = NULL;
- char buf[256];
-
- char nam[8];
- sprintf(nam, "%d", uid);
-
- pp = hes_resolve(nam, "uid");
- if (pp == NULL || *pp == NULL)
- return(NULL);
-
- pw = (struct passwd*)(TlsGetValue(dwHesPwUidIndex));
- if (pw == NULL) {
- LPVOID lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct passwd));
- if (lpvData != NULL) {
- TlsSetValue(dwHesPwUidIndex, lpvData);
- pw = (struct passwd*)lpvData;
- } else
- return NULL;
- }
-
- strcpy(buf, pp[0]);
- hes_free(pp);
- return GetPasswdStruct(pw, buf);
-}
-
-
-/*
- Given a username this function will return the pwd information, eg
- username, uid, gid, fullname, office location, phone number, home
- directory, and default shell
-
- defined in hespwnam.c
-
- \param nam a pointer to the username
-
- \retval NULL if there was an error or a pointer to the passwd structure. The caller must
- never attempt to modify this structure or to free any of its components.
- Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another hes_getpwnam call
-
-*/
-struct passwd *
-WINAPI
-hes_getpwnam(char *nam)
-{
-
- char **pp;
- struct passwd* pw = NULL;
- char buf[256];
-
- pp = hes_resolve(nam, "passwd");
- if (pp == NULL || *pp == NULL)
- return(NULL);
-
- pw = (struct passwd*)(TlsGetValue(dwHesPwNamIndex));
- if (pw == NULL) {
- LPVOID lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct passwd));
- if (lpvData != NULL) {
- TlsSetValue(dwHesPwNamIndex, lpvData);
- pw = (struct passwd*)lpvData;
- } else
- return NULL;
- }
-
- strcpy(buf, pp[0]);
- hes_free(pp);
- return GetPasswdStruct(pw, buf);
-}
-
-
-struct passwd* GetPasswdStruct(struct passwd* pw, char* buf)
-{
- char* temp;
- char* p;
-
- if (pw->pw_name == NULL)
- pw->pw_name = LocalAlloc(LPTR, MAX_PW_BUFFER_LENGTH);
- if (pw->pw_passwd == NULL)
- pw->pw_passwd = LocalAlloc(LPTR, MAX_PW_BUFFER_LENGTH);
- if (pw->pw_comment == NULL)
- pw->pw_comment = LocalAlloc(LPTR, MAX_PW_BUFFER_LENGTH);
- if (pw->pw_gecos == NULL)
- pw->pw_gecos = LocalAlloc(LPTR, MAX_PW_BUFFER_LENGTH);
- if (pw->pw_dir == NULL)
- pw->pw_dir = LocalAlloc(LPTR, MAX_PW_BUFFER_LENGTH);
- if (pw->pw_shell == NULL)
- pw->pw_shell = LocalAlloc(LPTR, MAX_PW_BUFFER_LENGTH);
- /* choose only the first response (only 1 expected) */
- p = buf;
- temp = p;
- p = _NextPWField(p);
- strcpy(pw->pw_name, temp);
- temp = p;
- p = _NextPWField(p);
- strcpy(pw->pw_passwd, temp);
- pw->pw_uid = atoi(p);
- p = _NextPWField(p);
- pw->pw_gid = atoi(p);
- pw->pw_quota = 0;
- strcpy(pw->pw_comment, "");
- p = _NextPWField(p);
- temp = p;
- p = _NextPWField(p);
- strcpy(pw->pw_gecos, temp);
- temp = p;
- p = _NextPWField(p);
- strcpy(pw->pw_dir, temp);
- temp = p;
- while (*p && *p != '\n')
- p++;
- *p = '\0';
- strcpy(pw->pw_shell, temp);
- return pw;
-
-
-}
-
-/* Move the pointer forward to the next colon-separated field in the
- * password entry.
- */
-
-static char *
-_NextPWField(char *ptr)
-{
- while (*ptr && *ptr != '\n' && *ptr != ':')
- ptr++;
- if (*ptr)
- *ptr++ = '\0';
- return(ptr);
-}
diff --git a/src/windows/wshelper/hesservb.c b/src/windows/wshelper/hesservb.c
deleted file mode 100644
index 01db3a4bf..000000000
--- a/src/windows/wshelper/hesservb.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * @doc HESIOD
- *
- * @module hesservb.c |
- *
- *
- * Contains the definition for hes_getservbyname,
- *
- * WSHelper DNS/Hesiod Library for WINSOCK
- *
- */
-
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved. The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getservbyname.c 5.3 (Berkeley) 5/19/86";
-#endif /* LIBC_SCCS and not lint */
-
-#include <hesiod.h>
-#include <windows.h>
-#include <winsock.h>
-#include <windns.h>
-
-#include <string.h>
-
-#include <stdio.h>
-#include <ctype.h>
-
-#define cistrcmp stricmp
-
-#define LISTSIZE 15
-
-
-/*
- This function will query a Hesiod server for a servent structure given
- a service name and protocol. This is a replacement for the Winsock
- getservbyname function which normally just uses a local services
- file. This allows a site to use a centralized database for adding new
- services.
-
- defined in hesservb.c
-
- \param[in] name pointer to the official name of the service, eg "POP3".
- \param[in] proto pointer to the protocol to use when contacting the service, e.g. "TCP"
-
- \retval NULL if there was an error or a pointer to a servent structure. The caller must
- never attempt to modify this structure or to free any of its components.
- Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before
- issuing another hes_getservbyname call
-
-*/
-
-extern DWORD dwHesServIndex;
-struct servent *
-WINAPI
-hes_getservbyname(char *name, char *proto)
-{
- struct servent *p;
- register char **cp;
- register char** hesinfo;
- register int i = 0;
-
- char buf[DNS_MAX_NAME_BUFFER_LENGTH];
- char* l;
-
- hesinfo = hes_resolve(name, "service");
- cp = hesinfo;
- if (cp == NULL)
- return(NULL);
- p = (struct servent*)(TlsGetValue(dwHesServIndex));
- if (p == NULL) {
- LPVOID lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct servent));
- if (lpvData != NULL) {
- TlsSetValue(dwHesServIndex, lpvData);
- p = (struct servent*)lpvData;
- } else
- return NULL;
- }
- if (!p->s_name)
- p->s_name = LocalAlloc(LPTR, DNS_MAX_LABEL_BUFFER_LENGTH);
- if (!p->s_proto)
- p->s_proto = LocalAlloc(LPTR, DNS_MAX_LABEL_BUFFER_LENGTH);
- if (!p->s_aliases)
- p->s_aliases = LocalAlloc(LPTR, LISTSIZE*sizeof(LPSTR));
-
- for (;*cp; cp++) {
- register char *servicename, *protoname, *port;
- strcpy(buf, *cp);
- l = buf;
- while(*l && (*l == ' ' || *l == '\t')) l++;
- servicename = l;
- while(*l && *l != ' ' && *l != '\t' && *l != ';') l++;
- if (*l == '\0') continue; /* malformed entry */
- *l++ = '\0';
- while(*l && (*l == ' ' || *l == '\t')) l++;
- protoname = l;
- while(*l && *l != ' ' && *l != ';') l++;
- if (*l == '\0') continue; /* malformed entry */
- *l++ = '\0';
- if (cistrcmp(proto, protoname)) continue; /* wrong port */
- while(*l && (*l == ' ' || *l == '\t' || *l == ';')) l++;
- if (*l == '\0') continue; /* malformed entry */
- port = l;
- while(*l && (*l != ' ' && *l != '\t' && *l != ';')) l++;
- if (*l) *l++ = '\0';
- if (*l != '\0') {
- do {
- char* tmp = l;
- while(*l && !isspace(*l)) l++;
- if (*l) *l++ = 0;
- if (p->s_aliases[i])
- p->s_aliases[i] = LocalAlloc(LPTR, strlen(tmp));
- strcpy(p->s_aliases[i], tmp);
- i++;
- } while(*l);
- }
- p->s_aliases[i] = NULL;
- for (; i<LISTSIZE; i++)
- {
- if (p->s_aliases[i]){
- LocalFree(p->s_aliases[i]);
- p->s_aliases[i] = NULL;
- }
- }
- strcpy(p->s_name, servicename);
- p->s_port = htons((u_short)atoi(port));
- strcpy(p->s_proto, protoname);
- if (hesinfo)
- hes_free(hesinfo);
- return (p);
- }
- return(NULL);
-}
diff --git a/src/windows/wshelper/inetaton.c b/src/windows/wshelper/inetaton.c
deleted file mode 100644
index bc7bd09a0..000000000
--- a/src/windows/wshelper/inetaton.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- *
- * @doc RESOLVE
- *
- * @module inetaton.c |
- *
- * from the BIND 4.9.x inetaddr.c
- *
- * Contains implementation of inet_aton
-
- * WSHelper DNS/Hesiod Library for WINSOCK
- *
- */
-
-/*
- * Copyright (c) 1983, 1990 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)inet_addr.c 5.11 (Berkeley) 12/9/91";
-#endif /* LIBC_SCCS and not lint */
-
-#include <windows.h>
-#include <winsock.h>
-#include <ctype.h>
-
-
-/*
- converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the in_addr structure
-
- \param[in] cp Null-terminated character string representing a number expressed in the
- Internet standard ".'' (dotted) notation.
- \param[in, out] addr pointer to the in_addr structure. The s_addr memeber will be populated
-
-
- \retval Returns 1 if the address is valid, 0 if not.
-
- */
-unsigned long
-WINAPI
-inet_aton(register const char *cp, struct in_addr *addr)
-{
- register u_long val, base;
- ULONG_PTR n;
- register char c;
- u_long parts[4], *pp = parts;
-
- for (;;) {
- /*
- * Collect number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, other=decimal.
- */
- val = 0; base = 10;
- if (*cp == '0') {
- if (*++cp == 'x' || *cp == 'X')
- base = 16, cp++;
- else
- base = 8;
- }
- while ((c = *cp) != '\0') {
- if (isascii(c) && isdigit(c)) {
- val = (val * base) + (c - '0');
- cp++;
- continue;
- }
- if (base == 16 && isascii(c) && isxdigit(c)) {
- val = (val << 4) +
- (c + 10 - (islower(c) ? 'a' : 'A'));
- cp++;
- continue;
- }
- break;
- }
- if (*cp == '.') {
- /*
- * Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16-bits)
- * a.b (with b treated as 24 bits)
- */
- if (pp >= parts + 3 || val > 0xff)
- return (0);
- *pp++ = val, cp++;
- } else
- break;
- }
- /*
- * Check for trailing characters.
- */
- if (*cp && (!isascii(*cp) || !isspace(*cp)))
- return (0);
- /*
- * Concoct the address according to
- * the number of parts specified.
- */
- n = pp - parts + 1;
- switch (n) {
-
- case 1: /* a -- 32 bits */
- break;
-
- case 2: /* a.b -- 8.24 bits */
- if (val > 0xffffff)
- return (0);
- val |= parts[0] << 24;
- break;
-
- case 3: /* a.b.c -- 8.8.16 bits */
- if (val > 0xffff)
- return (0);
- val |= (parts[0] << 24) | (parts[1] << 16);
- break;
-
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- if (val > 0xff)
- return (0);
- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
- break;
- }
- if (addr)
- addr->s_addr = htonl(val);
- return (1);
-}
diff --git a/src/windows/wshelper/pwd.h b/src/windows/wshelper/pwd.h
deleted file mode 100644
index 6954fd77d..000000000
--- a/src/windows/wshelper/pwd.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* pwd.h 4.1 83/05/03 */
-
-struct passwd { /* see getpwent(3) */
- char *pw_name;
- char *pw_passwd;
- int pw_uid;
- int pw_gid;
- int pw_quota;
- char *pw_comment;
- char *pw_gecos;
- char *pw_dir;
- char *pw_shell;
-};
-
-struct passwd *getpwent(), *getpwuid(), *getpwnam();
diff --git a/src/windows/wshelper/res_comp.c b/src/windows/wshelper/res_comp.c
deleted file mode 100644
index 36cd77372..000000000
--- a/src/windows/wshelper/res_comp.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- *
- * @doc RESOLVE
- *
- * @module res_comp.c |
- *
- * Contains the implementations for dn_comp and rdn_expand as well as
- * some other functions used internally by these two functions.
- *
- * WSHelper DNS/Hesiod Library for WINSOCK
- *
- */
-
-/*
- * Copyright (c) 1985 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_comp.c 6.22 (Berkeley) 3/19/91";
-#endif /* LIBC_SCCS and not lint */
-
-#include <windows.h>
-#include <winsock.h>
-#include <resolv.h>
-#include <stdio.h>
-
-
-static dn_find();
-
-/*
- replacement for dn_expand called rdn_expand. Older versions of
- the DLL used to this as dn_expand but this has caused some
- conflict with more recent versions of the MSDEV
- libraries. rdn_expand() expands the compressed domain name comp_dn to
- a full domain name. Expanded names are converted to upper case.
-
- \param[in] msg msg is a pointer to the beginning of the message
- \param[in] eomorig
- \param[in] comp_dn the compressed domain name.
- \param[in, out] expn_dn a pointer to the result buffer
- \param[in] length size of the result in expn_dn
-
- \retval the size of compressed name is returned or -1 if there was an error.
-*/
-
-
-
-int WINAPI
-rdn_expand(const u_char *msg, const u_char *eomorig,
- const u_char *comp_dn, u_char *exp_dn, int length)
-{
- register u_char *cp, *dn;
- register int n, c;
- u_char *eom;
- INT_PTR len = -1;
- int checked = 0;
-
- dn = exp_dn;
- cp = (u_char *)comp_dn;
- eom = exp_dn + length;
- /*
- * fetch next label in domain name
- */
- while (n = *cp++) {
- /*
- * Check for indirection
- */
- switch (n & INDIR_MASK) {
- case 0:
- if (dn != exp_dn) {
- if (dn >= eom)
- return (-1);
- *dn++ = '.';
- }
- if (dn+n >= eom)
- return (-1);
- checked += n + 1;
- while (--n >= 0) {
- if ((c = *cp++) == '.') {
- if (dn + n + 2 >= eom)
- return (-1);
- *dn++ = '\\';
- }
- *dn++ = c;
- if (cp >= eomorig) /* out of range */
- return(-1);
- }
- break;
-
- case INDIR_MASK:
- if (len < 0)
- len = cp - comp_dn + 1;
- cp = (u_char *)msg + (((n & 0x3f) << 8) | (*cp & 0xff));
- if (cp < msg || cp >= eomorig) /* out of range */
- return(-1);
- checked += 2;
- /*
- * Check for loops in the compressed name;
- * if we've looked at the whole message,
- * there must be a loop.
- */
- if (checked >= eomorig - msg)
- return (-1);
- break;
-
- default:
- return (-1); /* flag error */
- }
- }
- *dn = '\0';
- if (len < 0)
- len = cp - comp_dn;
- return (int)(len);
-}
-
-
-/*
- Compress domain name 'exp_dn' into 'comp_dn'
- \param[in] exp_dn name to compress
- \param[in, out] comp_dn result of the compression
- \paramp[in] length the size of the array pointed to by 'comp_dn'.
- \param[in, out] dnptrs a list of pointers to previous compressed names. dnptrs[0]
- is a pointer to the beginning of the message. The list ends with NULL.
- \param[in] lastdnptr a pointer to the end of the arrary pointed to by 'dnptrs'. Side effect
- is to update the list of pointers for labels inserted into the
- message as we compress the name. If 'dnptr' is NULL, we don't try to
- compress names. If 'lastdnptr' is NULL, we don't update the list.
- \retval Return the size of the compressed name or -1
- */
-int WINAPI
-dn_comp(const u_char *exp_dn, u_char *comp_dn, int length,
- u_char **dnptrs, u_char **lastdnptr)
-{
- register u_char *cp, *dn;
- register int c, l;
- u_char **cpp, **lpp, *sp, *eob;
- u_char *msg;
-
- dn = (u_char *)exp_dn;
- cp = comp_dn;
- eob = cp + length;
- if (dnptrs != NULL) {
- if ((msg = *dnptrs++) != NULL) {
- for (cpp = dnptrs; *cpp != NULL; cpp++)
- ;
- lpp = cpp; /* end of list to search */
- }
- } else
- msg = NULL;
- for (c = *dn++; c != '\0'; ) {
- /* look to see if we can use pointers */
- if (msg != NULL) {
- if ((l = dn_find(dn-1, msg, dnptrs, lpp)) >= 0) {
- if (cp+1 >= eob)
- return (-1);
- *cp++ = (l >> 8) | INDIR_MASK;
- *cp++ = l % 256;
- return (int)(cp - comp_dn);
- }
- /* not found, save it */
- if (lastdnptr != NULL && cpp < lastdnptr-1) {
- *cpp++ = cp;
- *cpp = NULL;
- }
- }
- sp = cp++; /* save ptr to length byte */
- do {
- if (c == '.') {
- c = *dn++;
- break;
- }
- if (c == '\\') {
- if ((c = *dn++) == '\0')
- break;
- }
- if (cp >= eob) {
- if (msg != NULL)
- *lpp = NULL;
- return (-1);
- }
- *cp++ = c;
- } while ((c = *dn++) != '\0');
- /* catch trailing '.'s but not '..' */
- if ((l =(int)( cp - sp - 1)) == 0 && c == '\0') {
- cp--;
- break;
- }
- if (l <= 0 || l > MAXLABEL) {
- if (msg != NULL)
- *lpp = NULL;
- return (-1);
- }
- *sp = l;
- }
- if (cp >= eob) {
- if (msg != NULL)
- *lpp = NULL;
- return (-1);
- }
- *cp++ = '\0';
- return (int)(cp - comp_dn);
-}
-
-/*
- * Skip over a compressed domain name. Return the size or -1.
- */
-__dn_skipname(const u_char *comp_dn, const u_char *eom)
-{
- register u_char *cp;
- register int n;
-
- cp = (u_char *)comp_dn;
- while (cp < eom && (n = *cp++)) {
- /*
- * check for indirection
- */
- switch (n & INDIR_MASK) {
- case 0: /* normal case, n == len */
- cp += n;
- continue;
- default: /* illegal type */
- return (-1);
- case INDIR_MASK: /* indirection */
- cp++;
- }
- break;
- }
- return (int)(cp - comp_dn);
-}
-
-/*
- * Search for expanded name from a list of previously compressed names.
- * Return the offset from msg if found or -1.
- * dnptrs is the pointer to the first name on the list,
- * not the pointer to the start of the message.
- */
-static
-dn_find(u_char *exp_dn, u_char *msg, u_char **dnptrs, u_char **lastdnptr)
-{
- register u_char *dn, *cp, **cpp;
- register int n;
- u_char *sp;
-
- for (cpp = dnptrs; cpp < lastdnptr; cpp++) {
- dn = exp_dn;
- sp = cp = *cpp;
- while (n = *cp++) {
- /*
- * check for indirection
- */
- switch (n & INDIR_MASK) {
- case 0: /* normal case, n == len */
- while (--n >= 0) {
- if (*dn == '.')
- goto next;
- if (*dn == '\\')
- dn++;
- if (*dn++ != *cp++)
- goto next;
- }
- if ((n = *dn++) == '\0' && *cp == '\0')
- return (int)(sp - msg);
- if (n == '.')
- continue;
- goto next;
-
- default: /* illegal type */
- return (-1);
-
- case INDIR_MASK: /* indirection */
- cp = msg + (((n & 0x3f) << 8) | *cp);
- }
- }
- if (*dn == '\0')
- return (int)(sp - msg);
- next: ;
- }
- return (-1);
-}
-
-/*
- * Routines to insert/extract short/long's. Must account for byte
- * order and non-alignment problems. This code at least has the
- * advantage of being portable.
- *
- * used by sendmail.
- */
-
-u_short
-_getshort(u_char *msgp)
-{
- register u_char *p = (u_char *) msgp;
-#ifdef vax
- /*
- * vax compiler doesn't put shorts in registers
- */
- register u_long u;
-#else
- register u_short u;
-#endif
-
- u = *p++ << 8;
- return ((u_short)(u | *p));
-}
-
-u_long
-_getlong(u_char *msgp)
-{
- register u_char *p = (u_char *) msgp;
- register u_long u;
-
- u = *p++; u <<= 8;
- u |= *p++; u <<= 8;
- u |= *p++; u <<= 8;
- return (u | *p);
-}
-
-void
-__putshort(register u_short s, register u_char *msgp)
-{
- msgp[1] = LOBYTE(s);
- msgp[0] = HIBYTE(s);
-}
-
-void
-__putlong(register u_long l, register u_char *msgp)
-{
- msgp[3] = LOBYTE(LOWORD(l));
- msgp[2] = HIBYTE(LOWORD(l));
- msgp[1] = LOBYTE(HIWORD(l));
- msgp[0] = HIBYTE(HIWORD(l));
-}
diff --git a/src/windows/wshelper/res_init.c b/src/windows/wshelper/res_init.c
deleted file mode 100644
index bf3d97b50..000000000
--- a/src/windows/wshelper/res_init.c
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * @doc RESOLVE
- *
- * @module res_init.c |
- *
- * Contains the implementation for res_init, res_getopts, res_setopts
- * and supplementary internal functions. If you are adding support for a
- * new TCP/IP stack of resolver configuration information this is where
- * it will go.
- * @xref <f res_init> <f res_setopts> <f res_getopts> <f WhichOS> <f getRegKey>
- *
- * WSHelper DNS/Hesiod Library for WINSOCK
- *
- */
-
-/*-
- * Copyright (c) 1985, 1989 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_init.c 6.15 (Berkeley) 2/24/91";
-#endif /* LIBC_SCCS and not lint */
-
-#include <windows.h>
-#include <winsock.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windns.h> //DNS api's
-
-#include <shellapi.h>
-
-
-#include <mitwhich.h>
-
-#include "resource.h"
-
-char debstr[80];
-
-#define index strchr
-
-#ifndef MAKELONG
-#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
-#endif
-
-#define TCPIP_PATH "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"
-#define HKEY_MIT_PRIVATE HKEY_CLASSES_ROOT
-#define WSH_MIT_PRIVATE_DOMAIN_SUBKEY TCPIP_PATH"\\Domain"
-#define WSH_MIT_PRIVATE_NAMESERVER_SUBKEY TCPIP_PATH"\\NameServer"
-
-DWORD WhichOS( DWORD *check);
-
-static int const getRegKeyEx(const HKEY key, const char *subkey, const char *value, char *buf, unsigned int len);
-
-int WINAPI wsh_getdomainname(char* name, int size);
-
-static HMODULE this_module();
-
-
-/*
- * Resolver state default settings
- */
-// @struct _res | a structure of this type holds the state information for the
-// resolver options
-struct state _res = {
- RES_TIMEOUT, /* @field retransmition time interval */
- 4, /* @field number of times to retransmit */
- RES_DEFAULT, /* @field options flags */
- 1, /* @field number of name servers */
-};
-
-#ifndef _MSC_VER
-
-#define _upcase(c) (((c) <= 'Z' && (c) >= 'A') ? (c) + 'a' - 'A' : (c))
-#define _chricmp(a, b) (_upcase(a) - _upcase(b))
-
-int
-#ifdef __cplusplus
-inline
-#endif
-_strnicmp( register const char *a, register const char *b, register size_t n)
-{
- register int cmp = 0; /* equal */
- while( n-- && !(cmp = _chricmp(*a, *b)) && (a++, *b++) /* *a == *b anyways */ );
- return cmp;
-};
-
-#endif
-
-
-/*
- This function retrieves the default domain name and search order. It will look to see if an
- environment variable LOCALDOMAIN is defined. Otherwise, the domain associated with the local host
- is used. Otherwise, it will try to find the domain name from the registry
-
- \retval The return value is 0 if the operation was successful.
- Otherwise the value -1 is returned.
-
-*/
-int
-WINAPI
-res_init()
-{
- register char *cp, **pp;
-
- register int n;
-
- int haveenv = 0; /* have an environment variable for local domain */
- int havedomain = 0; /* 0 or 1 do we have a value for the domain */
-
- LONG result1 = -1995;
-
-#define WSH_SPACES " \t,;="
-
- _res.nsaddr.sin_addr.s_addr = INADDR_ANY;
- _res.nsaddr.sin_family = AF_INET;
- _res.nsaddr.sin_port = htons(NAMESERVER_PORT);
- _res.nscount = 1;
-
-
- /* Allow user to override the local domain definition */
- if ((cp = getenv("LOCALDOMAIN")) != NULL) {
- strncpy(_res.defdname, cp, sizeof(_res.defdname));
- haveenv++;
- havedomain++;
- };
-
- if (!havedomain) {
- if (!wsh_getdomainname(_res.defdname, sizeof(_res.defdname)))
- havedomain++;
- }
-
-
-
- if( 0 != havedomain){
- // return early, we've done our job
- /* find components of local domain that might be searched */
-
- pp = _res.dnsrch;
- *pp++ = _res.defdname;
- for (cp = _res.defdname, n = 0; *cp; cp++)
- if (*cp == '.')
- n++;
- cp = _res.defdname;
- for (; n >= LOCALDOMAINPARTS && pp < _res.dnsrch + MAXDFLSRCH;
- n--) {
- cp = index(cp, '.');
- *pp++ = ++cp;
- }
- *pp++ = 0;
- }
-
- _res.options |= RES_INIT;
- return(0);
-}
-
-
-/*
- res_setopts -- unsupported
-*/
-
-void
-WINAPI
-res_setopts(long opts)
-{
-}
-
-
-
-/*
- res_getopts -- unsupported
-*/
-
-long
-WINAPI
-res_getopts()
-{
- return -1;
-}
-
-/* --------------------------------------------------------------------------*/
-/* Excerpt from IPTYPES.H */
-#define MAX_HOSTNAME_LEN 128 // arb.
-#define MAX_DOMAIN_NAME_LEN 128 // arb.
-#define MAX_SCOPE_ID_LEN 256 // arb.
-
-
-
-/*
-
- @doc MISC
-
- @func DWORD | WhichOS | This function will attempt to
- determine which Operating System and subsystem is being used by the
- application. It should function under Win16, Windows NT amd Windows
- 95 at least. It does call WSAStartup() and WSACleanup(). This
- function does have side effects on some global variables. See the
- comments below.
-
- @parm DWORD *| check | a pointer to a DWORD, a value indicating
- which operating system and/or subsystem is being used will be stored
- in this parameter upon return.
-
- @rdesc a NULL will indicate that we could not determine what OS is
- being used. The high word contains:
-
-
- @flag MS_OS_WIN (1) | The application is running under Windows or WFWG
- @flag MS_OS_95 (2) | The application is running under Windows 95
- @flag MS_OS_NT (3) | The application is running under Windows NT
- @flag MS_OS_2000 (4) | The application is running under Windows 2000
- @flag MS_OS_XP (5) | The application is running under Windows XP
- @flag MS_OS_2003 (6) | The application is running under Windows 2003
- @flag MS_OS_NT_UNKNOWN (7) | The application is running under Windows NT family beyond 2003
- @flag MS_OS_UNKNOWN (0) | It looks like Windows but not any version that
- we know of.
-
- <nl>these are defined in mitwhich.h<nl>
-
-The low word contains one of the following, which is derived from the winsock implementation: <nl>
-
- @flag MS_NT_32 (1) | The MS 32 bit Winsock stack for NT is being used
- @flag MS_NT_16 (2) | The MS 16 bit Winsock stack under NT is being used
- @flag MS_95_32 (3) | The MS 32 bit Winsock stack under 95 is being used
- @flag MS_95_16 (4) | The MS 16 bit Winsock stack under 95 is being used
- @flag NOVELL_LWP_16 (5) | The Novell 16 Winsock stack is being used
- @flag UNKNOWN_16_UNDER_32 (-2) | We don't know the stack.
- @flag UNKNOWN_16_UNDER_16 (-3) | We don't know the stack.
- @flag UNKNOWN_32_UNDER_32 (-4) | We don't know the stack.
- @flag UNKNOWN_32_UNDER_16 (-5) | We don't know the stack.
-
-*/
-DWORD
-WhichOS(
- DWORD *check
- )
-{
- WORD wVersionRequested;
- WSADATA wsaData; // should be a global?
- int err;
-
- int checkStack = 0;
- int checkOS = 0;
- static DWORD dwCheck = 0xFFFFFFFF;
-
- if ( dwCheck != 0xFFFFFFFF ) {
- if ( check )
- *check = dwCheck;
- return dwCheck;
- }
-
- // first get the information from WSAStartup because it may give
- // more consistent information than Microsoft APIs.
-
- wVersionRequested = 0x0101;
-
- err = WSAStartup( wVersionRequested, &wsaData );
-
- if( err != 0 ){
- MessageBox( NULL,
- "It looks like a useable winsock.dll\n"
- "could not be located by the wshelp*.dll\n"
- "Please check your system configuration.",
- "Problem in wshelper.dll", MB_OK );
- check = 0;
- return(0);
- }
-
- WSACleanup();
-
- if( _res.options & RES_DEBUG ){
- wsprintf( debstr, wsaData.szDescription );
- OutputDebugString( debstr );
- }
-
- if( (0 == checkStack) && (0 == stricmp( wsaData.szDescription, NT_32 ))){
- // OK we appear to be running under NT in the 32 bit subsystem
- // so we must be a 32 bit application.
- // This also implies that we can get the TCPIP parameters out
- // of the NT registry.
- checkStack = MS_NT_32;
- }
-
- if( (0 == checkStack) && (0 == stricmp( wsaData.szDescription, NT_16 ))){
- // this implies we're running under NT in the 16 bit subsystem
- // so we must be a 16 bit application
- // This means we have to go through some strange gyrations to read the
- // TCPIP parameters out of the NT 32 bit registry.
- checkStack = MS_NT_16;
- checkOS = MS_OS_NT;
- }
-
- if( (0 == checkStack) && (0 == stricmp( wsaData.szDescription, W95_32 ))){
- // get the TCPIP parameters out of the Win95 registry
- checkStack = MS_95_32;
- checkOS = MS_OS_95; // ??
- }
-
- if( (0 == checkStack) && (0 == stricmp( wsaData.szDescription, W95_16 ))){
- // go through the pain of getting the TCPIP parameters out of the Win95
- // 32 bit registry
- checkStack = MS_95_16;
- checkOS = MS_OS_95;
- }
-
- if( (0 == checkStack) && (0 == stricmp( wsaData.szDescription, LWP_16 ))){
- // get the information out of the %NDIR%\TCP\RESOLV.CFG file
- checkStack = NOVELL_LWP_16;
- checkOS = MS_OS_WIN;
- }
-
- if( 0 == checkStack ){
- // at this time we don't easily know how to support this stack
- checkStack = STACK_UNKNOWN;
- }
-
-#if !defined(_WIN32)
- // Note, if this is the 32 bit DLL we can't use the following
- // functions to determine the OS because they are
- // obsolete. However, we should be able to use them in the 16 bit
- // DLL.
- {
- DWORD dwVersion = 0;
- DWORD dwFlags = 0;
-
- dwFlags = GetWinFlags();
- if( _res.options & RES_DEBUG ){
- wsprintf( debstr, "dwFlags = %x ", dwFlags );
- OutputDebugString( debstr );
- }
-
- dwVersion = GetVersion();
-
- if( _res.options & RES_DEBUG ){
- wsprintf( debstr, "dwVersion = %8lx ", dwVersion );
- OutputDebugString( debstr );
- }
-
- if( 95 == (DWORD)(HIBYTE(LOWORD(dwVersion))) ){
- // OK, we're a 16 bit app running on 95?
- checkOS = MS_OS_95;
- }
-
- if( dwFlags & 0x4000 ){
- // This means that this is a 16 bit application running
- // under WOW layer on NT.
-
- // So, we're going to get the TCPIP parameters out of the
- // 32 bit registry, but we don't know which set of
- // registry entries yet.
-
- // Since we see these version numbers and we're under WOW
- // we must be under NT 4.0 but we don't necessarily know
- // the stack
- checkOS = MS_OS_NT;
- }
-
-
- if( checkOS == 0 ){
- // We are a 16 bit application running on a 16 bit operating system
- checkOS = MS_OS_WIN; // assumption, but we're not under 95 and not under NT, it looks like
- if( checkStack == STACK_UNKNOWN ){
- checkStack = UNKNOWN_16_UNDER_16;
- }
- }
- }
-#endif // !_WIN32
-
-#if defined(_WIN32)
- // This must be a 32 bit application so we are either under NT,
- // Win95, or WIN32s
- {
- OSVERSIONINFO osvi;
-
- memset( &osvi, 0, sizeof(OSVERSIONINFO));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetVersionEx( &osvi );
-
- if( osvi.dwPlatformId == VER_PLATFORM_WIN32s ){
- if( checkStack == STACK_UNKNOWN ){
- checkStack = UNKNOWN_16_UNDER_16;
- }
- checkOS = MS_OS_WIN;
- wsprintf( debstr, "Microsoft Win32s %d.%d (Build %d)\n",
- osvi.dwMajorVersion,
- osvi.dwMinorVersion,
- osvi.dwBuildNumber & 0xFFFF );
- }
-
- if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ){
- if( checkStack == STACK_UNKNOWN ){
- checkStack = UNKNOWN_32_UNDER_32;
- }
- checkOS = MS_OS_95;
- wsprintf( debstr, "Microsoft Windows 95 %d.%d (Build %d)\n",
- osvi.dwMajorVersion,
- osvi.dwMinorVersion,
- osvi.dwBuildNumber & 0xFFFF );
- }
-
- if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ){
- if( checkStack == STACK_UNKNOWN ){
- checkStack = UNKNOWN_32_UNDER_32;
- }
- if ( osvi.dwMajorVersion <= 4 )
- checkOS = MS_OS_NT;
- else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
- checkOS = MS_OS_2000;
- else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
- checkOS = MS_OS_XP;
- else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
- checkOS = MS_OS_2003;
- else
- checkOS = MS_OS_NT_UNKNOWN;
- wsprintf( debstr, "Microsoft Windows NT family %d.%d (Build %d)\n",
- osvi.dwMajorVersion,
- osvi.dwMinorVersion,
- osvi.dwBuildNumber & 0xFFFF );
- }
-
- if( _res.options & RES_DEBUG ){
- OutputDebugString( debstr );
- }
- }
-
-#endif // _WIN32
-
- // At this point we should know the OS.
- // We should also know the subsystem but not always the stack.
-
- dwCheck = MAKELONG(checkOS, checkStack);
- if ( check )
- *check = dwCheck;
- return( dwCheck );
-}
-
-
-static
-BOOL
-get_nt5_adapter_param(
- char* param,
- WORD skip,
- char* buf,
- unsigned int len
- )
-{
- static char linkage[BUFSIZ*4];
- char* p;
- char* q;
- HKEY hAdapters;
-
- char* DEVICE_STR = "\\Device\\";
- SIZE_T DEVICE_LEN = strlen(DEVICE_STR);
-
-#define TCPIP_PATH_ADAPTERS "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces"
-#define TCPIP_PATH_LINKAGE "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Linkage"
-
- if (!getRegKeyEx(HKEY_LOCAL_MACHINE, TCPIP_PATH_LINKAGE, "Bind", linkage, sizeof(linkage)))
- return FALSE;
-
- p = linkage;
-
- RegOpenKeyEx(HKEY_LOCAL_MACHINE, TCPIP_PATH_ADAPTERS, 0,
- KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
- &hAdapters);
-
- while (*p) {
- q = strstr(p, DEVICE_STR);
- if (!q) {
- while (*p) p++;
- p++;
- continue;
- }
- q += DEVICE_LEN;
- p = q;
- while (*p) p++;
- p++;
- buf[0] = '\0';
- if (getRegKeyEx(hAdapters, q, param, buf, len) && !buf[0]) {
- if (!skip) {
- RegCloseKey(hAdapters);
- return TRUE;
- }
- else
- skip--;
- }
- }
- RegCloseKey(hAdapters);
-
- // Bottom out by looking at default parameters
- {
- char Tcpip_path[_MAX_PATH];
-
- if(!LoadString(this_module(), IDS_TCPIP_PATH_NT,
- Tcpip_path, sizeof(Tcpip_path)))
- strcpy(Tcpip_path, NT_TCP_PATH);
- return getRegKeyEx(HKEY_LOCAL_MACHINE, Tcpip_path, param, buf, len);
- }
- return FALSE;
-}
-
-
-
-static
-BOOL
-_getdomainname(
- char* name,
- int size
- )
-{
- char buf[BUFSIZ];
-
- char* dhcp_param = "DhcpDomain";
- char* param = "Domain";
- BOOL ok = FALSE;
- char* rbuf;
- unsigned int rlen;
-
- if (!name || (size <= 0))
- return FALSE;
-
- rbuf = (size >= sizeof(buf))?name:buf;
- rlen = (size >= sizeof(buf))?size:sizeof(buf);
-
-
- ok = get_nt5_adapter_param(dhcp_param, 0, rbuf, rlen);
- if (!ok || !rbuf[0])
- ok = get_nt5_adapter_param(param, 0, rbuf, rlen);
-
- if (ok && rbuf[0]) {
- if (size < (lstrlen(rbuf) + 1))
- return FALSE;
- if (rbuf != name)
- strncpy(name, rbuf, size);
- return TRUE;
- }
- return FALSE;
-}
-
-/*
- Gets the base part of the hostname
- defined in wshelper\res_init.c
-
- \param[in, out] name pointer to a buffer that receives a null-terminated string containing the computer name
- \param[in] size specifies the size of the buffer, in chars (must be large
- enough to hold NULL-terminated host name)
-
- \retval return 0 ifsuccess, -1 on error.
-
-*/
-int WINAPI
-wsh_gethostname(char* name, int size)
-{
- if (name){
- // Get and display the name of the computer.
-
- if( GetComputerName(name, &size) )
- {
- while (*name && (*name != '.'))
- {
- *name = tolower(*name);
- name++;
- }
- if (*name == '.') *name = 0;
- return 0;
- }
- }
- return -1;
-}
-
-/*
- Gets the machine's domain name
-
- \param[in, out] name pointer to a buffer that receives a null-terminated string containing the domain name
- \param[in] size specifies the size of the buffer, in chars (must be large
- enough to hold NULL-terminated domain name)
-
- \retval return 0 ifsuccess, -1 on error.
-
-
-*/
-int WINAPI
-wsh_getdomainname(char* name, int size)
-{
- DNS_STATUS status;
-
- PDNS_RECORD pDnsRecord;
- DNS_FREE_TYPE freetype ;
-
- DWORD length;
- char hostName[BUFSIZ];
-
- length = BUFSIZ;
- freetype = DnsFreeRecordListDeep;
-
-
- // Get and display the name of the computer.
-
- if( GetComputerName(hostName, &length) )
- {
-
- status = DnsQuery_A(hostName, //pointer to OwnerName
- DNS_TYPE_A, //Type of the record to be queried
- DNS_QUERY_BYPASS_CACHE|DNS_QUERY_NO_LOCAL_NAME, // Bypasses the resolver cache on the lookup.
- NULL, //contains DNS server IP address
- &pDnsRecord, //Resource record comprising the response
- NULL); //reserved for future use
-
- if (status)
- return -1;
- else
- {
- char* cp;
- cp = index(pDnsRecord->pName, '.');
- if (cp)
- {
- cp++;
- strncpy(name, cp, size);
- name[size-1] = '\0';
- DnsRecordListFree(pDnsRecord, freetype);
- return(0);
- }
- DnsRecordListFree(pDnsRecord, freetype);
-
- }
- }
-
- /* try to get local domain from the registry */
- if (_getdomainname(name, size))
- return 0;
- else
- return -1;
-}
-
-
-
-
-
-
-
-
-// @func int | getRegKeyEx | This function is only used when the library is
-// running under a known 32-bit Microsoft Operating
-// system
-
-// @parm const HKEY | key | Specifies a a currently open key or any
-// of the following predefined reserved handle values:
-// HKEY_CLASSES_ROOT
-// KEY_CURRENT_USER
-// HKEY_LOCAL_MACHINE
-// HKEY_USERS
-//
-// @parm const char * | subkey | Specifies a pointer to a null-terminated
-// string containing the name of the subkey to open. If this parameter is NULL
-// or a pointer to an empty string, the function will open a new handle
-// of the key identified by the key parameter.
-//
-// @parm const char * | value | Specifiea a pointer to a null-terminated
-// string containing the name of the value to be queried.
-//
-// @parm char * | buf | Specifies a pointer to a buffer that recieves the
-// key's data. This parameter can be NULL if the data is not required.
-//
-// @parm unsigned int | len | Specifies the size of buffer 'buf'.
-//
-// @rdesc Returns an int that can mean:
-//
-// FALSE - if the subkey cannot be queried or possibly opened.
-// TRUE - if the subkey can be queried but it is not of type: REG_EXPAND_SZ
-// If the subkey can be queried, and its type is REG_EXPAND_SZ, and it can
-// be expanded the return value is the number of characters stored in the
-// buf parameter. If the number of characters is greater than the size of the
-// of the destination buffer, the return value should be the size of the
-// buffer required to hold the value.
-
-static
-int const
-getRegKeyEx(
- const HKEY key,
- const char *subkey,
- const char *value,
- char *buf,
- unsigned int len
- )
-{
- HKEY hkTcpipParameters;
- LONG err;
- DWORD type, cb;
- char *env_buf;
-
-
- if (RegOpenKey(key, subkey, &hkTcpipParameters) == ERROR_SUCCESS) {
- cb = len;
- err = RegQueryValueEx(hkTcpipParameters, value, 0, &type, buf, &cb);
- RegCloseKey(hkTcpipParameters);
- if( err == ERROR_SUCCESS ){
- if( type == REG_EXPAND_SZ ){
- if( env_buf = malloc( cb ) ){
- err = ExpandEnvironmentStrings( strcpy( env_buf, buf ), buf, len );
- free( env_buf );
- return err;
- } else {
- return FALSE;
- }
- }
- return TRUE; // subkey could be queried but it was not of type REG_EXPAND_SZ
- } else {
- return FALSE; // subkey exists but could not be queried
- }
- }
- else
-
-// #endif // WIN32
-
- return FALSE; // subkey could not be opened
-}
-
-#ifdef __cplusplus
-inline
-#endif
-
-#include "wsh-int.h"
-
-static
-HMODULE
-this_module()
-{
- static HMODULE hModWSHelp = 0;
- if (!hModWSHelp)
- {
- // Note: these must match the DEF file entries
-#if defined (_WIN32)
- hModWSHelp = GetModuleHandle("WSHELP32");
-#else
- hModWSHelp = GetModuleHandle("WSHELPER");
-#endif
- }
- return hModWSHelp;
-}
-
-static
-int
-try_registry(
- HKEY hBaseKey,
- const char * name,
- DWORD * value
- )
-{
- HKEY hKey;
- LONG err;
- DWORD size;
-
- err = RegOpenKeyEx(hBaseKey,
- "Software\\MIT\\WsHelper",
- 0,
- KEY_QUERY_VALUE,
- &hKey);
- if (err)
- return 0;
- size = sizeof(value);
- err = RegQueryValueEx(hKey, name, 0, 0, value, &size);
- RegCloseKey(hKey);
- return !err;
-}
-
-void
-res_init_startup()
-{
- DWORD debug_on = 0;
-
-
- if (try_registry(HKEY_CURRENT_USER, "DebugOn", &debug_on) ||
- try_registry(HKEY_LOCAL_MACHINE, "DebugOn", &debug_on))
- {
- if (debug_on)
- _res.options |= RES_DEBUG;
- }
-}
-
-void
-res_init_cleanup()
-{
-
-}
diff --git a/src/windows/wshelper/res_quer.c b/src/windows/wshelper/res_quer.c
deleted file mode 100644
index 7836ed921..000000000
--- a/src/windows/wshelper/res_quer.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- *
- * @doc RESOLVE
- *
- *
- * @module res_quer.c | Contains the implementation of res_query,
- * res_search, and res_querydomain
- *
- * WSHelper DNS/Hesiod Library for WINSOCK
- *
- */
-
-/*
- * Copyright (c) 1988 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_query.c 5.11 (Berkeley) 3/6/91";
-#endif /* LIBC_SCCS and not lint */
-
-#include <windows.h>
-#include <winsock.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windns.h>
-
-#define MAX_MSG_SIZE 0x8000
-
-#define strcasecmp stricmp
-
-#ifdef _DEBUG
-#define DEBUG
-#endif
-int
-__hostalias(register const char *name, char* abuf);
-DNS_STATUS do_res_search(const char *name, int qclass, int type, u_char *retanswer, int retanswerlen, int* anslen);
-void __putshort(register u_short, register u_char *);
-void __putlong(register u_long, u_char *);
-int build_rr(char* p, PDNS_RECORD ptr, int qclass);
-int put_qname(char* p, char* qname);
-
-
-
-/*
- a generic query interface to the DNS name space. The query is performed with the dnsapi and
- the answer buffer is populated based on the returned RR set.
-
- \param[in] name domain name
- \param[in] qclass class of query(such as DNS_CLASS_INTERNET, DNS_CLASS_CSNET, DNS_CLASS_CHAOS,
- DNS_CLASS_HESIOD. Defined in windns.h)
- \param[in] type type of query(such as DNS_TYPE_A, DNS_TYPE_NS, DNS_TYPE_MX, DNS_TYPE_SRV. Defined in
- windns.h)
- \param[in] answer buffer to put answer in
- \param[in] anslen size of the answer buffer. compare the anslen with the return value, if the return
- value is bigger than anslen, it means the answer buffer doesn't contain the complete
- response. You will need to call this function again with a bigger answer buffer if
- you care about the complete response
-
- \retval return the size of the response on success, -1 on error
-
-
- */
-int WINAPI
-res_search(const char *name, int qclass, int type, u_char *answer, int anslen)
- /* domain name, class and type of query, buffer to put answer, size of answer */
-{
- char debstr[80];
- int n = 0;
- DNS_STATUS status;
- char queryname[DNS_MAX_NAME_BUFFER_LENGTH ];
- register const char *cp;
- int len = 0;
-
- char** domain;
-
- status = -1;
- memset(answer, 0, anslen);
- memset(queryname, 0, sizeof(queryname));
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- return (-1);
-
- for (cp = name, n = 0; *cp; cp++)
- if (*cp == '.')
- n++;
-
- if (n == 0 && !__hostalias(name, queryname) && strlen(queryname)>0)
- {
- status = do_res_search(queryname, qclass, type, answer, anslen, &len);
- if (status == 0)
- return len;
- }
-
- if ((n == 0 && _res.options & RES_DEFNAMES))
- // (n != 0 && *--cp != '.' && _res.options & RES_DNSRCH))
- {
- for (domain = _res.dnsrch; *domain; domain++) {
- strcpy(queryname, name);
- strcat(queryname, ".");
- strcat(queryname, *domain);
- status = do_res_search(queryname, qclass, type, answer, anslen, &len);
- if (status == 0)
- return len;
- }
- }
-
-
- strcpy(queryname, name);
- status = do_res_search(queryname, qclass, type, answer, anslen, &len);
-
-
- if (status)
- {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- {
- wsprintf(debstr, "res_query failed\n");
- OutputDebugString(debstr);
- }
-#endif
- return -1;
- }
- return len;
-}
-
-int
-put_qname(char* cp, char* qname)
-{
- char* p;
- char* temp;
- INT_PTR n = 0;
- INT_PTR i = 0;
- temp = qname;
- while (p = strchr(temp, '.'))
- {
- n = p - temp;
- if (n == 0)
- {
- temp++;
- break;
- }
- cp[0] = (int)n;
- cp++;
- i++;
- strncpy(cp, temp, n);
- temp = p+1;
- cp = cp + n;
- i = i + n;
- }
- n = strlen(temp);
- if (n > 0)
- {
- cp[0] = (int)n;
- cp++;
- i++;
- strcpy(cp, temp);
- cp = cp+n;
- }
- cp[0] = 0;
- i = i+n+1;
- return (int)i;
-}
-
-DNS_STATUS
-do_res_search(const char *queryname, int qclass, int type, u_char *retanswer, int retanswerlen, int* anslen)
-{
- PDNS_RECORD pDnsRecord;
- PDNS_RECORD ptr;
- DNS_STATUS status;
- DNS_FREE_TYPE freetype ;
- HEADER *hp;
- char *cp;
- int n;
- int i;
- u_char answer[MAX_MSG_SIZE];
- DWORD options = DNS_QUERY_STANDARD;
- freetype = DnsFreeRecordListDeep;
-
- memset(answer, 0, MAX_MSG_SIZE);
- if (!(_res.options & RES_RECURSE))
- options = options | DNS_QUERY_NO_RECURSION;
- if (_res.options & RES_USEVC)
- options = options | DNS_QUERY_USE_TCP_ONLY;
- if (_res.options & RES_IGNTC)
- options = options | DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE;
-
- status = DnsQuery_A(queryname, //pointer to OwnerName
- type, //Type of the record to be queried
- options,
- NULL, //contains DNS server IP address
- &pDnsRecord, //Resource record comprising the response
- NULL); //reserved for future use
-
- if (status)
- return status;
-
-
- hp = (HEADER *) answer;
- cp = answer + sizeof(HEADER);
-
- // populating the header
- hp->id = htons(++_res.id); // query id
- hp->qr = 1; // 0 for query 1 for response
- hp->opcode = 0; // standard query
- hp->aa = 1; // authoritative answer
- hp->tc = 0; // no truncation
- hp->rd = (_res.options & RES_RECURSE) != 0; // resursion desired
- hp->ra = 1; // recursion available
- hp->pr = (_res.options & RES_PRIMARY) != 0; // primary server required
- hp->rcode = NOERROR;
- hp->qdcount = htons(1); // number of question entries
- i = put_qname(cp, (char*)queryname);
- cp = cp + i;
- __putshort(type, (u_char *)cp);
- cp += sizeof(u_short);
- __putshort(qclass, (u_char *)cp);
- cp += sizeof(u_short);
-
- // get the answer
- for (n = 0, ptr = pDnsRecord; ptr; ptr = ptr->pNext)
- {
- if ((ptr->Flags).S.Section == DNSREC_ANSWER ||
- (type == DNS_TYPE_PTR && (ptr->Flags).S.Section==DNSREC_QUESTION))
- {
- i = build_rr(cp, ptr, qclass);
- cp = cp + i;
- //strcpy(cp, pDnsRecord->pName);
- //cp += strlen(pDnsRecord->pName);
- //cp++;
-
- n++;
- }
- }
- hp->ancount = htons(n);
-
- // get the authority
- for (n = 0, ptr = pDnsRecord; ptr; ptr = ptr->pNext)
- {
- if ((ptr->Flags).S.Section == DNSREC_AUTHORITY )
- {
- i = build_rr(cp, ptr, qclass);
- cp = cp + i;
-
- n++;
- }
- }
- hp->nscount = htons(n);
-
- // get the additional resource
- for (n = 0, ptr = pDnsRecord; ptr; ptr = ptr->pNext)
- {
- if ((ptr->Flags).S.Section == DNSREC_ADDITIONAL)
- {
- i = build_rr(cp, ptr, qclass);
- cp = cp + i;
-
- n++;
- }
-
- }
- hp->arcount = htons(n);
-
- *anslen = (int)(cp - answer);
- if (*anslen > retanswerlen)
- memcpy(retanswer, answer, retanswerlen); // partial copy
- else
- memcpy(retanswer, answer, *anslen);
- DnsRecordListFree(pDnsRecord, freetype);
- return status;
-}
-
-int
-build_rr(char* p, PDNS_RECORD ptr, int qclass)
-{
- int i = 0;
- int n = 0;
- char* cp = p;
- char* temp = NULL;
- unsigned int index = 0;
-
- i = put_qname(cp, ptr->pName);
- cp = p + i;
-
- __putshort(ptr->wType, (u_char *)cp);
- i += sizeof(u_short);
- cp = p + i;
- __putshort(qclass, (u_char *)cp);
- i += sizeof(u_short);
- cp = p + i;
- __putlong(ptr->dwTtl, (u_char*)cp);
- i += sizeof(u_long);
- cp = p + i;
- switch (ptr->wType)
- {
- case DNS_TYPE_A:
- __putshort(sizeof(ptr->Data.A), (u_char*)cp); //RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- memcpy(cp, &(ptr->Data.A), sizeof(ptr->Data.A));
- i += sizeof(ptr->Data.A);
- break;
- case DNS_TYPE_NS:
- case DNS_TYPE_MD:
- case DNS_TYPE_MF:
- case DNS_TYPE_CNAME:
- case DNS_TYPE_MB:
- case DNS_TYPE_MG:
- case DNS_TYPE_MR:
- case DNS_TYPE_PTR:
- temp = cp; // hold the spot for RD length
- i += sizeof(u_short);
- cp = p+i;
- n = put_qname(cp, ptr->Data.Ptr.pNameHost);
- i += n;
- __putshort(n, (u_char*)temp); //set RDLENGTH
- break;
- case DNS_TYPE_TEXT:
- case DNS_TYPE_HINFO:
- case DNS_TYPE_ISDN:
- case DNS_TYPE_X25:
- temp = cp; // hold the spot for RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- n = 0;
- for (index = 0; index < ptr->Data.Txt.dwStringCount; index++)
- {
- *cp = (int)(strlen(ptr->Data.Txt.pStringArray[index]));
- n += *cp;
- n++;
- strcpy(++cp, ptr->Data.Txt.pStringArray[index]);
- }
- i += n;
- __putshort(n,(u_char*)temp); // set RDLENGTH
- break;
- case DNS_TYPE_SRV:
- temp = cp; // hold the spot for RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- // priority
- __putshort(ptr->Data.Srv.wPriority, (u_char*)cp);
- i += sizeof(u_short);
- cp = p + i;
- //weight
- __putshort(ptr->Data.Srv.wWeight, (u_char*)cp);
- i += sizeof(u_short);
- cp = p + i;
- //port
- __putshort(ptr->Data.Srv.wPort, (u_char*)cp);
- i += sizeof(u_short);
- cp = p + i;
-
- n = put_qname(cp, ptr->Data.Srv.pNameTarget);
- i+=n;
- __putshort((u_short)(n + sizeof(u_short)*3),(u_char*)temp);
-
- break;
- case DNS_TYPE_MX:
- case DNS_TYPE_AFSDB:
- case DNS_TYPE_RT:
- temp = cp; // hold the spot for RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- __putshort(ptr->Data.Mx.wPreference, (u_char*)cp); // put wPreference
- i += sizeof(u_short);
- cp = p + i;
- n = put_qname(cp, ptr->Data.Mx.pNameExchange);
- i+=n;
- __putshort((u_short)(n+sizeof(u_short)),(u_char*)temp);
- break;
- case DNS_TYPE_SOA:
- temp = cp; // hold the spot for RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- // primary server name
- n = put_qname(cp, ptr->Data.Soa.pNamePrimaryServer);
- i+= n;
- cp = p + i;
- //the person responsible for this zone.
- n += put_qname(cp, ptr->Data.Soa.pNameAdministrator);
- i += n;
- cp = p + i;
- //SERIAL
- __putlong(ptr->Data.Soa.dwSerialNo, cp);
- n += sizeof(u_long);
- i += sizeof(u_long);
- cp = p + i;
- //refresh
- __putlong(ptr->Data.Soa.dwRefresh, cp);
- n += sizeof(u_long);
- i += sizeof(u_long);
- cp = p + i;
- //retry
- __putlong(ptr->Data.Soa.dwRetry, cp);
- n += sizeof(u_long);
- i += sizeof(u_long);
- cp = p + i;
- // expire
- __putlong(ptr->Data.Soa.dwExpire, cp);
- n += sizeof(u_long);
- i += sizeof(u_long);
- cp = p + i;
- // minimum TTL
- __putlong(ptr->Data.Soa.dwDefaultTtl, cp);
- n += sizeof(u_long);
- i += sizeof(u_long);
- // set RDLength
- __putshort(n,(u_char*)temp);
- break;
- case DNS_TYPE_NULL:
- __putshort((short)ptr->Data.Null.dwByteCount, (u_char*)cp); //RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- memcpy(cp, ptr->Data.Null.Data, ptr->Data.Null.dwByteCount);
- i += ptr->Data.Null.dwByteCount;
- break;
- case DNS_TYPE_WKS: // needs more work
- temp = cp; // hold the spot for RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- // address
- memcpy(cp, &(ptr->Data.Wks.IpAddress), sizeof(ptr->Data.Wks.IpAddress));
- n = sizeof(ptr->Data.Wks.IpAddress);
- i += sizeof(ptr->Data.Wks.IpAddress);
- cp = p + i;
- // protocol
- *cp = ptr->Data.Wks.chProtocol;
- i++;
- n++;
- cp = p + i;
- //bit mask
- memcpy(cp, &(ptr->Data.Wks.BitMask), sizeof(ptr->Data.Wks.BitMask));
- n+=sizeof(ptr->Data.Wks.BitMask);
- i += n;
- // set RDLength
- __putshort(n,(u_char*)temp);
- break;
- case DNS_TYPE_MINFO:
- case DNS_TYPE_RP:
- temp = cp; // hold the spot for RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- // pNameMailbox
- n = put_qname(cp, ptr->Data.Minfo.pNameMailbox);
- i+= n;
- cp = p + i;
- // pNameErrorsMailbox;
- n += put_qname(cp, ptr->Data.Minfo.pNameMailbox);
- i += n;
- // set RDLength
- __putshort(n,(u_char*)temp);
- break;
- case DNS_TYPE_AAAA:
- __putshort(sizeof(ptr->Data.AAAA), (u_char*)cp); //RDLENGTH
- i += sizeof(u_short);
- cp = p + i;
- memcpy(cp, &(ptr->Data.AAAA), sizeof(ptr->Data.AAAA));
- i += sizeof(ptr->Data.AAAA);
-
- break;
- }
- return i;
-}
-
-
-int
-__hostalias(register const char *name, char* abuf)
-{
- register char *C1, *C2;
- FILE *fp;
- char *file;
-// char *getenv(), *strcpy(), *strncpy(); // pbh XXX 11/1/96
- char buf[BUFSIZ];
-
-
- file = getenv("HOSTALIASES");
- if (file == NULL || (fp = fopen(file, "r")) == NULL)
- return -1;
- buf[sizeof(buf) - 1] = '\0';
- while (fgets(buf, sizeof(buf), fp)) {
- for (C1 = buf; *C1 && !isspace(*C1); ++C1);
- if (!*C1)
- break;
- *C1 = '\0';
- if (!strcasecmp(buf, name)) {
- while (isspace(*++C1));
- if (!*C1)
- break;
- for (C2 = C1 + 1; *C2 && !isspace(*C2); ++C2);
- abuf[sizeof(abuf) - 1] = *C2 = '\0';
- (void)strncpy(abuf, C1, sizeof(abuf) - 1);
- fclose(fp);
- return 0;
- }
- }
- fclose(fp);
- return -1;
-}
-
-int WINAPI
-res_mkquery(int op, const char *dname,
- int qclass, int type,
- const char *data, int datalen,
- const struct rrec *newrr,
- char *buf, int buflen)
-{
- return -1;
-}
-
-int WINAPI
-res_querydomain(const char *name,
- const char *domain,
- int qclass, int type,
- u_char *answer, int anslen)
-{
- return -1;
-}
-
-int WINAPI
-res_send(const char *msg, int msglen,
- char *answer, int anslen)
-{
- return -1;
-}
-
-int WINAPI
-res_query(char *name, int qclass, int type, u_char *answer, int anslen)
-{
- return -1;
-}
diff --git a/src/windows/wshelper/resource.h b/src/windows/wshelper/resource.h
deleted file mode 100644
index cc5f082ff..000000000
--- a/src/windows/wshelper/resource.h
+++ /dev/null
@@ -1,29 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by resource.rc
-//
-#define IDS_DEF_HES_RHS 1
-#define IDS_DEF_HES_LHS 2
-#define IDS_DEF_HES_CONFIG_FILE 3
-#define IDS_DEF_RESCONF_PATH 4
-#define IDS_DEF_DNS1 5
-#define IDS_DEF_DNS2 6
-#define IDS_DEF_DNS3 7
-#define IDS_TCPIP_PATH_NT 8
-#define IDS_TCPIP_PATH_95 9
-#define IDS_NT_DOMAIN_KEY 10
-#define IDS_NT_NS_KEY 11
-#define IDS_W95_DOMAIN_KEY 12
-#define IDS_W95_NS_KEY 13
-#define IDS_TCPIP_PATH_NT_TRANSIENT 14
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/src/windows/wshelper/resource.rc b/src/windows/wshelper/resource.rc
deleted file mode 100644
index a2d333284..000000000
--- a/src/windows/wshelper/resource.rc
+++ /dev/null
@@ -1,64 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include <afxres.h>
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include <afxres.h>\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include ""..\\version.rc""\r\n"
- "#include ""string.rc""\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#include "..\version.rc"
-#include "string.rc"
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
diff --git a/src/windows/wshelper/string.rc b/src/windows/wshelper/string.rc
deleted file mode 100644
index 6916dbc72..000000000
--- a/src/windows/wshelper/string.rc
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifdef APSTUDIO_INVOKED
-#error this file is not editable by App Studio
-#endif // APSTUDIO_INVOKED
-
-#include <hesiod.h>
-#include <mitwhich.h>
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_DEF_HES_RHS DEF_RHS
- IDS_DEF_HES_LHS DEF_LHS
- IDS_DEF_HES_CONFIG_FILE HESIOD_CONF
- IDS_DEF_RESCONF_PATH _PATH_RESCONF
- IDS_DEF_DNS1 DNS1
- IDS_DEF_DNS2 DNS2
- IDS_DEF_DNS3 DNS3
- IDS_TCPIP_PATH_NT NT_TCP_PATH
- IDS_TCPIP_PATH_95 W95_TCP_PATH
- IDS_NT_DOMAIN_KEY NT_DOMAIN_KEY
- IDS_NT_NS_KEY NT_NS_KEY
- IDS_W95_DOMAIN_KEY W95_DOMAIN_KEY
- IDS_W95_NS_KEY W95_NS_KEY
- IDS_TCPIP_PATH_NT_TRANSIENT NT_TCP_PATH_TRANS
-END
diff --git a/src/windows/wshelper/ver.rc.inc b/src/windows/wshelper/ver.rc.inc
deleted file mode 100644
index f927fb195..000000000
--- a/src/windows/wshelper/ver.rc.inc
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifdef RC_INVOKED
-
-VS_VERSION_INFO VERSIONINFO
-FILEVERSION VER_FILEVERSION
-PRODUCTVERSION VER_PRODUCTVERSION
-FILEFLAGSMASK VER_FILEFLAGSMASK
-FILEFLAGS VER_FILEFLAGS
-FILEOS VER_FILEOS
-FILETYPE VER_FILETYPE
-FILESUBTYPE VER_FILESUBTYPE
-BEGIN
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0409, 0x04B0
- END
-
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904B0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */
- BEGIN
-#if defined(VER_EXTRA_LABEL) && defined(VER_EXTRA_VALUE)
- VALUE VER_EXTRA_LABEL, VER_EXTRA_VALUE
-#endif
-#ifdef VER_COMMENT
- VALUE "Comment", VER_COMMENT
-#endif
-#ifdef VER_USERNAME
- VALUE "Built By", VER_USERNAME
-#endif
-#ifdef VER_HOSTNAME
- VALUE "Build Host", VER_HOSTNAME
-#endif
-#ifdef VER_DATE
- VALUE "Build Time", VER_DATE
-#endif
-#ifdef VER_VENDOR
- VALUE "Modified by Vendor", VER_VENDOR
-#endif
- VALUE "CompanyName", VER_COMPANYNAME_STR
- VALUE "FileDescription", VER_FILEDESCRIPTION_STR EXPORT_TAG
- VALUE "FileVersion", VER_FILEVERSION_STR
- VALUE "InternalName", VER_INTERNALNAME_STR
- VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
-#ifdef VER_LEGALTRADEMARK_STR
- VALUE "LegalTrademark", VER_LEGALTRADEMARK_STR
-#endif
- VALUE "OriginalFilename",VER_ORIGINALFILENAME_STR
- VALUE "ProductName", VER_PRODUCTNAME_STR
- VALUE "ProductVersion", VER_PRODUCTVERSION_STR
-#ifdef VER_SPECIALBUILD
- VALUE "SpecialBuild", VER_SPECIALBUILD
-#endif
- END
- END
-END
-
-#endif
diff --git a/src/windows/wshelper/wsh-int.h b/src/windows/wshelper/wsh-int.h
deleted file mode 100644
index 04b1cfe57..000000000
--- a/src/windows/wshelper/wsh-int.h
+++ /dev/null
@@ -1,5 +0,0 @@
-void res_init_startup();
-void res_init_cleanup();
-
-void __putshort(register u_short s, register u_char *msgp);
-void __putlong(register u_long l, register u_char *msgp);
diff --git a/src/windows/wshelper/wshelp32.def b/src/windows/wshelper/wshelp32.def
deleted file mode 100644
index b0a5aeaaf..000000000
--- a/src/windows/wshelper/wshelp32.def
+++ /dev/null
@@ -1,33 +0,0 @@
-LIBRARY WSHELP32
-
-HEAPSIZE 1024
-EXPORTS
-; WEP @1 RESIDENTNAME
- res_init @2
- res_query @3
- res_search @4
- res_querydomain @5
- res_mkquery @6
- res_send @7
- dn_comp @8
- rdn_expand @9
- rgethostbyname @10
- rgethostbyaddr @11
- hes_to_bind @12
- hes_resolve @13
- hes_error @14
- hes_getmailhost @15
- hes_getservbyname @16
- hes_getpwnam @17
- res_getopts @18
- res_setopts @19
- inet_aton @20
- gethinfobyname @21
- getmxbyname @22
- getrecordbyname @23
- rrhost @24
- rgetservbyname @25
- hes_getpwuid @26
- wsh_gethostname
- wsh_getdomainname
- hes_free
diff --git a/src/windows/wshelper/wshelp64.def b/src/windows/wshelper/wshelp64.def
deleted file mode 100644
index e28dd16cf..000000000
--- a/src/windows/wshelper/wshelp64.def
+++ /dev/null
@@ -1,33 +0,0 @@
-LIBRARY WSHELP64
-
-HEAPSIZE 1024
-EXPORTS
-; WEP @1 RESIDENTNAME
- res_init @2
- res_query @3
- res_search @4
- res_querydomain @5
- res_mkquery @6
- res_send @7
- dn_comp @8
- rdn_expand @9
- rgethostbyname @10
- rgethostbyaddr @11
- hes_to_bind @12
- hes_resolve @13
- hes_error @14
- hes_getmailhost @15
- hes_getservbyname @16
- hes_getpwnam @17
- res_getopts @18
- res_setopts @19
- inet_aton @20
- gethinfobyname @21
- getmxbyname @22
- getrecordbyname @23
- rrhost @24
- rgetservbyname @25
- hes_getpwuid @26
- wsh_gethostname
- wsh_getdomainname
- hes_free
diff --git a/src/windows/wshelper/wshelper.def b/src/windows/wshelper/wshelper.def
deleted file mode 100644
index 5b67a3d60..000000000
--- a/src/windows/wshelper/wshelper.def
+++ /dev/null
@@ -1,42 +0,0 @@
-LIBRARY WSHELPER
-
-DESCRIPTION 'WINSOCK DNS/Hesiod Resolver Library'
-EXETYPE WINDOWS
-CODE LOADONCALL MOVEABLE DISCARDABLE
-DATA LOADONCALL PRELOAD FIXED SINGLE
-HEAPSIZE 1024
-SEGMENTS _TEXT PRELOAD FIXED
-EXPORTS
- WEP @1 RESIDENTNAME
- res_init @2
- res_query @3
- res_search @4
- res_querydomain @5
- res_mkquery @6
- res_send @7
- dn_comp @8
- rdn_expand @9
- rgethostbyname @10
- rgethostbyaddr @11
- hes_to_bind @12
- hes_resolve @13
- hes_error @14
- hes_getmailhost @15
- hes_getservbyname @16
- hes_getpwnam @17
- res_getopts @18
- res_setopts @19
- inet_aton @20
- gethinfobyname @21
- getmxbyname @22
- getrecordbyname @23
- rrhost @24
- rgetservbyname @25
- hes_getpwuid @26
-
-
-IMPORTS
- kernel.LoadLibraryEx32W
- kernel.FreeLibrary32W
- kernel._CallProcEx32W
- kernel.GetProcAddress32W