Exemplo n.º 1
0
 private void UpdateSystemInformationOfTarget(IDocumentSession session, CollectRequest collectRequest, FamilyEnumeration plataform, ExecutionLogBuilder executionLog)
 {
     if (!collectRequest.Target.IsSystemInformationDefined())
     {
         executionLog.CollectSystemInformation();
         ISystemInformationService systemInformationService = ProbeManager.GetSystemInformationService(plataform);
         if (systemInformationService != null)
         {
             try
             {
                 this.GetSystemInformationFromTarget(collectRequest, systemInformationService);
                 session.SaveChanges();
             }
             catch (RecoverableProbeException ex)
             {
                 CollectExecution collectExecution = this.CreateCollectExecution(session, collectRequest);
                 collectExecution.SetDateStartCollect();
                 this.ConfigureTheCollectRequestWithAnErrorProbeExecute(collectRequest, "SystemInformation", collectExecution, ex, executionLog);
                 session.SaveChanges();
                 throw new SystemInformationException(ex.Message, ex);
             }
             catch (Exception ex)
             {
                 CreateCollectionExcutionWithError(session, collectRequest, "SystemInformation", ex, executionLog);
                 session.SaveChanges();
                 throw new SystemInformationException(ex.Message, ex);
             }
         }
     }
 }
Exemplo n.º 2
0
        private void CreateCollectionExcutionWithError(IDocumentSession session, CollectRequest collectRequest, string capability, Exception ex, ExecutionLogBuilder executionLog)
        {
            CollectExecution collectExecution = this.CreateCollectExecution(session, collectRequest);

            collectExecution.SetDateStartCollect();
            EndsACollectRequestBecauseThisErrorIsUnrecoverable(collectRequest, capability, collectExecution, ex, executionLog);
        }
Exemplo n.º 3
0
        public CollectRequest CreateCollectRequestCompleteAfterCollect(IDocumentSession session)
        {
            CollectRequest collectRequest = new CollectRequest();

            session.Store(collectRequest);
            CollectExecution collectExecution = new CollectExecution();

            session.Store(collectExecution);
            collectExecution.RequestId = collectRequest.Oid;
            collectExecution.SetDateStartCollect();
            collectExecution.SetDateEndCollect();
            ProbeResult probeResult = new ProbeResultFactory().CreateProbeResultForRegistryCollect();

            CollectFactory collectFactory = new CollectFactory(session);
            ProbeExecution probeExecution = collectFactory.CreateAProbeExecution(probeResult, "registry");
            CollectResult  collectResult  = new CollectResultFactory().CreateCollectResultForTheProbeExecution(probeResult);

            collectRequest.Result = collectResult;
            string systemCharacteristicsXml = this.GetSystemCharacteristicsInXML(".system_characteristics.oval.org.mitre.oval.sc.5368.xml");

            collectResult.SystemCharacteristics = systemCharacteristicsXml;

            probeExecution.SystemCharacteristics = collectResult.SystemCharacteristics;
            collectExecution.ProbeExecutions.Add(probeExecution);
            this.CreateTarget(session, collectRequest);
            //session.Store(collectRequest);
            collectExecution.RequestId = collectRequest.Oid;
            return(collectRequest);
        }
