mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
817 lines
22 KiB
817 lines
22 KiB
/*++
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
GAdrByNm.c
|
|
|
|
Abstract:
|
|
|
|
Service Registration and Resolution APIs tests
|
|
|
|
GetAddressByName() API
|
|
|
|
Author:
|
|
|
|
Hui-Li Chen (hui-lich) Microsoft, June 14, 1994
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "wsnsp.h"
|
|
#include "gadrbynm.h"
|
|
|
|
TEST_PROTO gTest = TEST_AT;
|
|
int var = 0, failed = 0, passed = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// main funcion
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
VOID _CRTAPI1 main( int argc, char *argv[] )
|
|
{
|
|
WSADATA wsaData;
|
|
WORD wVersion;
|
|
|
|
if ( !ParseOptions( argc, argv ) )
|
|
Usage();
|
|
|
|
CreateLogFile(gsLogName);
|
|
|
|
wVersion = MAKEWORD( 1, 1);
|
|
if ( WSAStartup( wVersion, &wsaData ) != 0 )
|
|
{
|
|
Print("Error calling WSAStartup. Error=%d\n", GetLastError());
|
|
ExitProcess( 0 );
|
|
}
|
|
|
|
Print("API tests for GetAddressByName\n");
|
|
// Test_GetAddressByName();
|
|
|
|
Test_AT();
|
|
|
|
End_Of_Tests( var, passed, failed );
|
|
|
|
WSACleanup();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_GetAddressByName
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_GetAddressByName( void )
|
|
{
|
|
|
|
Small_Buf();
|
|
|
|
All_are_Valid();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Small_Buf
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Small_Buf( void )
|
|
{
|
|
|
|
GUID guid = SVCID_HOSTNAME;
|
|
CSADDR_INFO CSABuf[20];
|
|
DWORD dwCSABufSize = sizeof(CSADDR_INFO);
|
|
TCHAR cAliasBuf[256];
|
|
DWORD dwAliasBufSize;
|
|
SERVICE_ASYNC_INFO AsyncInfo;
|
|
|
|
dwAliasBufSize = 256*sizeof(TCHAR);
|
|
Print( "\nVariation %d: pass small dwCSABufSize\n", ++var );
|
|
Call_GetAddressByName( -1, ERROR_INSUFFICIENT_BUFFER, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
|
|
Print( "\nVariation %d: should return the actual size in dwCSABufSize\n", ++var );
|
|
Print( " after passing small buf.\n" );
|
|
Call_GetAddressByName( 0x0FFF, 0, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
|
|
Print( "\nVariation %d: pass invalid AsyncInfo\n", ++var );
|
|
Call_GetAddressByName( -1, ERROR_NOT_SUPPORTED, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
&AsyncInfo, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
|
|
dwCSABufSize = sizeof(CSADDR_INFO) * 20;
|
|
dwAliasBufSize = 1*sizeof(TCHAR);
|
|
Print( "\nVariation %d: pass small dwAliasBufSize\n", ++var );
|
|
Call_GetAddressByName( 0x0FFF, 0, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
|
|
Print( "\nVariation %d: should be fine after pass small dwAliasBufSize\n", ++var );
|
|
Call_GetAddressByName( 0x0FFF, 0, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// All_are_Valid
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void All_are_Valid( void )
|
|
{
|
|
|
|
GUID guid = SVCID_HOSTNAME;
|
|
DWORD dwProto[10];
|
|
CSADDR_INFO CSABuf[20];
|
|
DWORD dwCSABufSize;
|
|
|
|
|
|
//
|
|
// test Name Space
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_DEFAULT\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_DEFAULT );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_NETBT\'\n", ++var );
|
|
Test_Name_Space( 1, 0, NS_NETBT );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_NBP\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_NBP );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_CAIRO\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_CAIRO );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_X500\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_X500 );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_NIS\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_NIS );
|
|
|
|
//
|
|
// test GUID
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid GUID \'SVCID_HOSTNAME\'\n", ++var );
|
|
Test_GUID( 0x0FFF, 0, guid, gsServiceName );
|
|
|
|
//
|
|
// test Protocols
|
|
//
|
|
|
|
Print( "\nVariation %d: protocol array points to NULL\n", ++var );
|
|
Test_Protocols(0x0FFF, 0, NULL);
|
|
|
|
dwProto[0] = 0;
|
|
Print( "\nVariation %d: pass 0 as the first item in protocol array\n", ++var );
|
|
Test_Protocols(-1, WSAEPROTONOSUPPORT, dwProto);
|
|
|
|
dwProto[0] = ATPROTO_ADSP;
|
|
dwProto[1] = ATPROTO_PAP;
|
|
dwProto[2] = 0;
|
|
Print( "\nVariation %d: pass unavail protocols in array\n", ++var );
|
|
Test_Protocols(-1, WSAEPROTONOSUPPORT, dwProto);
|
|
|
|
dwProto[0] = ATPROTO_ADSP;
|
|
dwProto[1] = ATPROTO_PAP;
|
|
dwProto[2] = IPPROTO_TCP;
|
|
dwProto[3] = IPPROTO_UDP;
|
|
dwProto[4] = NSPROTO_SPX;
|
|
dwProto[5] = NSPROTO_IPX;
|
|
dwProto[6] = 0;
|
|
Print( "\nVariation %d: pass unavail and avail protocols in array\n", ++var );
|
|
Test_Protocols(0x0FFF, 0, dwProto);
|
|
|
|
//
|
|
// test Resolution
|
|
//
|
|
Print( "\nVariation %d: pass valid Resolution \'0\'\n", ++var );
|
|
Test_Resolution( 0x0FFF, 0, 0 );
|
|
|
|
Print( "\nVariation %d: pass valid Resolution \'RES_FIND_MULTIPLE\'\n", ++var );
|
|
Test_Resolution( 0x0FFF, 0, RES_FIND_MULTIPLE );
|
|
|
|
Print( "\nVariation %d: pass valid Resolution \'RES_SOFT_SEARCH\'\n", ++var );
|
|
Test_Resolution( 1, 0, RES_SOFT_SEARCH );
|
|
|
|
Print( "\nVariation %d: pass valid Resolution \'RES_SERVICE\'\n", ++var );
|
|
Test_Resolution( 1, 0, RES_SERVICE );
|
|
|
|
//
|
|
// test CsAddr
|
|
//
|
|
|
|
dwCSABufSize = sizeof(CSADDR_INFO);
|
|
Print( "\nVariation %d: pass small dwCSABufSize\n", ++var );
|
|
Test_CSAddr( -1, ERROR_INSUFFICIENT_BUFFER, CSABuf, &dwCSABufSize );
|
|
|
|
dwCSABufSize = sizeof(CSADDR_INFO) * 20;
|
|
Print( "\nVariation %d: pass big enough dwCSABufSize\n", ++var );
|
|
Test_CSAddr( 0x0FFF, 0, CSABuf, &dwCSABufSize );
|
|
|
|
//
|
|
// specific tests for different protocols
|
|
//
|
|
|
|
switch( gTest )
|
|
{
|
|
case TEST_TCP:
|
|
Test_TCP();
|
|
break;
|
|
|
|
case TEST_NW:
|
|
Test_NW();
|
|
break;
|
|
|
|
case TEST_AT:
|
|
Test_AT();
|
|
break;
|
|
|
|
default:
|
|
Print("In All_are_Valid, should not hit here!\n");
|
|
break;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_TCP
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_TCP( void )
|
|
{
|
|
TCHAR sServiceType[256];
|
|
DWORD dwBufSize = 256*sizeof(TCHAR);
|
|
GUID guid0 = SVCID_ECHO_TCP;
|
|
GUID guid1 = SVCID_FTP_TCP;
|
|
GUID guid2 = SVCID_QMASTER_TCP;
|
|
GUID guid3 = SVCID_DISCARD_UDP;
|
|
GUID guid4 = SVCID_ACCTDISK_UDP;
|
|
GUID guid5 = SVCID_RSCS0_UDP;
|
|
|
|
//
|
|
// test Name Space
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_WINS\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_WINS );
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_TCPIP_LOCAL\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_TCPIP_LOCAL );
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_TCPIP_HOSTS\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_TCPIP_HOSTS );
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_DNS\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_DNS );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_SAP\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_SAP );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_NDS\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_NDS );
|
|
|
|
//
|
|
// test GUID
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid0, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid0, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid1, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid1, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid2, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid2, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid3, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid3, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid4, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid4, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid5, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid5, sServiceType );
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_NW
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_NW( void )
|
|
{
|
|
|
|
TCHAR sServiceType[256];
|
|
DWORD dwBufSize = 256*sizeof(TCHAR);
|
|
GUID guid0 = SVCID_PRINT_QUEUE;
|
|
GUID guid1 = SVCID_NETWARE_386;
|
|
GUID guid2 = SVCID_SAA_SERVER;
|
|
|
|
//
|
|
// test Name Space
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_SAP\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_SAP );
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_NDS\'\n", ++var );
|
|
Test_Name_Space( 0x0FFF, 0, NS_NDS );
|
|
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_DNS\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_DNS );
|
|
|
|
|
|
//
|
|
// test GUID
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid0, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid0, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid1, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid1, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid2, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid2, sServiceType );
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_AT
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_AT( void )
|
|
{
|
|
|
|
TCHAR sServiceType[256];
|
|
DWORD dwBufSize = 256*sizeof(TCHAR);
|
|
GUID guid0 = SVCID_PRINT_QUEUE;
|
|
GUID guid1 = SVCID_NETWARE_386;
|
|
GUID guid2 = SVCID_SAA_SERVER;
|
|
|
|
Print( "\nVariation %d: pass valid Resolution \'RES_SERVICE\'\n", ++var );
|
|
// Should expect back 2 entries if Appletalk is the only RnR provider,
|
|
// else some other number depending on what is the first provider.
|
|
Test_Resolution( 2, 0, RES_SERVICE );
|
|
|
|
Print( "\nVariation %d: pass valid Resolution \'RES_SERVICE | RES_FIND_MULTIPLE\'\n", ++var );
|
|
// Should expect back 2 entries if Appletalk is the only RnR provider,
|
|
// else some other number that includes all loaded providers.
|
|
Test_Resolution( 2, 0, RES_SERVICE | RES_FIND_MULTIPLE );
|
|
|
|
//
|
|
// test Name Space
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid NameSpace \'NS_NBP\'\n", ++var );
|
|
Test_Name_Space( 0xFFF, 0, NS_NBP );
|
|
|
|
// Note this will hit an assertion in sockets\winsock\r_query.c
|
|
// Assertion failed: SockThreadProcessingGetXByY
|
|
Print( "\nVariation %d: pass invalid NameSpace \'NS_DNS\'\n", ++var );
|
|
Test_Name_Space( 0, 0, NS_DNS );
|
|
|
|
|
|
//
|
|
// test GUID
|
|
//
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid0, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid0, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid1, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid1, sServiceType );
|
|
|
|
Print( "\nVariation %d: pass valid ServiceName\n", ++var );
|
|
if ( Get_Name_By_Type(guid2, sServiceType, dwBufSize) )
|
|
Test_GUID( 0x0FFF, 0, guid2, sServiceType );
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_Name_Space
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_Name_Space(
|
|
int expRet,
|
|
DWORD expErr,
|
|
DWORD dwNameSpace )
|
|
{
|
|
|
|
GUID guid = SVCID_HOSTNAME;
|
|
CSADDR_INFO CSABuf[60];
|
|
DWORD dwCSABufSize = sizeof(CSABuf);
|
|
TCHAR cAliasBuf[256];
|
|
DWORD dwAliasBufSize = 256*sizeof(TCHAR);
|
|
|
|
// Request a particular namespace, but no particular protocol
|
|
Call_GetAddressByName( expRet, expErr, dwNameSpace, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_GUID
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_GUID(
|
|
int expRet,
|
|
DWORD expErr,
|
|
GUID ServiceType,
|
|
LPTSTR gsServiceName )
|
|
{
|
|
|
|
CSADDR_INFO CSABuf[20];
|
|
DWORD dwCSABufSize = sizeof(CSADDR_INFO) * 20;
|
|
TCHAR cAliasBuf[256];
|
|
DWORD dwAliasBufSize = 256*sizeof(TCHAR);
|
|
|
|
Call_GetAddressByName( expRet, expErr, NS_DEFAULT, &ServiceType,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_Protocols
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_Protocols(
|
|
int expRet,
|
|
DWORD expErr,
|
|
LPDWORD pdwProto )
|
|
{
|
|
|
|
GUID guid = SVCID_HOSTNAME;
|
|
CSADDR_INFO CSABuf[20];
|
|
DWORD dwCSABufSize = sizeof(CSADDR_INFO) * 20;
|
|
TCHAR cAliasBuf[256];
|
|
DWORD dwAliasBufSize = 256*sizeof(TCHAR);
|
|
|
|
Call_GetAddressByName( expRet, expErr, NS_DEFAULT, &guid,
|
|
gsServiceName, pdwProto, RES_FIND_MULTIPLE,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_Resolution
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_Resolution(
|
|
int expRet,
|
|
DWORD expErr,
|
|
DWORD dwResolution )
|
|
{
|
|
GUID guid = SVCID_HOSTNAME;
|
|
CSADDR_INFO CSABuf[20];
|
|
DWORD dwCSABufSize = sizeof(CSADDR_INFO) * 20;
|
|
TCHAR cAliasBuf[256];
|
|
DWORD dwAliasBufSize = 256*sizeof(TCHAR);
|
|
|
|
Call_GetAddressByName( expRet, expErr, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, dwResolution,
|
|
NULL, &CSABuf, &dwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_CSAddr
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_CSAddr(
|
|
int expRet,
|
|
DWORD expErr,
|
|
LPVOID CSABuf,
|
|
LPDWORD pdwCSABufSize )
|
|
{
|
|
|
|
GUID guid = SVCID_HOSTNAME;
|
|
TCHAR cAliasBuf[256];
|
|
DWORD dwAliasBufSize = 256*sizeof(TCHAR);
|
|
|
|
Call_GetAddressByName( expRet, expErr, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, CSABuf, pdwCSABufSize,
|
|
cAliasBuf, &dwAliasBufSize);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Test_Alias
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Test_Alias(
|
|
int expRet,
|
|
DWORD expErr,
|
|
LPTSTR AliasBuf,
|
|
LPDWORD pdwAliasBufSize )
|
|
{
|
|
|
|
GUID guid = SVCID_HOSTNAME;
|
|
CSADDR_INFO CSABuf[20];
|
|
DWORD dwCSABufSize = sizeof(CSADDR_INFO) * 20;
|
|
|
|
Call_GetAddressByName( expRet, expErr, NS_DEFAULT, &guid,
|
|
gsServiceName, NULL, RES_FIND_MULTIPLE,
|
|
NULL, CSABuf, &dwCSABufSize,
|
|
AliasBuf, pdwAliasBufSize);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Get_Name_By_Type
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
BOOL Get_Name_By_Type(
|
|
GUID ServiceType,
|
|
LPTSTR sServiceType,
|
|
DWORD dwBufSize )
|
|
{
|
|
|
|
if ( GetNameByType( &ServiceType, sServiceType, dwBufSize ) < 0 )
|
|
{
|
|
Print("VARIATION FAILED: GetNameByType returned error = %d\n", GetLastError());
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Call_GetAddressByName
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Call_GetAddressByName(
|
|
int ExpectedReturn,
|
|
DWORD ExpectedError,
|
|
DWORD dwNameSpace,
|
|
LPGUID lpServiceType,
|
|
LPTSTR lpServiceName,
|
|
LPDWORD lpdwProtocols,
|
|
DWORD dwResolution,
|
|
LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
|
|
LPVOID lpCsaddrBuffer,
|
|
LPDWORD lpdwBufferLength,
|
|
LPTSTR lpAliasBuffer,
|
|
LPDWORD lpdwAliasBufferLength )
|
|
{
|
|
int r;
|
|
BOOL fPass = TRUE;
|
|
char szProt[500];
|
|
|
|
Print( "\tdwNameSpace = 0x%08x\n"
|
|
"\tlpServiceType = 0x%08x\n",
|
|
dwNameSpace,
|
|
lpServiceType );
|
|
|
|
( ! lpdwProtocols ) ? Print("\tlpdwProtocols = NULL\n") :
|
|
Print("\t*lpdwProtocols = 0x%08x\n", *lpdwProtocols) ;
|
|
|
|
Print( "\tdwResolution = 0x%08x\n"
|
|
"\tlpServiceAsyncInfo = 0x%08x\n"
|
|
"\tlpCsaddrBuffer = 0x%08x\n"
|
|
"\tlpAliasBuffer = 0x%08x\n",
|
|
dwResolution,
|
|
lpServiceAsyncInfo,
|
|
lpCsaddrBuffer,
|
|
lpAliasBuffer);
|
|
|
|
( ! lpdwBufferLength ) ? Print("\tlpdwBufferLength = NULL\n") :
|
|
Print("\t*lpdwBufferLength = 0x%08x\n", *lpdwBufferLength);
|
|
|
|
( ! lpdwAliasBufferLength ) ? Print("\tlpdwAliasBufferLength = NULL\n") :
|
|
Print("\t*lpdwAliasBufferLength= 0x%08x\n", *lpdwAliasBufferLength);
|
|
|
|
if ( lpServiceName )
|
|
{
|
|
#ifdef UNICODE
|
|
WideCharToMultiByte(CP_ACP, 0, lpServiceName, -1,
|
|
szProt, 500, NULL, NULL);
|
|
#else
|
|
strcpy( szProt, lpServiceName );
|
|
#endif
|
|
|
|
Print( "\tlpServiceName = %s\n", szProt );
|
|
}
|
|
|
|
r = GetAddressByName( dwNameSpace,
|
|
lpServiceType,
|
|
lpServiceName,
|
|
lpdwProtocols,
|
|
dwResolution,
|
|
lpServiceAsyncInfo,
|
|
lpCsaddrBuffer,
|
|
lpdwBufferLength,
|
|
lpAliasBuffer,
|
|
lpdwAliasBufferLength );
|
|
|
|
if ( r != ExpectedReturn )
|
|
{
|
|
if ( ExpectedReturn != 0x0FFF )
|
|
{
|
|
Print("VARIATION FAILED : expected return = %d, but actual return = %d\n",
|
|
ExpectedReturn,
|
|
r );
|
|
fPass = FALSE;
|
|
}
|
|
}
|
|
|
|
if ( r < 0 )
|
|
{
|
|
if ( GetLastError() != ExpectedError )
|
|
{
|
|
Print("VARIATION FAILED : expected error = %d, but actual error = %d\n",
|
|
ExpectedError,
|
|
GetLastError() );
|
|
fPass = FALSE;
|
|
}
|
|
}
|
|
|
|
if ( r > 0 && lpCsaddrBuffer )
|
|
Print_CSDADDR_Info( r, lpCsaddrBuffer );
|
|
|
|
if ( r > 0 && lpAliasBuffer && lpdwAliasBufferLength )
|
|
Print_Alias_Info( lpAliasBuffer, *lpdwAliasBufferLength );
|
|
|
|
if ( fPass )
|
|
Print("VARIATION PASSED : expected/actual return = %d\n", r );
|
|
|
|
fPass ? passed++ : failed++;
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Print_CSDADDR_Info
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Print_CSDADDR_Info(
|
|
int r,
|
|
PVOID lpCsaddrBuffer )
|
|
{
|
|
|
|
LPCSADDR_INFO lpCsadrInfo = (LPCSADDR_INFO) lpCsaddrBuffer;
|
|
|
|
Print("\n\tReturned %d Csaddr\n", r );
|
|
|
|
for ( ; r > 0; r--,lpCsadrInfo++)
|
|
{
|
|
|
|
LPSOCKADDR lpSA = lpCsadrInfo->LocalAddr.lpSockaddr;
|
|
|
|
Print("\n");
|
|
Print(" LocalAddr\n");
|
|
Print(" iSockaddrLength : %d\n", lpCsadrInfo->LocalAddr.iSockaddrLength);
|
|
Print(" sa_family : %d\n", lpSA->sa_family);
|
|
Print(" sa_data : 0x%02x 0x%02x 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[0]),
|
|
(UCHAR)(lpSA->sa_data[1]),
|
|
(UCHAR)(lpSA->sa_data[2]),
|
|
(UCHAR)(lpSA->sa_data[3]) );
|
|
Print(" : 0x%02x 0x%02x 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[4]),
|
|
(UCHAR)(lpSA->sa_data[5]),
|
|
(UCHAR)(lpSA->sa_data[6]),
|
|
(UCHAR)(lpSA->sa_data[7]) );
|
|
Print(" : 0x%02x 0x%02x 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[8]),
|
|
(UCHAR)(lpSA->sa_data[9]),
|
|
(UCHAR)(lpSA->sa_data[10]),
|
|
(UCHAR)(lpSA->sa_data[11]) );
|
|
Print(" : 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[12]),
|
|
(UCHAR)(lpSA->sa_data[13]) );
|
|
|
|
lpSA = lpCsadrInfo->RemoteAddr.lpSockaddr;
|
|
|
|
Print(" RemoteAddr\n");
|
|
Print(" iSockaddrLength : %d\n", lpCsadrInfo->RemoteAddr.iSockaddrLength);
|
|
Print(" sa_family : %d\n", lpSA->sa_family);
|
|
Print(" sa_data : 0x%02x 0x%02x 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[0]),
|
|
(UCHAR)(lpSA->sa_data[1]),
|
|
(UCHAR)(lpSA->sa_data[2]),
|
|
(UCHAR)(lpSA->sa_data[3]) );
|
|
Print(" : 0x%02x 0x%02x 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[4]),
|
|
(UCHAR)(lpSA->sa_data[5]),
|
|
(UCHAR)(lpSA->sa_data[6]),
|
|
(UCHAR)(lpSA->sa_data[7]) );
|
|
Print(" : 0x%02x 0x%02x 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[8]),
|
|
(UCHAR)(lpSA->sa_data[9]),
|
|
(UCHAR)(lpSA->sa_data[10]),
|
|
(UCHAR)(lpSA->sa_data[11]) );
|
|
Print(" : 0x%02x 0x%02x\n",
|
|
(UCHAR)(lpSA->sa_data[12]),
|
|
(UCHAR)(lpSA->sa_data[13]) );
|
|
|
|
Print(" iSocketType : %d\n", lpCsadrInfo->iSocketType );
|
|
Print(" iProtocol : %d\n", lpCsadrInfo->iProtocol );
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Print_Alias_Info
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Print_Alias_Info(
|
|
LPTSTR lpAliasBuf,
|
|
DWORD dwAliasBufLen )
|
|
{
|
|
DWORD i;
|
|
LPTSTR lpcurr = lpAliasBuf;
|
|
TCHAR szAlias[256];
|
|
char szProt[500];
|
|
|
|
|
|
Print("\n\tReturned Alias Buf length = %d\n", dwAliasBufLen);
|
|
|
|
for ( i=0; (i < dwAliasBufLen) && (*lpcurr!=0) ; i++ )
|
|
{
|
|
_tcscpy(szAlias, lpcurr);
|
|
|
|
#ifdef UNICODE
|
|
WideCharToMultiByte(CP_ACP, 0, szAlias, -1,
|
|
szProt, 500, NULL, NULL);
|
|
#else
|
|
_tcscpy( szProt, szAlias );
|
|
#endif
|
|
|
|
Print(" Alias %3d : %s\n", (i+1), szProt);
|
|
|
|
lpcurr+=_tcslen(lpcurr)+1*sizeof(TCHAR);
|
|
}
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Usage
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void Usage()
|
|
{
|
|
printf("Usage: gadrbynm -[TCP|NW|AT] -ns <service_name> [-ol logname]\n");
|
|
ExitProcess ( 0 );
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// End of GAdrByNm.c
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|