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.
 
 
 
 
 
 

587 lines
18 KiB

/*---------------------------------------------------------------------------
File: StrDesc.cpp
Comments: Implementation of CMigrator member functions that build string descriptions
of the operations to be performed. These are implemented in this seperate file to avoid cluttering
Migrator.cpp.
(c) Copyright 1999, Mission Critical Software, Inc., All Rights Reserved
Proprietary and confidential to Mission Critical Software, Inc.
REVISION LOG ENTRY
Revision By: Christy Boles
---------------------------------------------------------------------------
*/// Migrator.cpp : Implementation of CMcsMigrationDriverApp and DLL registration.
#include "stdafx.h"
#include "MigDrvr.h"
//#import "\bin\McsVarSetMin.tlb" no_namespace, named_guids
#import "VarSet.tlb" no_namespace, named_guids rename("property", "aproperty")
#include "Migrator.h"
#include "TaskChk.h"
#include "ResStr.h"
#include "Common.hpp"
#include "UString.hpp"
void CMigrator::BuildGeneralDesc(IVarSet * pVarSet,CString & str)
{
CString temp;
_bstr_t str1;
_bstr_t str2;
temp.FormatMessage(IDS_DescGeneral);
str += temp;
// Migrate from %ls to %ls
str1 = pVarSet->get(GET_BSTR(DCTVS_Options_SourceDomain));
str2 = pVarSet->get(GET_BSTR(DCTVS_Options_TargetDomain));
temp.FormatMessage(IDS_DescDomains,(WCHAR*)str1,(WCHAR*)str2);
//str += temp;
// Logfile: %ls
str1 = pVarSet->get(GET_BSTR(DCTVS_Options_Logfile));
temp.FormatMessage(IDS_DescLogfile,(WCHAR*)str1);
str += temp;
// write changes
str1 = pVarSet->get(GET_BSTR(DCTVS_Options_NoChange));
if ( !UStrICmp(str1,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescNoChange);
}
else
{
temp.FormatMessage(IDS_DescWriteChanges);
}
str += temp;
}
void CMigrator::BuildAcctReplDesc(IVarSet * pVarSet,CString & str)
{
const WCHAR DELIMITER[3] = L",\0";//used to seperate names in the prop exclusion lists
CString temp;
_bstr_t val;
_bstr_t val2;
_bstr_t val3;
_bstr_t val4;
LONG_PTR nVal;
BOOL bCanUseSIDHistory = FALSE;
CString sPropList;
temp.FormatMessage(IDS_DescAccountMigration);
str += temp;
// count of accounts to be copied
nVal = pVarSet->get(GET_BSTR(DCTVS_Accounts_NumItems));
temp.FormatMessage(IDS_DescAccountCount,nVal);
str += temp;
temp.FormatMessage(IDS_DescCopyAccountTypes);
str += temp;
// copy users?
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyUsers));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescCopyUsers);
str += temp;
bCanUseSIDHistory = TRUE;
}
// copy groups?
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyGlobalGroups));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyLocalGroups));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) || ! UStrICmp(val2,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescCopyGroups);
str += temp;
bCanUseSIDHistory = TRUE;
}
// copy ous
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyOUs));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescCopyOUs);
str += temp;
}
// copy computers
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyComputers));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescCopyComputers);
str += temp;
}
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_AddSidHistory));
val2 = pVarSet->get(GET_BSTR(DCTVS_Options_IsIntraforest));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) || !UStrICmp(val2,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_SIDHistory_Yes);
}
else
{
temp.FormatMessage(IDS_SIDHistory_No);
}
// If SID-History doesn't apply (i.e. Migrating Computers), don't mention it in the summary screen
if ( bCanUseSIDHistory )
{
str += temp;
}
//if rename with prefix
val = pVarSet->get(GET_BSTR(DCTVS_Options_Prefix));
if (val.length())
{
temp.FormatMessage(IDS_DescRenameWithPrefix,(WCHAR*)val);
str += temp;
}
//if rename with suffix
val = pVarSet->get(GET_BSTR(DCTVS_Options_Suffix));
if (val.length())
{
temp.FormatMessage(IDS_DescRenameWithSuffix,(WCHAR*)val);
str += temp;
}
// name collisions
temp.FormatMessage(IDS_DescNoReplaceExisting);
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ReplaceExistingAccounts));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescReplaceExisting);
}
else
{
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_Prefix));
if ( val.length() )
{
temp.FormatMessage(IDS_DescRenameWithPrefixOnConf,(WCHAR*)val);
}
else
{
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_Suffix));
if ( val.length() )
{
temp.FormatMessage(IDS_DescRenameWithSuffixOnConf,(WCHAR*)val);
}
}
}
str += temp;
// account disabling status
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_DisableSourceAccounts));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_DisableCopiedAccounts));
val3 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExpireSourceAccounts));
val4 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_TgtStateSameAsSrc));
//if disable source accounts, add to summary
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescDisableSrcAccts);
str += temp;
}
//if expire source accounts, add to summary
if (wcslen(val3))
{
nVal = _wtol(val3);
temp.FormatMessage(IDS_DescExpireSrcAccts,nVal);
str += temp;
}
//else if disable target accounts, add to summary
if ( !UStrICmp(val2,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescDisableTgtAccts);
str += temp;
}
else if ( !UStrICmp(val4,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescTgtSameAsSrc);
str += temp;
}
//else if leave source and target accounts active, add to summary
else
{
temp.FormatMessage(IDS_DescLeaveAcctsActive);
str += temp;
}
// roaming profile translation?
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_TranslateRoamingProfiles));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescTranslateRoaming);
str += temp;
}
// update user rights?
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_UpdateUserRights));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescUpdateUserRights);
str += temp;
}
// password generation?
// only applicable if migrating users
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyUsers));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
//if copying password, say so
//passwords are always copied during intra-forest migrations
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyPasswords));
val2 = pVarSet->get(GET_BSTR(DCTVS_Options_IsIntraforest));
if ( !UStrICmp(val,GET_STRING(IDS_YES)) || !UStrICmp(val2,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescCopyPassword);
str += temp;
}
else //else checkfor complex or same as username
{
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_GenerateStrongPasswords));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_PasswordFile));
//if complex, say so
if ( !UStrICmp(val,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_DescStrongPassword, (WCHAR*)val2);
str += temp;
}
else //else if same as username, say so
{
temp.FormatMessage(IDS_DescSimplePassword, (WCHAR*)val2);
str += temp;
}
}
}
/* add description of any excluded properties */
//add user properties excluded, if any
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyUsers));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludeProps));
val3 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludedUserProps));
if (!UStrICmp(val,GET_STRING(IDS_YES)) && !UStrICmp(val2,GET_STRING(IDS_YES))
&& UStrICmp(val3, L""))
{
temp.FormatMessage(IDS_DescExUserProps);
str += temp;
//diplay the list of props (currently in a comma-seperated string)
sPropList = (WCHAR*)val3;
if (!sPropList.IsEmpty())
{
WCHAR* pStr = sPropList.GetBuffer(0);
WCHAR* pTemp = wcstok(pStr, DELIMITER);
while (pTemp != NULL)
{
temp.FormatMessage(IDS_DescExcludedProp, pTemp);
str += temp;
//get the next item
pTemp = wcstok(NULL, DELIMITER);
}
sPropList.ReleaseBuffer();
}
}
//add InetOrgPerson properties excluded, if any
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyUsers));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludeProps));
val3 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludedInetOrgPersonProps));
if (!UStrICmp(val,GET_STRING(IDS_YES)) && !UStrICmp(val2,GET_STRING(IDS_YES))
&& UStrICmp(val3, L""))
{
temp.FormatMessage(IDS_DescExInetOrgPersonProps);
str += temp;
//diplay the list of props (currently in a comma-seperated string)
sPropList = (WCHAR*)val3;
if (!sPropList.IsEmpty())
{
WCHAR* pStr = sPropList.GetBuffer(0);
WCHAR* pTemp = wcstok(pStr, DELIMITER);
while (pTemp != NULL)
{
temp.FormatMessage(IDS_DescExcludedProp, pTemp);
str += temp;
//get the next item
pTemp = wcstok(NULL, DELIMITER);
}
sPropList.ReleaseBuffer();
}
}
//add group properties excluded, if any
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyGlobalGroups));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyLocalGroups));
val3 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludeProps));
val4 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludedGroupProps));
if ((!UStrICmp(val,GET_STRING(IDS_YES)) || !UStrICmp(val2,GET_STRING(IDS_YES)))
&& !UStrICmp(val3,GET_STRING(IDS_YES)) && UStrICmp(val4, L""))
{
temp.FormatMessage(IDS_DescExGrpProps);
str += temp;
//diplay the list of props (currently in a comma-seperated string)
sPropList = (WCHAR*)val4;
if (!sPropList.IsEmpty())
{
WCHAR* pStr = sPropList.GetBuffer(0);
WCHAR* pTemp = wcstok(pStr, DELIMITER);
while (pTemp != NULL)
{
temp.FormatMessage(IDS_DescExcludedProp, pTemp);
str += temp;
//get the next item
pTemp = wcstok(NULL, DELIMITER);
}
sPropList.ReleaseBuffer();
}
}
//add computer properties excluded, if any
val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyComputers));
val2 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludeProps));
val3 = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_ExcludedComputerProps));
if (!UStrICmp(val,GET_STRING(IDS_YES)) && !UStrICmp(val2,GET_STRING(IDS_YES))
&& UStrICmp(val3, L""))
{
temp.FormatMessage(IDS_DescExCmpProps);
str += temp;
//diplay the list of props (currently in a comma-seperated string)
sPropList = (WCHAR*)val3;
if (!sPropList.IsEmpty())
{
WCHAR* pStr = sPropList.GetBuffer(0);
WCHAR* pTemp = wcstok(pStr, DELIMITER);
while (pTemp != NULL)
{
temp.FormatMessage(IDS_DescExcludedProp, pTemp);
str += temp;
//get the next item
pTemp = wcstok(NULL, DELIMITER);
}
sPropList.ReleaseBuffer();
}
}
}
void CMigrator::BuildSecTransDesc(IVarSet * pVarSet,CString & str,BOOL bLocal)
{
CString temp;
CString temp2;
BOOL bHeaderShown = FALSE;
if ( bLocal )
{
// exchange translation
_bstr_t server = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateContainers));
if ( server.length() )
{
temp.FormatMessage(IDS_DescContainerTranslation,(WCHAR*)server);
str += temp;
// include the translation mode
_bstr_t mode = pVarSet->get(GET_BSTR(DCTVS_Security_TranslationMode));
temp.FormatMessage(IDS_TranslationMode,(WCHAR*)mode);
str += temp;
}
}
else
{
CString head;
_bstr_t val = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_SecurityInputMOT));
_bstr_t sInput;
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
sInput = pVarSet->get(GET_BSTR(DCTVS_Options_SourceDomain));
temp.FormatMessage(IDS_DescTransInputMOT, (LPCTSTR)sInput);
str += temp;
}
else
{
sInput = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_SecurityMapFile));
temp.FormatMessage(IDS_DescTransInputFile, (WCHAR*)sInput);
str += temp;
}
head.FormatMessage(IDS_DescSecurityTranslationFor);
// translate files?
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateFiles));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescFileTrans);
str += temp;
}
// translate shares?
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateShares));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescShareTrans);
str += temp;
}
// translate printers?
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslatePrinters));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescPrinterTrans);
str += temp;
}
// Translate local group memberships
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateLocalGroups));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescLGTrans);
str += temp;
}
// Translate user rights
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateUserRights));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescRightsTrans);
str += temp;
}
// Translate local user profiles
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateUserProfiles));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescProfileTrans);
str += temp;
}
// Translate Registry
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateRegistry));
if ( !UStrICmp(val,GET_STRING(IDS_YES)))
{
if ( ! bHeaderShown )
{
str += head;
bHeaderShown = TRUE;
}
temp.FormatMessage(IDS_DescRegistryTrans);
str += temp;
}
if ( bHeaderShown )
{
// include the translation mode
val = pVarSet->get(GET_BSTR(DCTVS_Security_TranslationMode));
temp.FormatMessage(IDS_TranslationMode,(WCHAR*)val);
str += temp;
}
}
}
void CMigrator::BuildDispatchDesc(IVarSet * pVarSet,CString & str)
{
BuildSecTransDesc(pVarSet,str,FALSE);
}
void CMigrator::BuildUndoDesc(IVarSet * pVarSet,CString & str)
{
CString temp;
_bstr_t val;
_bstr_t val2;
long nVal;
temp.FormatMessage(IDS_DescUndo);
str += temp;
// count of accounts to be copied
nVal = pVarSet->get(GET_BSTR(DCTVS_Accounts_NumItems));
temp.FormatMessage(IDS_DescAccountCountForDelete,nVal);
str += temp;
}
void CMigrator::BuildReportDesc(IVarSet * pVarSet, CString & str)
{
_bstr_t text;
CString temp;
text = pVarSet->get(GET_BSTR(DCTVS_Reports_Generate));
if ( UStrICmp(text,GET_STRING(IDS_YES)) )
{
// not generating any reports
return;
}
text = pVarSet->get(GET_BSTR(DCTVS_Reports_MigratedAccounts));
if ( !UStrICmp(text,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_GenerateMigratedAccountsReport);
str += temp;
}
text = pVarSet->get(GET_BSTR(DCTVS_Reports_MigratedComputers));
if ( !UStrICmp(text,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_GenerateMigratedComputersReport);
str += temp;
}
text = pVarSet->get(GET_BSTR(DCTVS_Reports_ExpiredComputers));
if ( !UStrICmp(text,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_GenerateExpiredComputersReport);
str += temp;
}
text = pVarSet->get(GET_BSTR(DCTVS_Reports_AccountReferences));
if ( !UStrICmp(text,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_GenerateAccountReferencesReport);
str += temp;
}
text = pVarSet->get(GET_BSTR(DCTVS_Reports_NameConflicts));
if ( !UStrICmp(text,GET_STRING(IDS_YES)) )
{
temp.FormatMessage(IDS_GenerateNameConflictReport);
str += temp;
}
}
void CMigrator::BuildGroupMappingDesc(IVarSet * pVarSet, CString & str)
{
long nItems;
CString temp;
nItems = pVarSet->get(GET_BSTR(DCTVS_Accounts_NumItems));
_bstr_t tgtGroup = pVarSet->get(L"Accounts.0.TargetName");
temp.FormatMessage(IDS_GroupsWillBeMapped,nItems,(WCHAR*)tgtGroup);
str += temp;
}