Exemplo n.º 4
0
        private CollectExecution CreateCollectExecution(IDocumentSession session, CollectRequest collectRequest)
        {
            collectFactory = new CollectFactory();
            CollectExecution collectExecution = collectFactory.CreateCollectExecution(session, collectRequest);

            return(collectExecution);
        }
        public void Should_be_possible_finalize_the_collectRequest_if_the_number_of_execution_exceeds_of_limits()
        {
            IDocumentSession fakeSession    = provider.GetSession();
            CollectRequest   collectRequest = this.GetCollectRequest();
            oval_definitions definitions    = new OvalDocumentLoader().GetFakeOvalDefinitions("definitionsWithLocalVariable.xml");
            var objList = new List <ObjectType>();

            objList.Add(new family_object()
            {
                id = "oval:org.mitre.oval:obj:1000"
            });
            objList.Add(new file_object()
            {
                id = "oval:org.mitre.oval:obj:5000"
            });
            definitions.objects = objList.ToArray();

            var newDefinitiondoc = new DefinitionDocument()
            {
                OriginalId = "01", Text = definitions.GetDefinitionsXml()
            };

            session.Store(newDefinitiondoc);
            collectRequest.OvalDefinitionsId = newDefinitiondoc.Oid;
            CollectExecutionManagerFactory factory = new CollectExecutionManagerFactory(collectRequest, session);
            List <string>           registryObjectsThatNotProcessInFirstTime = new List <string>();
            List <string>           familyObjectsThatNotProcessInFirstTime   = new List <string>();
            CollectExecutionManager executionManager = factory.CreateExecutionManagerForTheSuccessScenario(this.GetResultForRegistry(collectRequest, registryObjectsThatNotProcessInFirstTime),
                                                                                                           this.GetResultForFamily(collectRequest, familyObjectsThatNotProcessInFirstTime));

            session.Store(collectRequest);
            var newExecution1 = new CollectExecution()
            {
                RequestId = collectRequest.Oid
            };

            session.Store(newExecution1);
            var newExecution2 = new CollectExecution()
            {
                RequestId = collectRequest.Oid
            };

            session.Store(newExecution2);
            var newExecution3 = new CollectExecution()
            {
                RequestId = collectRequest.Oid
            };

            session.Store(newExecution3);
            executionManager.ExecuteCollect(fakeSession, collectRequest, FamilyEnumeration.windows);
            session.SaveChanges();

            CollectRequest collectRequestAfterExecute = session.Load <CollectRequest>(collectRequest.Oid.ToString());

            Assert.IsNotNull(collectRequest);
            Assert.AreEqual(4, collectRequestAfterExecute.GetNumberOfExecutions(session));
            Assert.IsTrue(collectRequestAfterExecute.isClosed());
        }
Exemplo n.º 6
0
        public CollectExecution CreateCollect(IDocumentSession session)
        {
            CollectExecution collect = new CollectExecution();

            collect.SetDateStartCollect();
            collect.SetDateEndCollect();
            session.Store(collect);
            return(collect);
        }
Exemplo n.º 7
0
        public CollectExecution CreateACollectExecutionWithError(IDocumentSession session)
        {
            CollectExecution collectExecution = new CollectExecution();

            collectExecution.SetDateStartCollect();
            ProbeExecution probeExecution = this.GetProbeExecutionWithError(session);

            collectExecution.ProbeExecutions.Add(probeExecution);
            collectExecution.SetDateEndCollect();
            return(collectExecution);
        }
Exemplo n.º 8
0
        private static CollectExecution CreateCollectExecution(IDocumentSession session, CollectRequest collectRequest)
        {
            var collectExecution =
                new CollectExecution()
            {
                RequestId = collectRequest.Oid
            };

            collectExecution.SetDateStartCollect();
            collectExecution.SetDateEndCollect();

            return(collectExecution);
        }
Exemplo n.º 9
0
        public void Should_be_possible_to_get_a_number_of_times_that_was_executed_the_collectRequest()
        {
            CollectRequestFactory factory        = new CollectRequestFactory();
            IDocumentSession      fakeSession    = this.GetSession();
            CollectRequest        collectRequest = factory.CreateCollectRequest(fakeSession).Item2;

            Assert.IsTrue(collectRequest.GetNumberOfExecutions(fakeSession) == 0, "this request collect still not executed");

            //add two executions
            CollectExecution firstExecution = factory.CreateCollect(fakeSession);

            firstExecution.RequestId = collectRequest.Oid;
            firstExecution.ProbeExecutions.Add(factory.CreateProbeExecution(fakeSession, "registry"));
            firstExecution.ProbeExecutions.Add(factory.CreateProbeExecution(fakeSession, "family"));

            CollectExecution secondExecution = factory.CreateCollect(fakeSession);

            secondExecution.RequestId = collectRequest.Oid;
            secondExecution.ProbeExecutions.Add(factory.CreateProbeExecution(fakeSession, "registry"));
            fakeSession.SaveChanges();
            Assert.AreEqual(2, collectRequest.GetNumberOfExecutions(fakeSession));
        }
