Leaked source code of windows server 2003
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.
|
|
/////////////////////////////////////////////////////////////////////
// IsLocal.cpp
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997-1998
//
//
// Determines whether a computername is the local computer
//
//
// HISTORY
// 09-Jan-1999 jonn Creation.
//
/////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "dns.h"
#include <winsock.h>
#include "stdutils.h"
#if _WIN32_WINNT < 0x0500
//
// CODEWORK This was taken from winbase.h. MFC requires _WIN32_WINNT=0x4000 whereas
// winbase.h only includes this for _WIN32_WINNT=0x5000. JonN 1/14/99
//
extern "C" { typedef enum _COMPUTER_NAME_FORMAT { ComputerNameNetBIOS, ComputerNameDnsHostname, ComputerNameDnsDomain, ComputerNameDnsFullyQualified, ComputerNamePhysicalNetBIOS, ComputerNamePhysicalDnsHostname, ComputerNamePhysicalDnsDomain, ComputerNamePhysicalDnsFullyQualified, ComputerNameMax } COMPUTER_NAME_FORMAT ; WINBASEAPI BOOL WINAPI GetComputerNameExA ( IN COMPUTER_NAME_FORMAT NameType, OUT LPSTR lpBuffer, IN OUT LPDWORD nSize ); WINBASEAPI BOOL WINAPI GetComputerNameExW ( IN COMPUTER_NAME_FORMAT NameType, OUT LPWSTR lpBuffer, IN OUT LPDWORD nSize ); #ifdef UNICODE
#define GetComputerNameEx GetComputerNameExW
#else
#define GetComputerNameEx GetComputerNameExA
#endif // !UNICODE
} // extern "C"
#endif
// ISSUE-2002/03/28-JonN never freed
LPTSTR g_ptzComputerName = NULL; LPTSTR g_ptzDnsComputerName = NULL;
/////////////////////////////////////////////////////////////////////
// IsLocalComputername()
//
BOOL IsLocalComputername( IN LPCTSTR pszMachineName ) { if ( NULL == pszMachineName || L'\0' == pszMachineName[0] ) return TRUE;
if ( L'\\' == pszMachineName[0] && L'\\' == pszMachineName[1] ) pszMachineName += 2;
// compare with the local computer name
if ( NULL == g_ptzComputerName ) { TCHAR achComputerName[ MAX_COMPUTERNAME_LENGTH+1 ]; DWORD dwSize = sizeof(achComputerName)/sizeof(TCHAR); if ( !GetComputerName( achComputerName, &dwSize ) ) { ASSERT(FALSE); } else { g_ptzComputerName = SysAllocString( achComputerName ); ASSERT( NULL != g_ptzComputerName ); } } if ( NULL != g_ptzComputerName && 0 == _tcsicmp( pszMachineName, g_ptzComputerName ) ) { return TRUE; }
// compare with the local DNS name
// SKwan confirms that ComputerNameDnsFullyQualified is the right name to use
// when clustering is taken into account
if ( NULL == g_ptzDnsComputerName ) { TCHAR achDnsComputerName[DNS_MAX_NAME_BUFFER_LENGTH]; DWORD dwSize = sizeof(achDnsComputerName)/sizeof(TCHAR); if ( !GetComputerNameEx( ComputerNameDnsFullyQualified, achDnsComputerName, &dwSize ) ) { ASSERT(FALSE); } else { g_ptzDnsComputerName = SysAllocString( achDnsComputerName ); ASSERT( NULL != g_ptzDnsComputerName ); } } if ( NULL != g_ptzDnsComputerName && 0 == _tcsicmp( pszMachineName, g_ptzDnsComputerName ) ) { return TRUE; }
/*
// compare with alternate DNS names
do { hostent* phostent = gethostbyname( NULL ); if (NULL == phostent) break; USES_CONVERSION; char** ppaliases = phostent->h_aliases; for ( ; *ppaliases != NULL; ppaliases++ ) { TCHAR* ptsz = A2OLE(*ppaliases); if (0 == _tcsicmp( pszMachineName, ptsz )) { return TRUE; } } // these are IP addresses, not strings
// char** ppaddresses = phostent->h_addr_list;
// for ( ; *ppaddresses != NULL; ppaliases++ )
// {
// TCHAR* ptsz = A2OLE(*ppaddresses);
// if (0 == _tcsicmp( pszMachineName, ptsz ))
// {
// return TRUE;
// }
// }
} while (false); // false loop
*/
return FALSE;
} // IsLocalComputername()
|