Add host aliases to hostent if available and requested.
Only copy servent aliases if available and requested.
svn path=/trunk/; revision=74730
BOOL
mswBufferAppendBlob_Hostent(_Inout_ PMSW_BUFFER mswBuf,
_Inout_ LPWSAQUERYSETW lpRes,
BOOL
mswBufferAppendBlob_Hostent(_Inout_ PMSW_BUFFER mswBuf,
_Inout_ LPWSAQUERYSETW lpRes,
+ _In_ char** hostAliasesA,
_In_ char* hostnameA,
_In_ DWORD ip4addr)
{
_In_ char* hostnameA,
_In_ DWORD ip4addr)
{
/* aliases */
phe->h_aliases = (char**)(mswBufferEndPtr(mswBuf) - bytesOfs);
/* aliases */
phe->h_aliases = (char**)(mswBufferEndPtr(mswBuf) - bytesOfs);
- if (!mswBufferAppendPtr(mswBuf, NULL))
- return FALSE;
+ if (hostAliasesA)
+ {
+ if (!mswBufferAppendStrLstA(mswBuf,
+ (void**)hostAliasesA,
+ -(DWORD)bytesOfs))
+ return FALSE;
+ }
+ else
+ {
+ if (!mswBufferAppendPtr(mswBuf, NULL))
+ return FALSE;
+ }
/* addr_list */
RtlZeroMemory(lst, sizeof(lst));
/* addr_list */
RtlZeroMemory(lst, sizeof(lst));
pse->s_aliases = (char**)(mswBufferEndPtr(mswBuf) - bytesOfs);
pse->s_aliases = (char**)(mswBufferEndPtr(mswBuf) - bytesOfs);
- if (!mswBufferAppendStrLstA(mswBuf,
- (void**)serviceAliasesA,
- -(DWORD)bytesOfs))
- return FALSE;
+ if (serviceAliasesA)
+ {
+ if (!mswBufferAppendStrLstA(mswBuf,
+ (void**)serviceAliasesA,
+ -(DWORD)bytesOfs))
+ return FALSE;
+ }
+ else
+ {
+ if (!mswBufferAppendPtr(mswBuf, NULL))
+ return FALSE;
+ }
pse->s_name = (char*)(mswBufferEndPtr(mswBuf) - bytesOfs);
pse->s_name = (char*)(mswBufferEndPtr(mswBuf) - bytesOfs);
mswBufferAppendBlob_Hostent(
_Inout_ PMSW_BUFFER mswBuf,
_Inout_ LPWSAQUERYSETW lpRes,
mswBufferAppendBlob_Hostent(
_Inout_ PMSW_BUFFER mswBuf,
_Inout_ LPWSAQUERYSETW lpRes,
+ _In_ char** hostAliasesA,
+ _In_ char* hostnameA,
_In_ DWORD ip4addr);
BOOL
_In_ DWORD ip4addr);
BOOL
INT
NSP_LookupServiceNextW(
_In_ PWSHANDLEINTERN data,
INT
NSP_LookupServiceNextW(
_In_ PWSHANDLEINTERN data,
+ _In_ DWORD dwControlFlags,
_Inout_ LPWSAQUERYSETW lpRes,
_Inout_ LPDWORD lpResLen);
_Inout_ LPWSAQUERYSETW lpRes,
_Inout_ LPDWORD lpResLen);
INT
NSP_GetHostByNameHeapAllocW(
INT
NSP_GetHostByNameHeapAllocW(
- _In_ WCHAR* name,
- _In_ GUID* lpProviderId,
+ _In_ PWSHANDLEINTERN data,
+ _In_ DWORD dwControlFlags,
_Out_ PWSHOSTINFOINTERN hostinfo);
INT
NSP_GetServiceByNameHeapAllocW(
_Out_ PWSHOSTINFOINTERN hostinfo);
INT
NSP_GetServiceByNameHeapAllocW(
- _In_ WCHAR* nameW,
- _In_ GUID* lpProviderId,
+ _In_ PWSHANDLEINTERN data,
+ _In_ DWORD dwControlFlags,
_Out_ PWSHOSTINFOINTERN hostinfo);
/* Implementations - Internal */
_Out_ PWSHOSTINFOINTERN hostinfo);
/* Implementations - Internal */
lpqsResults->dwSize = sizeof(*lpqsResults);
wsaErr = NSP_LookupServiceNextW(pLook,
lpqsResults->dwSize = sizeof(*lpqsResults);
wsaErr = NSP_LookupServiceNextW(pLook,
lpqsResults,
lpdwBufferLength);
lpqsResults,
lpdwBufferLength);
-NSP_GetHostByNameHeapAllocW(_In_ WCHAR* name,
- _In_ GUID* lpProviderId,
+NSP_GetHostByNameHeapAllocW(_In_ PWSHANDLEINTERN data,
+ _In_ DWORD dwControlFlags,
_Out_ PWSHOSTINFOINTERN hostinfo)
{
HANDLE hHeap = GetProcessHeap();
_Out_ PWSHOSTINFOINTERN hostinfo)
{
HANDLE hHeap = GetProcessHeap();
PDNS_RECORD dp;
PDNS_RECORD curr;
INT result = ERROR_SUCCESS;
PDNS_RECORD dp;
PDNS_RECORD curr;
INT result = ERROR_SUCCESS;
+ DWORD dwQueryFlags = DNS_QUERY_STANDARD;
/* needed to be cleaned up if != NULL */
dp = NULL;
/* needed to be cleaned up if != NULL */
dp = NULL;
+ if (data->hostnameW == NULL)
{
result = ERROR_INVALID_PARAMETER;
goto cleanup;
}
{
result = ERROR_INVALID_PARAMETER;
goto cleanup;
}
+ if ((data->dwControlFlags & LUP_DEEP) == 0)
+ {
+ dwQueryFlags |= DNS_QUERY_NO_RECURSION;
+ }
+
/* DNS_TYPE_A: include/WinDNS.h */
/* DnsQuery -- lib/dnsapi/dnsapi/query.c */
/* DNS_TYPE_A: include/WinDNS.h */
/* DnsQuery -- lib/dnsapi/dnsapi/query.c */
- dns_status = DnsQuery(name,
+ dns_status = DnsQuery(data->hostnameW,
/* extra dns servers */ 0,
&dp,
0);
/* extra dns servers */ 0,
&dp,
0);
curr = dp;
while ((curr->pNext != NULL) || (curr->wType != DNS_TYPE_A))
{
curr = dp;
while ((curr->pNext != NULL) || (curr->wType != DNS_TYPE_A))
{
+ /* FIXME build aliases list */
hostinfo->hostnameW = StrCpyHeapAllocW(hHeap, curr->pName);
hostinfo->addr4 = curr->Data.A.IpAddress;
hostinfo->hostnameW = StrCpyHeapAllocW(hHeap, curr->pName);
hostinfo->addr4 = curr->Data.A.IpAddress;
+ /* FIXME attach built aliases list */
result = ERROR_SUCCESS;
cleanup:
result = ERROR_SUCCESS;
cleanup:
-NSP_GetServiceByNameHeapAllocW(_In_ WCHAR* nameW,
- _In_ GUID* lpProviderId,
+NSP_GetServiceByNameHeapAllocW(_In_ PWSHANDLEINTERN data,
+ _In_ DWORD dwControlFlags,
_Out_ PWSHOSTINFOINTERN hostinfo)
{
BOOL Found = FALSE;
_Out_ PWSHOSTINFOINTERN hostinfo)
{
BOOL Found = FALSE;
PCHAR nameProtoA = NULL;
INT res = WSANO_RECOVERY;
PCHAR nameProtoA = NULL;
INT res = WSANO_RECOVERY;
{
res = WSANO_RECOVERY;
goto End;
}
hHeap = GetProcessHeap();
{
res = WSANO_RECOVERY;
goto End;
}
hHeap = GetProcessHeap();
- nameA = StrW2AHeapAlloc(hHeap, nameW);
+ nameA = StrW2AHeapAlloc(hHeap, data->hostnameW);
/* nameA has the form <service-name>/<protocol>
we split these now */
/* nameA has the form <service-name>/<protocol>
we split these now */
INT
NSP_LookupServiceNextW(_In_ PWSHANDLEINTERN data,
INT
NSP_LookupServiceNextW(_In_ PWSHANDLEINTERN data,
+ _In_ DWORD dwControlFlags,
_Inout_ LPWSAQUERYSETW lpRes,
_Inout_ LPDWORD lpResLen)
{
_Inout_ LPWSAQUERYSETW lpRes,
_Inout_ LPDWORD lpResLen)
{
lpRes->dwSize = sizeof(*lpRes);
lpRes->dwNameSpace = NS_DNS;
lpRes->dwSize = sizeof(*lpRes);
lpRes->dwNameSpace = NS_DNS;
- if ((CallID == NSP_CALLID_HOSTNAME) ||
- (CallID == NSP_CALLID_HOSTBYNAME) ||
- (CallID == NSP_CALLID_SERVICEBYNAME))
+ if ((data->CallID == NSP_CALLID_HOSTNAME) ||
+ (data->CallID == NSP_CALLID_HOSTBYNAME) ||
+ (data->CallID == NSP_CALLID_SERVICEBYNAME))
{
if (data->CallIDCounter >= 1)
{
{
if (data->CallIDCounter >= 1)
{
- if (CallID == NSP_CALLID_HOSTNAME)
+ if (data->CallID == NSP_CALLID_HOSTNAME)
{
result = NSP_GetHostNameHeapAllocW(&hostinfo.hostnameW);
{
result = NSP_GetHostNameHeapAllocW(&hostinfo.hostnameW);
- else if (CallID == NSP_CALLID_HOSTBYNAME)
+ else if (data->CallID == NSP_CALLID_HOSTBYNAME)
- result = NSP_GetHostByNameHeapAllocW(data->hostnameW,
- &data->providerId,
+ result = NSP_GetHostByNameHeapAllocW(data,
+ dwControlFlags,
&hostinfo);
if (result != ERROR_SUCCESS)
goto End;
}
else
{
&hostinfo);
if (result != ERROR_SUCCESS)
goto End;
}
else
{
- ASSERT(CallID == NSP_CALLID_SERVICEBYNAME);
- result = NSP_GetServiceByNameHeapAllocW(data->hostnameW,
- &data->providerId,
+ ASSERT(data->CallID == NSP_CALLID_SERVICEBYNAME);
+ result = NSP_GetServiceByNameHeapAllocW(data,
+ dwControlFlags,
&hostinfo);
if (result != ERROR_SUCCESS)
goto End;
&hostinfo);
if (result != ERROR_SUCCESS)
goto End;
if (((LUP_RETURN_BLOB & data->dwControlFlags) != 0) ||
((LUP_RETURN_NAME & data->dwControlFlags) != 0))
{
if (((LUP_RETURN_BLOB & data->dwControlFlags) != 0) ||
((LUP_RETURN_NAME & data->dwControlFlags) != 0))
{
- if (CallID == NSP_CALLID_HOSTNAME || CallID == NSP_CALLID_HOSTBYNAME)
+ if (data->CallID == NSP_CALLID_HOSTNAME || data->CallID == NSP_CALLID_HOSTBYNAME)
{
ServiceInstanceNameW = hostinfo.hostnameW;
ServiceInstanceNameA = StrW2AHeapAlloc(hHeap, ServiceInstanceNameW);
{
ServiceInstanceNameW = hostinfo.hostnameW;
ServiceInstanceNameA = StrW2AHeapAlloc(hHeap, ServiceInstanceNameW);
- if (CallID == NSP_CALLID_SERVICEBYNAME)
+ if (data->CallID == NSP_CALLID_SERVICEBYNAME)
{
ServiceInstanceNameW = hostinfo.servnameW;
ServiceInstanceNameA = StrW2AHeapAlloc(hHeap, ServiceInstanceNameW);
{
ServiceInstanceNameW = hostinfo.servnameW;
ServiceInstanceNameA = StrW2AHeapAlloc(hHeap, ServiceInstanceNameW);
if ((LUP_RETURN_BLOB & data->dwControlFlags) != 0)
{
if ((LUP_RETURN_BLOB & data->dwControlFlags) != 0)
{
- if (CallID == NSP_CALLID_HOSTBYNAME)
+ if (data->CallID == NSP_CALLID_HOSTBYNAME)
{
/* Write data for PBLOB (hostent) */
if (!mswBufferAppendBlob_Hostent(&buf,
lpRes,
{
/* Write data for PBLOB (hostent) */
if (!mswBufferAppendBlob_Hostent(&buf,
lpRes,
+ (LUP_RETURN_ALIASES & data->dwControlFlags) != 0 ? hostinfo.servaliasesA : NULL,
ServiceInstanceNameA,
hostinfo.addr4))
{
ServiceInstanceNameA,
hostinfo.addr4))
{
- else if (CallID == NSP_CALLID_SERVICEBYNAME)
+ else if (data->CallID == NSP_CALLID_SERVICEBYNAME)
{
/* Write data for PBLOB (servent) */
if (!mswBufferAppendBlob_Servent(&buf,
lpRes,
ServiceInstanceNameA,/* ServiceName */
{
/* Write data for PBLOB (servent) */
if (!mswBufferAppendBlob_Servent(&buf,
lpRes,
ServiceInstanceNameA,/* ServiceName */
+ (LUP_RETURN_ALIASES & data->dwControlFlags) != 0 ? hostinfo.servaliasesA : NULL,
ServiceProtocolNameA,
hostinfo.servport))
{
ServiceProtocolNameA,
hostinfo.servport))
{