Exemplo n.º 10
0
        public CollectRequest CreateCollectRequestIncompleteAfterCollect(IDocumentSession session)
        {
            CollectRequest collectRequest = new CollectRequest();

            string        definitionsInXml = GetOvalObjectInXML(".definitions.fdcc_xpfirewall_oval.xml");
            StringBuilder builder          = new StringBuilder(definitionsInXml);
            var           newDefinitiondoc = new DefinitionDocument()
            {
                OriginalId = "01",
                Text       = builder.ToString()
            };

            session.Store(newDefinitiondoc);
            collectRequest.OvalDefinitionsId = newDefinitiondoc.Oid;
            session.Store(collectRequest);
            CollectExecution collectExecution = new CollectExecution();

            collectExecution.RequestId = collectRequest.Oid;
            session.Store(collectExecution);
            collectExecution.SetDateStartCollect();
            collectExecution.SetDateEndCollect();
            //collectRequest.Collects.Add(collectExecution);
            ProbeResult probeResult = new ProbeResultFactory().CreateProbeResultForRegistryCollect();

            CollectFactory collectFactory           = new CollectFactory(session);
            ProbeExecution probeExecution           = collectFactory.CreateAProbeExecution(probeResult, "registry");
            CollectResult  collectResult            = new CollectResultFactory().CreateCollectResultForTheProbeExecution(probeResult);
            string         systemCharacteristicsXml = this.GetSystemCharacteristicsInXML(".system_characteristics.fdcc_xpfirewall_oval.sc_incomplete.xml");

            collectResult.SystemCharacteristics = systemCharacteristicsXml;

            probeExecution.SystemCharacteristics = collectResult.SystemCharacteristics;
            collectExecution.ProbeExecutions.Add(probeExecution);
            // collectRequest.Collects.Add(collectExecution);
            this.CreateTarget(session, collectRequest);
            session.SaveChanges();
            return(collectRequest);
        }
Exemplo n.º 11
0
        /// <summary>
        /// This method is responsible to start of collect process.
        /// </summary>
        /// <param name="objectTypes">The object types.</param>
        public void ExecuteCollect(IDocumentSession session, CollectRequest collectRequest, FamilyEnumeration plataform)
        {
            ExecutionLogBuilder executionLog = new ExecutionLogBuilder();

            this.SetStatusToExecuting(collectRequest);

            CollectExecution collectExecution = this.CreateCollectExecution(session, collectRequest);

            try
            {
                collectExecution.SetDateStartCollect();
                this.StartCollect(session, collectRequest, collectExecution, plataform, executionLog);
                this.EndCollect(session, collectRequest, collectExecution);
            }
            catch (Exception ex)
            {
                var logMessage = String.Format(EXECUTION_ERROR_MESSAGE, ex.Message, ex.StackTrace);
                Logger.Error(logMessage);
                this.EndsACollectRequestBecauseThisErrorIsUnrecoverable(collectRequest, "Collect Manager", collectExecution, ex, executionLog);
            }

            session.SaveChanges();
        }
Exemplo n.º 12
0
 /// <summary>
 /// Ends the request collect because this error is unrecoverable.
 /// This request was not execute because exists some error that is not possible perform the collect.
 /// Ex.: Invalid credentials, bad format of oval xmls, etc.
 /// </summary>
 /// <param name="collectRequest">The request collect.</param>
 /// <param name="probe">The probe.</param>
 /// <param name="collectExecution">the Collect execution object.</param>
 /// <param name="error">the exception that represents an error.</param>
 private void EndsACollectRequestBecauseThisErrorIsUnrecoverable(CollectRequest collectRequest, string probeCapability, CollectExecution collectExecution, Exception error, ExecutionLogBuilder executionLog)
 {
     ConfigureTheCollectRequestWithAnErrorProbeExecute(collectRequest, probeCapability, collectExecution, error, executionLog);
     collectRequest.Close();
 }
