/*Copyright (c) 1995-1999, Mission Critical Software, Inc. All rights reserved. =============================================================================== Module - TaskCheck.cpp System - Domain Consolidation Toolkit. Author - Christy Boles Created - 99/07/01 Description - Routines that examine a the job defined by a varset and determine whether specific migration tasks need to be performed. Updates - =============================================================================== */ //#include "stdafx.h" #include #include //#include //#import "\bin\McsVarSetMin.tlb" no_namespace #import "VarSet.tlb" no_namespace rename("property", "aproperty") #include "Common.hpp" #include "TaskChk.h" #include "ResStr.h" #include "UString.hpp" #include "ErrDct.hpp" extern TErrorDct errTrace; BOOL // ret- BOOL, whether account replicator should be called NeedToUseAR( IVarSet * pVarSet // in - varset containing migration settings ) { _bstr_t text; BOOL bResult = FALSE; text = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyUsers)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use AR: Copying users"); bResult = TRUE; } text = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyGlobalGroups)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use AR: Copying groups"); bResult = TRUE; } text = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_CopyComputers)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use AR: Copying computers"); bResult = TRUE; } text = pVarSet->get(GET_BSTR(DCTVS_Options_LocalProcessingOnly)); // account replication is only done locally on the machine where Domain Migrator is running // it cannot be dispatched to run on a different machine. // (you can't very well copy accounts from one domain to another while running as localsystem) if ( ! UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Never use AR when running remotely."); bResult = FALSE; } // Account replicator should not be run when gathering information _bstr_t wizard = pVarSet->get(L"Options.Wizard"); if ( !_wcsicmp((WCHAR*) wizard, L"reporting") ) { errTrace.DbgMsgWrite(0,L"Never use AR when Gathering Information."); bResult = FALSE; } if ( !_wcsicmp((WCHAR*) wizard, L"sidremove") ) { errTrace.DbgMsgWrite(0,L"Need to use AR. We are removing sids."); bResult = TRUE; } text = pVarSet->get(GET_BSTR(DCTVS_Accounts_NumItems)); if ( text.length() == 0 ) { // no accounts were specified bResult = FALSE; } return ( bResult ); } BOOL // ret- BOOL, whether security translator should be called NeedToUseST( IVarSet * pVarSet, // in - varset containing migration settings BOOL bForceRemoteCheck // in - forces checking to be done based on the remote operations, not local ones ) { BOOL bResult = FALSE; BOOL bLocalAgent; _bstr_t text = pVarSet->get(GET_BSTR(DCTVS_Options_LocalProcessingOnly)); if (!text) return FALSE; bLocalAgent = ( UStrICmp(text,GET_STRING(IDS_YES)) == 0 ); if ( bLocalAgent || bForceRemoteCheck ) { // the agent dispatched to remote machines does translation for // files text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateFiles)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Files"); bResult = TRUE; } // and Shares text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateShares)); if (! UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Shares"); bResult = TRUE; } // and User Rights text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateUserRights)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Rights"); bResult = TRUE; } // and Local Groups text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateLocalGroups)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: LGroups"); bResult = TRUE; } // and Printers text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslatePrinters)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Printers"); bResult = TRUE; } // and User Profiles text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateUserProfiles)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Local User Profiles"); bResult = TRUE; } text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateRegistry)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Registry"); bResult = TRUE; } // when dispatching, the settings are per-job, not per-server // it is possible to choose whether to migrate, translate, or both, // for each computer in the server list. // this setting indicates that the translation will not be run on this computer // even though other computers are being translated during this same job text = pVarSet->get(GET_BSTR(DCTVS_LocalServer_MigrateOnly)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { errTrace.DbgMsgWrite(0,L"Need to use ST: but not on this computer"); bResult = FALSE; } } else { // The local engine does exchange translation for // mailboxes text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateMailboxes)); if ( text.length() ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Mailboxes"); bResult = TRUE; } // and containers text = pVarSet->get(GET_BSTR(DCTVS_Security_TranslateContainers)); if ( text.length() ) { errTrace.DbgMsgWrite(0,L"Need to use ST: Containers"); bResult = TRUE; } // The local engine is also used to build an account mapping file to // send out with the dispatched agents for security translation text = pVarSet->get(GET_BSTR(DCTVS_Security_BuildCacheFile)); if ( text.length() ) { errTrace.DbgMsgWrite(0,L"Need to use ST: BuildCacheFile"); bResult = TRUE; } } return bResult; } BOOL // ret- whether agents need to be dispatched to remote machines NeedToDispatch( IVarSet * pVarSet // in - varset describing migration job ) { BOOL bNeedToDispatch = FALSE; _bstr_t text; long count; _bstr_t wizard = pVarSet->get(L"Options.Wizard"); if (!wizard) return FALSE; if (! UStrICmp(wizard,L"user") ) { bNeedToDispatch = FALSE; } else if (! UStrICmp(wizard,L"group") ) { bNeedToDispatch = FALSE; } else if ( !UStrICmp(wizard,L"computer") ) { bNeedToDispatch = TRUE; } else if ( ! UStrICmp(wizard,L"security" ) ) { bNeedToDispatch = TRUE; } else if ( ! UStrICmp(wizard,L"service" ) ) { bNeedToDispatch = TRUE; } else if ( ! UStrICmp(wizard,L"retry") ) { bNeedToDispatch = TRUE; } // the dispatcher is used to migrate computers, and to translate security count = pVarSet->get(GET_BSTR(DCTVS_Servers_NumItems)); if ( count > 0 ) { bNeedToDispatch = TRUE; } return bNeedToDispatch; } BOOL NeedToRunReports( IVarSet * pVarSet // in - varset describing migration job ) { BOOL bNeedToReport = FALSE; _bstr_t text = pVarSet->get(GET_BSTR(DCTVS_Reports_Generate)); if (!text) return FALSE; if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { bNeedToReport = TRUE; } return bNeedToReport; } BOOL // ret- whether the local engine needs to be called to perform domain specific tasks NeedToRunLocalAgent( IVarSet * pVarSet // in - varset describing migration job ) { BOOL bNeedToRunLocal = FALSE; _bstr_t text; _bstr_t wizard = pVarSet->get(L"Options.Wizard"); if (!wizard) return FALSE; // if the wizard type is specified, use it to determine what to do if ( ! UStrICmp(wizard,L"user") ) { bNeedToRunLocal = TRUE; } else if (! UStrICmp(wizard,L"group") ) { bNeedToRunLocal = TRUE; } else if ( !UStrICmp(wizard,L"computer") ) { bNeedToRunLocal = TRUE; } else if ( !UStrICmp(wizard,L"security") ) { bNeedToRunLocal = FALSE; } else if ( !UStrICmp(wizard,L"undo") ) { bNeedToRunLocal = TRUE; } else if ( ! UStrICmp(wizard,L"service") ) { bNeedToRunLocal = FALSE; } else if ( !UStrICmp(wizard, "exchange") ) { bNeedToRunLocal = TRUE; } else if (! UStrICmp(wizard,L"retry") ) { bNeedToRunLocal = FALSE; } else if ( ! UStrICmp(wizard,L"reporting") ) { text = pVarSet->get(GET_BSTR(DCTVS_GatherInformation_ComputerPasswordAge)); if ( !UStrICmp(text,GET_STRING(IDS_YES)) ) { bNeedToRunLocal = TRUE; } } else { // wizard type is not specified, try to determine what needs to be done from the varset entries // The local agent is used for account replication and exchange translation if ( NeedToUseAR(pVarSet) ) bNeedToRunLocal = TRUE; if ( NeedToUseST(pVarSet) ) bNeedToRunLocal = TRUE; } return bNeedToRunLocal; }