/*--------------------------------------------------------------------------- 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; }