Exemplo n.º 13
0
        private void CloseExecutionIfIncomplete(IDocumentSession session, CollectRequest collectRequest, CollectExecution collectExecution, FamilyEnumeration plataform, IEnumerable <ObjectType> objectTypes)
        {
            IEnumerable <SelectedProbe> objectsNotSupported = ProbeManager.GetNotSupportedObjects(objectTypes, plataform);
            var objectNotSupported        = this.GetObjectTypesFromSelectedProbes(objectsNotSupported);
            var objectSupportedNotCollect = objectTypes.Except(objectNotSupported);

            this.CreateCollectedObjectsForNotSupportedObjects(session, objectsNotSupported, collectRequest, collectExecution);
            if (objectSupportedNotCollect.Count() > 0)
            {
                IEnumerable <SelectedProbe> objectsSupportedNotCollected = ProbeManager.GetProbesFor(objectSupportedNotCollect, plataform);
                this.CreateCollectedObjectsForNotSupportedObjects(session, objectsSupportedNotCollected, collectRequest, collectExecution);
            }
            collectRequest.SetResultComplete(session);
            collectRequest.Close();
            session.SaveChanges();
        }
Exemplo n.º 14
0
        private void CreateCollectedObjectsForNotSupportedObjects(IDocumentSession session, IEnumerable <SelectedProbe> objectsNotSupported, CollectRequest collectRequest, CollectExecution collectExecution)
        {
            foreach (var probe in objectsNotSupported)
            {
                ProbeResult    probeResult    = probe.CreateCollectedObjectForNotSupportedObjects(probe.ObjectTypes);
                ProbeExecution probeExecution = this.CreateTheProbeExecution(probeResult, probe);
                collectRequest.UpdateSystemCharacteristics(session);
                collectExecution.ProbeExecutions.Add(probeExecution);

                session.SaveChanges();
            }
        }
Exemplo n.º 15
0
 private void EndCollect(IDocumentSession session, CollectRequest collectRequest, CollectExecution collectExecution)
 {
     if (collectTimeOut.IsExceededTheMaxOfExecutionsDefined(collectRequest.GetNumberOfExecutions(session)))
     {
         collectRequest.Close();
     }
     else
     {
         if (!collectRequest.isClosed())
         {
             if (!collectExecution.ExistsExecutionsWithError())
             {
                 collectRequest.TryClose(session);
             }
             else
             {
                 collectRequest.Reopen();
             }
         }
     }
     collectExecution.SetDateEndCollect();
     session.SaveChanges();
 }
Exemplo n.º 16
0
        /// <summary>
        /// Execute the collect for the probes selected
        /// </summary>
        /// <param name="selectedProbes">The selected probes.</param>
        /// <param name="collectRequest">The request collect.</param>
        private void ExecuteCollectWithProbes(IDocumentSession session, IEnumerable <SelectedProbe> selectedProbes, CollectRequest collectRequest,
                                              VariablesEvaluated variables, IEnumerable <StateType> states, CollectExecution collectExecution, ExecutionLogBuilder executionLog)
        {
            foreach (SelectedProbe probe in selectedProbes)
            {
                if (Interrupted)
                {
                    break;
                }

                try
                {
                    ProbeExecution probeExecution = this.ExecuteCollect(session, probe, collectRequest, variables, states, executionLog);
                    collectExecution.ProbeExecutions.Add(probeExecution);
                }
                catch (RecoverableProbeException ex)
                {
                    this.ConfigureTheCollectRequestWithAnErrorProbeExecute(collectRequest, probe.Capability.OvalObject, collectExecution, ex, executionLog);
                    session.SaveChanges();
                    throw ex;
                }
                catch (Exception ex)
                {
                    EndsACollectRequestBecauseThisErrorIsUnrecoverable(collectRequest, probe.Capability.OvalObject, collectExecution, ex, executionLog);
                    session.SaveChanges();
                    throw ex;
                }
            }

            session.SaveChanges();
        }
