336 lines
10 KiB
C++
336 lines
10 KiB
C++
|
/*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 <windows.h>
|
||
|
#include <stdio.h>
|
||
|
//#include <process.h>
|
||
|
|
||
|
//#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;
|
||
|
}
|
||
|
|