windows-nt/Source/XPSP1/NT/base/cluster/mgmt/cluscfg/wizard/selnodebasepage.cpp
2020-09-26 16:20:57 +08:00

143 lines
3.9 KiB
C++

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2001 Microsoft Corporation
//
// Module Name:
// SelNodeBasePage.cpp
//
// Maintained By:
// David Potter (DavidP) 30-JAN-2001
//
//////////////////////////////////////////////////////////////////////////////
#include "Pch.h"
#include "SelNodeBasePage.h"
DEFINE_THISCLASS("CSelNodeBasePage");
//////////////////////////////////////////////////////////////////////////////
//++
//
// static
// CSelNodeBasePage::S_HrValidateDnsHostname
//
// Description:
// Validate a hostname with DNS. If the name contains a period (.)
// it will be validated as a full DNS hostname. Otherwise it will be
// validated as a hostname label.
//
// Arguments:
// hwndParentIn
// pcwszHostnameIn
//
// Return Values:
// S_OK - Operation completed successfully
// Other return values from DnsValidateName()
//
// Remarks:
//
//--
//////////////////////////////////////////////////////////////////////////////
CSelNodeBasePage::S_HrValidateDnsHostname(
HWND hwndParentIn
, LPCWSTR pcwszHostnameIn
)
{
TraceFunc1( "pcwszHostnameIn = '%1!ws!", pcwszHostnameIn );
HRESULT hr = S_OK;
DNS_STATUS dnsStatus;
BSTR bstrTitle = NULL;
BSTR bstrOperation = NULL;
BSTR bstrText = NULL;
BSTR bstrFullText = NULL;
UINT nMsgBoxType;
Assert( pcwszHostnameIn != NULL );
//
// If the name contains a dot, validate it as a full DNS name.
// Otherwise validate it as a hostname label.
//
if ( wcschr( pcwszHostnameIn, L'.' ) == NULL )
{
dnsStatus = TW32( DnsValidateName( pcwszHostnameIn, DnsNameHostnameLabel ) );
}
else
{
dnsStatus = TW32( DnsValidateName( pcwszHostnameIn, DnsNameHostnameFull ) );
}
if ( dnsStatus != ERROR_SUCCESS )
{
// Load the title string for the message box.
hr = THR( HrLoadStringIntoBSTR( g_hInstance, IDS_ERR_VALIDATING_COMPUTER_NAME_TITLE, &bstrTitle ) );
if ( FAILED( hr ) )
{
goto Cleanup;
}
// Format the operation string for the message box.
hr = THR( HrFormatStringIntoBSTR( g_hInstance, IDS_ERR_VALIDATING_COMPUTER_NAME_TEXT, &bstrOperation, pcwszHostnameIn ) );
if ( FAILED( hr ) )
{
goto Cleanup;
}
// Format the error message string for the message box.
if ( dnsStatus == ERROR_INVALID_NAME )
{
hr = THR( HrLoadStringIntoBSTR( g_hInstance, IDS_ERR_INVALID_DNS_COMPUTER_NAME_TEXT, &bstrText ) );
nMsgBoxType = MB_ICONSTOP;
}
else
{
hr = THR( HrFormatErrorIntoBSTR( dnsStatus, &bstrText ) );
if ( dnsStatus == DNS_ERROR_NON_RFC_NAME )
{
nMsgBoxType = MB_ICONEXCLAMATION;
}
else
{
nMsgBoxType = MB_ICONSTOP;
}
}
if ( FAILED( hr ) )
{
goto Cleanup;
}
// Construct the message box text.
hr = THR( HrFormatStringIntoBSTR( L"%1!ws!\n\n%2!ws!", &bstrFullText, bstrOperation, bstrText ) );
if ( FAILED( hr ) )
{
goto Cleanup;
}
// Display the error message box.
MessageBox( hwndParentIn, bstrFullText, bstrTitle, nMsgBoxType | MB_OK );
} // if: error in validation
Cleanup:
//
// Ignore a non RFC name error.
// This error should be teated as a warning.
//
if ( ( dnsStatus != ERROR_SUCCESS )
&& ( dnsStatus != DNS_ERROR_NON_RFC_NAME ) )
{
hr = HRESULT_FROM_WIN32( dnsStatus );
}
TraceSysFreeString( bstrTitle );
TraceSysFreeString( bstrOperation );
TraceSysFreeString( bstrText );
TraceSysFreeString( bstrFullText );
HRETURN( hr );
} //*** CSelNodeBasePage::S_HrValidateDnsHostname()