ExecuteResult ExecuteHandlerProcessInProc(SecurityContext parentSecurityContext, ActionItem a, Dictionary <string, string> dynamicData, object parentExitData, bool dryRun = false) { try { //string parms = ResolveConfigAndParameters( a, dynamicData ); string parms = a.Parameters.GetSerializedValues(Crypto, out string safeSerializedValues); IHandlerRuntime rt = CreateHandlerRuntime(a); rt.Progress += rt_Progress; rt.LogMessage += rt_LogMessage; if (!WantsStopOrPause()) { a.IngestParentSecurityContext(parentSecurityContext); SecurityContext sc = a.RunAs; //just an alias sc?.Crypto?.InheritSettingsIfRequired(Crypto); HandlerStartInfo startInfo = new HandlerStartInfo(StartInfo) { Parameters = parms, IsDryRun = dryRun, PlanInstanceId = InstanceId, InstanceId = a.InstanceId, ParentExitData = parentExitData, RunAs = sc, Crypto = a.Parameters?.Crypto }; a.Handler.StartInfo = new HandlerStartInfoData(startInfo); sc?.Impersonate(Crypto); a.Result = rt.Execute(startInfo); a.Handler.StartInfo.Parameters = safeSerializedValues; //avoids serializing decrypted values to the History Plan (bug #93) a.Result.BranchStatus = a.Result.Status; a.Result.SecurityContext = System.Security.Principal.WindowsIdentity.GetCurrent().Name; SaveExitDataAs(a); sc?.Undo(); } return(a.Result); } catch (Exception ex) { WriteUnhandledActionException(a, ex); return(new ExecuteResult() { Status = StatusType.Failed, ExitData = ex.Message }); } }
public ExecuteResult ExecuteHandlerProcess_SingleAction(ActionItem a, Dictionary <string, string> dynamicData, string parentExitData, bool dryRun = false) { ExecuteResult returnResult = new ExecuteResult(); ResolveConfigAndParameters(a, dynamicData, parentExitData); IHandlerRuntime rt = CreateHandlerRuntime(a); rt.Progress += rt_Progress; rt.LogMessage += rt_LogMessage; if (!WantsStopOrPause()) { try { HandlerStartInfo startInfo = new HandlerStartInfo(StartInfo) { Parameters = a.Parameters.GetSerializedValues(Crypto), IsDryRun = dryRun, PlanInstanceId = InstanceId, InstanceId = a.InstanceId, ParentExitData = parentExitData }; a.RunAs?.Impersonate(Crypto); ExecuteResult r = rt.Execute(startInfo); SaveExitDataAs(a); a.RunAs?.Undo(); if (r.Status > returnResult.Status) { returnResult = r; } } catch (Exception ex) { WriteUnhandledActionException(a, ex); returnResult = new ExecuteResult() { Status = StatusType.Failed }; } } return(returnResult); }
//public abstract string Parameters { get; set; } public abstract ExecuteResult Execute(HandlerStartInfo startInfo);
public HandlerStartInfoData(HandlerStartInfo handlerStartInfo) { Parameters = handlerStartInfo.Parameters; ParentExitData = handlerStartInfo.ParentExitData; }