|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright(C) 1999-2000 Microsoft Corporation all rights reserved.
//
// Module: utils.cpp
//
// Project: Windows 2000 IAS
//
// Description: IAS NT 4 to IAS W2K Migration Utility Functions
//
// Author: TLP 1/13/1999
//
//
// Revision 02/24/2000 Moved to a separate dll
//
// TODO: IsWhistler() put the correct minorversion for Whistler RTM.
// i.e. if that's Win2k 5.1 ?
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "lm.h"
#ifndef celems
#define celems(_x) (sizeof(_x) / sizeof(_x[0]))
#endif
const WCHAR *CUtils::m_FilesToDelete[] = { L"_adminui.mdb", L"_adminui.ldb", L"actlapi.dll", L"actlapi2.dll", L"adminui.chm", L"adminui.cnt", L"adminui.exe", L"adminui.gid", L"adminui.hlp", L"authdll.dll", L"authdll2.dll", L"authodbc.dll", L"authperf.dll", L"authperf.h", L"authperf.ini", L"authsam.dll", L"authsrv.exe", L"client", L"clients", L"dbcon.dll", L"dictionary", L"hhctrl.ocx", L"hhwrap.dll", L"iasconf.dll", L"radcfg.dll", L"radlog.dll", L"radstp.dll", L"user", L"users", };
const int CUtils::m_NbFilesToDelete = celems(m_FilesToDelete);
const WCHAR CUtils::IAS_KEY[] = L"SYSTEM\\CurrentControlSet\\Services\\" L"RemoteAccess\\Policy";
const WCHAR CUtils::AUTHSRV_PARAMETERS_KEY[] = L"SYSTEM\\CurrentControlSet\\" L"Services\\AuthSrv\\Parameters";
const WCHAR CUtils::SERVICES_KEY[] = L"SYSTEM\\CurrentControlSet\\" L"Services";
CUtils CUtils::_instance;
CUtils& CUtils::Instance() { return _instance; }
//////////////////////////////////////////////////////////////////////////////
// Constructor
// Init the BOOL static variables
//////////////////////////////////////////////////////////////////////////////
CUtils::CUtils() :m_IsNT4ISP(FALSE), m_IsNT4CORP(FALSE), m_OverrideUserNameSet(FALSE), m_UserIdentityAttributeSet(FALSE), m_UserIdentityAttribute(RADIUS_ATTRIBUTE_USER_NAME) { GetVersion(); GetRealmParameters(); };
//////////////////////////////////////////////////////////////////////////////
// GetAuthSrvDirectory
//////////////////////////////////////////////////////////////////////////////
LONG CUtils::GetAuthSrvDirectory(/*[out]*/ _bstr_t& pszDir) const { static _bstr_t AuthSrvDirString; static BOOL AuthSrvDirValid = FALSE;
LONG lResult = ERROR_SUCCESS;
if ( !AuthSrvDirValid ) { CRegKey Key; lResult = Key.Open( HKEY_LOCAL_MACHINE, AUTHSRV_PARAMETERS_KEY, KEY_READ ); if ( lResult == ERROR_SUCCESS ) { DWORD dwAuthSrvDirLength = MAX_PATH; WCHAR TempString[MAX_PATH]; lResult = Key.QueryValue( TempString, L"DefaultDirectory", &dwAuthSrvDirLength ); if ( lResult == ERROR_SUCCESS ) { AuthSrvDirString = TempString; AuthSrvDirValid = TRUE; } Key.Close(); } } if ( lResult == ERROR_SUCCESS ) { pszDir = AuthSrvDirString; } return lResult; }
//////////////////////////////////////////////////////////////////////////////
// GetIASDirectory
//////////////////////////////////////////////////////////////////////////////
LONG CUtils::GetIAS2Directory(/*[in]*/ _bstr_t& pszDir) const { static _bstr_t IASDirString; static BOOL IASDirValid = FALSE;
LONG lResult = ERROR_SUCCESS;
if ( ! IASDirValid ) { CRegKey Key; lResult = Key.Open( HKEY_LOCAL_MACHINE, IAS_KEY, KEY_READ ); if ( lResult == ERROR_SUCCESS ) { DWORD IASDirLength = MAX_PATH; WCHAR TempString[MAX_PATH]; lResult = Key.QueryValue( TempString, L"ProductDir", &IASDirLength ); if ( lResult == ERROR_SUCCESS ) { IASDirString = TempString; IASDirValid = TRUE; } Key.Close(); } } if ( lResult == ERROR_SUCCESS ) { pszDir = IASDirString; } return lResult; }
//////////////////////////////////////////////////////////////////////////////
// DeleteOldIASFiles
//////////////////////////////////////////////////////////////////////////////
void CUtils::DeleteOldIASFiles() { do { _bstr_t szAdminuiDirectory; LONG lResult = GetAuthSrvDirectory(szAdminuiDirectory); if ( lResult != ERROR_SUCCESS ) { break; }
_bstr_t szAdminuiMDB = szAdminuiDirectory; szAdminuiMDB += L"\\"; _bstr_t szTempString;
for (int i=0; i < m_NbFilesToDelete; ++i) { szTempString = szAdminuiMDB; szTempString += m_FilesToDelete[i]; DeleteFile(szTempString); // result ignored
}
RemoveDirectoryW(szAdminuiDirectory); // result ignored
// Delete the share
// Return value ignored (nothing to do if that doesn't work)
// const string used when LPWSTR expected
NetShareDel(NULL, L"IAS1$", 0); } while (FALSE); }
//////////////////////////////////////////////////////////////////////////////
// GetVersion
//
// No Key = Win2k or whistler
// Version = CORP: IAS 1.0 without Proxy
// Version = ISP: IAS 1.0 MCIS (Proxy)
//////////////////////////////////////////////////////////////////////////////
void CUtils::GetVersion() { CRegKey Key; LONG lResult = Key.Open( HKEY_LOCAL_MACHINE, AUTHSRV_PARAMETERS_KEY, KEY_READ );
if ( lResult != ERROR_SUCCESS ) { // IsWhistler will really check what version of IAS is installed
// the only sure thing here is that it isn't NT4
return; }
DWORD dwAuthSrvDirLength = MAX_PATH; WCHAR TempString[MAX_PATH]; lResult = Key.QueryValue( TempString, L"Version", &dwAuthSrvDirLength ); if ( lResult == ERROR_SUCCESS ) { _bstr_t Value = TempString; _bstr_t Isp = L"ISP"; _bstr_t Corp = L"CORP"; if ( Value == Isp ) { m_IsNT4ISP = TRUE; } else if ( Value == Corp ) { m_IsNT4CORP = TRUE; } // else it isn't NT4
} Key.Close(); }
//////////////////////////////////////////////////////////////////////////////
// IsNT4Corp
//////////////////////////////////////////////////////////////////////////////
BOOL CUtils::IsNT4Corp() const { return m_IsNT4CORP; }
//////////////////////////////////////////////////////////////////////////////
// IsNT4Isp
//////////////////////////////////////////////////////////////////////////////
BOOL CUtils::IsNT4Isp() const { return m_IsNT4ISP; }
//////////////////////////////////////////////////////////////////////////////
// IsWhistler
//
// cheapper to check the OS version than check the Database Version number.
// TODO: put the correct minorversion for Whistler RTM.
// i.e. if that's Win2k 5.1 ?
//////////////////////////////////////////////////////////////////////////////
BOOL CUtils::IsWhistler() const { OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0;
// Initialize the OSVERSIONINFOEX structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osvi.dwMajorVersion = 5; osvi.dwMinorVersion = 0; osvi.dwBuildNumber = 2195;
// Initialize the condition mask.
// at least Win2k RTM
VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
// but with a greater build number than RTM
// that will have to be set properly for Whistler RTM
VER_SET_CONDITION(dwlConditionMask, VER_BUILDNUMBER, VER_GREATER);
// Perform the test.
return VerifyVersionInfo( &osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, dwlConditionMask); }
//////////////////////////////////////////////////////////////////////////////
// OverrideUserNameSet
//////////////////////////////////////////////////////////////////////////////
BOOL CUtils::OverrideUserNameSet() const { return m_OverrideUserNameSet; }
//////////////////////////////////////////////////////////////////////////////
// GetUserIdentityAttribute
//////////////////////////////////////////////////////////////////////////////
DWORD CUtils::GetUserIdentityAttribute() const { return m_UserIdentityAttribute; }
//////////////////////////////////////////////////////////////////////////////
// GetRealmParameters
//////////////////////////////////////////////////////////////////////////////
void CUtils::GetRealmParameters() { const WCHAR USER_IDENTITY_ATTRIBUTE[] = L"User Identity Attribute"; const WCHAR OVERRIDE_USER_NAME[] = L"Override User-Name"; CRegKey Key; LONG lResult = Key.Open( HKEY_LOCAL_MACHINE, IAS_KEY, KEY_READ );
if ( lResult == ERROR_SUCCESS ) { lResult = Key.QueryValue( m_UserIdentityAttribute, USER_IDENTITY_ATTRIBUTE ); if ( lResult == ERROR_SUCCESS ) { m_UserIdentityAttributeSet = TRUE; }
DWORD Override; lResult = Key.QueryValue( Override, OVERRIDE_USER_NAME ); if ( lResult == ERROR_SUCCESS ) { Override ? m_OverrideUserNameSet = TRUE : m_OverrideUserNameSet = FALSE; } Key.Close(); } }
//////////////////////////////////////////////////////////////////////////////
// NewGetAuthSrvParameter
//////////////////////////////////////////////////////////////////////////////
void CUtils::NewGetAuthSrvParameter( /*[in]*/ LPCWSTR szParameterName, /*[out]*/ DWORD& DwordValue ) const { CRegKey Key; LONG Result = Key.Open( HKEY_LOCAL_MACHINE, AUTHSRV_PARAMETERS_KEY, KEY_READ ); if ( Result != ERROR_SUCCESS ) { _com_issue_error(E_ABORT); }
Result = Key.QueryValue(DwordValue, szParameterName); if ( Result != ERROR_SUCCESS ) { _com_issue_error(E_ABORT); } }
//////////////////////////////////////////////////////////////////////////////
// UserIdentityAttributeSet
//////////////////////////////////////////////////////////////////////////////
BOOL CUtils::UserIdentityAttributeSet() const { return m_UserIdentityAttributeSet; }
|