Exemplo n.º 17
0
        /// <summary>
        /// Configures the request collect with one probeExecute with the error status.
        /// </summary>
        /// <param name="collectRequest">The request collect.</param>
        /// <param name="probe">The probe.</param>
        /// <param name="collectExecution">The collect execution.</param>
        /// <param name="error">The error.</param>
        private void ConfigureTheCollectRequestWithAnErrorProbeExecute(CollectRequest collectRequest, string probeCapability, CollectExecution collectExecution, Exception error, ExecutionLogBuilder executionLog)
        {
            executionLog.AnErrorOccurred(error.Message);
            executionLog.EndCollect();
            ProbeExecution executionWithError = collectFactory.CreateAProbeExecutionWithError(probeCapability, executionLog.BuildExecutionLogs());

            collectExecution.ProbeExecutions.Add(executionWithError);
        }
Exemplo n.º 18
0
        private void StartCollect(IDocumentSession session, CollectRequest collectRequest, CollectExecution collectExecution, FamilyEnumeration plataform, ExecutionLogBuilder executionLog)
        {
            int  attemptsOfEvaluateVariables = 1;
            bool anErrorOccured      = false;
            bool allObjectWasCollect = false;

            IEnumerable <ObjectType> objectTypes = collectRequest.GetObjectTypesWasNotCollected(session);

            session.SaveChanges();

            while (!collectTimeOut.IsExceededTheMaxAttemptsOfEvaluateVariables(attemptsOfEvaluateVariables) &&
                   !allObjectWasCollect &&
                   !anErrorOccured &&
                   !Interrupted)
            {
                IEnumerable <StateType>     states         = collectRequest.GetStates(session);
                IEnumerable <SelectedProbe> selectedProbes = ProbeManager.GetProbesFor(objectTypes, plataform);
                VariablesEvaluated          variables      = variableEvaluatorService.Evaluate(collectRequest, session);

                session.SaveChanges();

                try
                {
                    this.UpdateSystemInformationOfTarget(session, collectRequest, plataform, executionLog);
                    this.ExecuteCollectWithProbes(session, selectedProbes, collectRequest, variables, states, collectExecution, executionLog);

                    session.SaveChanges();
                }
                catch (SystemInformationException ex)
                {
                    string logMessage;
                    if (ex.InnerException == null)
                    {
                        logMessage = String.Format(EXECUTION_ERROR_MESSAGE, ex.Message, ex.StackTrace);
                    }
                    else
                    {
                        logMessage = String.Format(EXECUTION_ERROR_MESSAGE_WITH_INNER_EXCEPTION, ex.Message, ex.InnerException.StackTrace, ex.StackTrace);
                    }
                    Logger.Error(logMessage);
                    collectRequest.SetResultError();
                    collectRequest.Close();
                    anErrorOccured = true;

                    session.SaveChanges();

                    break;
                }
                catch
                {
                    // only ends the loop. The error already was treated
                    anErrorOccured = true;
                }

                objectTypes         = collectRequest.GetObjectTypesWasNotCollected(session);
                allObjectWasCollect = objectTypes.Count() == 0;

                attemptsOfEvaluateVariables++;
            }

            if (Interrupted)
            {
                collectRequest.Status = CollectRequestStatus.Canceled;
            }
            else
            {
                if ((!allObjectWasCollect) && (!anErrorOccured))
                {
                    CloseExecutionIfIncomplete(session, collectRequest, collectExecution, plataform, objectTypes);
                }
            }

            session.SaveChanges();
        }