public void AddEvidence(string evidenceFileName)
    {
        EvidenceCollection evidenceAdded = ProcessEvidenceDocument(evidenceFileName);

        if (evidenceAdded != null)
        {
            if (evidenceAdded.Evidence != null)
            {
                SetToCollection(evidenceAdded);
            }
        }
    }
 protected override void SingletonAwake()
 {
     base.SingletonAwake();
     evidenceQuantity  = 0;
     evidence          = new EvidenceCollection();
     evidence.Evidence = new Evidence[maxEvidenceQuantity];
     for (int i = 0; i < maxEvidenceQuantity; i++)
     {
         evidence.Evidence[i] = GetNullEvidence();
     }
     SetActivatedInventoryMembers(false);
 }
 public void SetToCollection(EvidenceCollection _evidence)
 {
     if (!EvidenceFull())
     {
         for (int i = 0; i < _evidence.Evidence.Length; i++)
         {
             evidence.Evidence[evidenceQuantity] = _evidence.Evidence[i];
             evidenceQuantity++;
             if (EvidenceFull())
             {
                 return;
             }
         }
     }
 }
        /// <summary>
        /// Create the XML file from the specified data and send it to
        /// the configured URL.
        /// </summary>
        protected override void BuildAndSendXml()
        {
            List <ShareUsageData> allData = new List <ShareUsageData>();
            ShareUsageData        currentData;

            while (EvidenceCollection.TryTake(out currentData, TakeTimeout) &&
                   allData.Count < MinEntriesPerMessage * 2)
            {
                allData.Add(currentData);
            }

            // Create the zip stream and XML writer.
            using (MemoryStream memory = new MemoryStream())
            {
                using (GZipStream compressedStream = new GZipStream(
                           memory, CompressionMode.Compress, true))
                    using (XmlWriter writer = XmlWriter.Create(compressedStream, WriterSettings))
                    {
                        writer.WriteStartElement("Devices");
                        // Write each element in turn.
                        foreach (var data in allData)
                        {
                            WriteData(writer, data);
                        }
                        writer.WriteEndElement();
                    }

                memory.Position = 0;
                using (var content = new StreamContent(memory))
                {
                    content.Headers.Add("content-encoding", "gzip");
                    content.Headers.Add("content-type", "text/xml");

                    var res = HttpClient.PostAsync(ShareUsageUri, content).Result;
                    if (res.StatusCode != HttpStatusCode.OK)
                    {
                        throw new HttpRequestException(
                                  $"HTTP response was {res.StatusCode}: " +
                                  $"{res.Content.ToString()}.");
                    }
                }
            }
        }
Пример #5
0
        [System.Security.SecurityCritical]  // auto-generated
        private static object PrepareDataForSetup(String friendlyName,
                                                        AppDomainSetup setup,
                                                        Evidence providedSecurityInfo,
                                                        Evidence creatorsSecurityInfo,
                                                        IntPtr parentSecurityDescriptor,
                                                        string sandboxName,
                                                        string[] propertyNames,
                                                        string[] propertyValues)
        {
            byte[] serializedEvidence = null;
            bool generateDefaultEvidence = false;

#if FEATURE_CAS_POLICY
            // serialize evidence
            EvidenceCollection evidenceCollection = null;

            if (providedSecurityInfo != null || creatorsSecurityInfo != null)
            {
                // If we're just passing through AppDomain.CurrentDomain.Evidence, and that evidence is just
                // using the standard runtime AppDomainEvidenceFactory, don't waste time serializing it and
                // deserializing it back -- instead, we can recreate a new AppDomainEvidenceFactory in the new
                // domain.  We only want to do this if there is no HostSecurityManager, otherwise the
                // HostSecurityManager could have added additional evidence on top of our standard factory.
                HostSecurityManager hsm = CurrentDomain.DomainManager != null ? CurrentDomain.DomainManager.HostSecurityManager : null;
                bool hostMayContributeEvidence = hsm != null &&
                                                 hsm.GetType() != typeof(HostSecurityManager) &&
                                                 (hsm.Flags & HostSecurityManagerOptions.HostAppDomainEvidence) == HostSecurityManagerOptions.HostAppDomainEvidence;
                if (!hostMayContributeEvidence)
                {
                    if (providedSecurityInfo != null &&
                        providedSecurityInfo.IsUnmodified &&
                        providedSecurityInfo.Target != null &&
                        providedSecurityInfo.Target is AppDomainEvidenceFactory)
                    {
                        providedSecurityInfo = null;
                        generateDefaultEvidence = true;
                    }
                    if (creatorsSecurityInfo != null &&
                        creatorsSecurityInfo.IsUnmodified &&
                        creatorsSecurityInfo.Target != null &&
                        creatorsSecurityInfo.Target is AppDomainEvidenceFactory)
                    {
                        creatorsSecurityInfo = null;
                        generateDefaultEvidence = true;
                    }
                }
            }
            if ((providedSecurityInfo != null) ||
                (creatorsSecurityInfo != null)) {
                evidenceCollection = new EvidenceCollection();
                evidenceCollection.ProvidedSecurityInfo = providedSecurityInfo;
                evidenceCollection.CreatorsSecurityInfo = creatorsSecurityInfo;
            }

            if (evidenceCollection != null) {
                serializedEvidence =
                    CrossAppDomainSerializer.SerializeObject(evidenceCollection).GetBuffer();                
            }
#endif // FEATURE_CAS_POLICY

            AppDomainInitializerInfo initializerInfo = null;
            if (setup!=null && setup.AppDomainInitializer!=null)
                initializerInfo=new AppDomainInitializerInfo(setup.AppDomainInitializer);

            // will travel x-Ad, drop non-agile data 
            AppDomainSetup newSetup = new AppDomainSetup(setup, false);

#if FEATURE_CORECLR
            // Remove the special AppDomainCompatSwitch entries from the set of name value pairs
            // And add them to the AppDomainSetup
            //
            // This is only supported on CoreCLR through ICLRRuntimeHost2.CreateAppDomainWithManager
            // Desktop code should use System.AppDomain.CreateDomain() or 
            // System.AppDomainManager.CreateDomain() and add the flags to the AppDomainSetup
            List<String> compatList = new List<String>();
                        
            if(propertyNames!=null && propertyValues != null)
            {
                for (int i=0; i<propertyNames.Length; i++)
                {
                    if(String.Compare(propertyNames[i], "AppDomainCompatSwitch", StringComparison.OrdinalIgnoreCase) == 0) 
                    {
                        compatList.Add(propertyValues[i]);
                        propertyNames[i] = null;                        
                        propertyValues[i] = null;
                    }

                }
                
                if (compatList.Count > 0)
                {
                    newSetup.SetCompatibilitySwitches(compatList);
                }            
            }
#endif // FEATURE_CORECLR


            return new Object[] 
            {
                friendlyName, 
                newSetup, 
                parentSecurityDescriptor, 
                generateDefaultEvidence,
                serializedEvidence,
                initializerInfo,
                sandboxName,
                propertyNames,
                propertyValues
            };  
        } // PrepareDataForSetup
Пример #6
0
 private static object RemotelySetupRemoteDomain(AppDomain appDomainProxy, string friendlyName, AppDomainSetup setup, System.Security.Policy.Evidence providedSecurityInfo, System.Security.Policy.Evidence creatorsSecurityInfo, IntPtr parentSecurityDescriptor)
 {
     IntPtr ptr;
     int num;
     RemotingServices.GetServerContextAndDomainIdForProxy(appDomainProxy, out ptr, out num);
     if (ptr == IntPtr.Zero)
     {
         throw new AppDomainUnloadedException();
     }
     EvidenceCollection evidences = null;
     if ((providedSecurityInfo != null) || (creatorsSecurityInfo != null))
     {
         evidences = new EvidenceCollection {
             ProvidedSecurityInfo = providedSecurityInfo,
             CreatorsSecurityInfo = creatorsSecurityInfo
         };
     }
     bool flag = false;
     char[] serProvidedEvidence = null;
     char[] serCreatorEvidence = null;
     byte[] serializedEvidence = null;
     AppDomainInitializerInfo initializerInfo = null;
     if (providedSecurityInfo != null)
     {
         serProvidedEvidence = PolicyManager.MakeEvidenceArray(providedSecurityInfo, true);
         if (serProvidedEvidence == null)
         {
             flag = true;
         }
     }
     if ((creatorsSecurityInfo != null) && !flag)
     {
         serCreatorEvidence = PolicyManager.MakeEvidenceArray(creatorsSecurityInfo, true);
         if (serCreatorEvidence == null)
         {
             flag = true;
         }
     }
     if ((evidences != null) && flag)
     {
         serProvidedEvidence = (char[]) (serCreatorEvidence = null);
         serializedEvidence = CrossAppDomainSerializer.SerializeObject(evidences).GetBuffer();
     }
     if ((setup != null) && (setup.AppDomainInitializer != null))
     {
         initializerInfo = new AppDomainInitializerInfo(setup.AppDomainInitializer);
     }
     return InternalRemotelySetupRemoteDomain(ptr, num, friendlyName, setup, parentSecurityDescriptor, serProvidedEvidence, serCreatorEvidence, serializedEvidence, initializerInfo);
 }
 private static object PrepareDataForSetup(string friendlyName, AppDomainSetup setup, System.Security.Policy.Evidence providedSecurityInfo, System.Security.Policy.Evidence creatorsSecurityInfo, IntPtr parentSecurityDescriptor, string securityZone, string[] propertyNames, string[] propertyValues)
 {
     byte[] buffer = null;
     bool flag = false;
     EvidenceCollection evidences = null;
     if ((providedSecurityInfo != null) || (creatorsSecurityInfo != null))
     {
         System.Security.HostSecurityManager manager = (CurrentDomain.DomainManager != null) ? CurrentDomain.DomainManager.HostSecurityManager : null;
         if (((manager == null) || (manager.GetType() == typeof(System.Security.HostSecurityManager))) || ((manager.Flags & HostSecurityManagerOptions.HostAppDomainEvidence) != HostSecurityManagerOptions.HostAppDomainEvidence))
         {
             if (((providedSecurityInfo != null) && providedSecurityInfo.IsUnmodified) && ((providedSecurityInfo.Target != null) && (providedSecurityInfo.Target is AppDomainEvidenceFactory)))
             {
                 providedSecurityInfo = null;
                 flag = true;
             }
             if (((creatorsSecurityInfo != null) && creatorsSecurityInfo.IsUnmodified) && ((creatorsSecurityInfo.Target != null) && (creatorsSecurityInfo.Target is AppDomainEvidenceFactory)))
             {
                 creatorsSecurityInfo = null;
                 flag = true;
             }
         }
     }
     if ((providedSecurityInfo != null) || (creatorsSecurityInfo != null))
     {
         evidences = new EvidenceCollection {
             ProvidedSecurityInfo = providedSecurityInfo,
             CreatorsSecurityInfo = creatorsSecurityInfo
         };
     }
     if (evidences != null)
     {
         buffer = CrossAppDomainSerializer.SerializeObject(evidences).GetBuffer();
     }
     AppDomainInitializerInfo info = null;
     if ((setup != null) && (setup.AppDomainInitializer != null))
     {
         info = new AppDomainInitializerInfo(setup.AppDomainInitializer);
     }
     AppDomainSetup setup2 = new AppDomainSetup(setup, false);
     return new object[] { friendlyName, setup2, parentSecurityDescriptor, flag, buffer, info, securityZone, propertyNames, propertyValues };
 }
Пример #8
0
        // Used to switch into other AppDomain and call SetupRemoteDomain.
        //   We cannot simply call through the proxy, because if there
        //   are any remoting sinks registered, they can add non-mscorlib
        //   objects to the message (causing an assembly load exception when
        //   we try to deserialize it on the other side)
        private static object RemotelySetupRemoteDomain(AppDomain appDomainProxy,
                                                        String friendlyName,
                                                        AppDomainSetup setup,
                                                        Evidence providedSecurityInfo,
                                                        Evidence creatorsSecurityInfo,
                                                        IntPtr parentSecurityDescriptor)
        {
            BCLDebug.Assert(RemotingServices.IsTransparentProxy(appDomainProxy),
                            "Expected a proxy to the AppDomain.");

            // get context and appdomain id
            IntPtr  contextId;
            int     domainId;
            RemotingServices.GetServerContextAndDomainIdForProxy(
               appDomainProxy, out contextId, out domainId);

            if (contextId==IntPtr.Zero)
                throw new AppDomainUnloadedException();
            
            // serialize evidence
            EvidenceCollection evidenceCollection = null;
            if ((providedSecurityInfo != null) ||
                (creatorsSecurityInfo != null)) {
                evidenceCollection = new EvidenceCollection();
                evidenceCollection.ProvidedSecurityInfo = providedSecurityInfo;
                evidenceCollection.CreatorsSecurityInfo = creatorsSecurityInfo;
            }

            bool bNeedGenericFormatter = false;
            char[] serProvidedEvidence = null, serCreatorEvidence = null;
            byte[] serializedEvidence = null;
            AppDomainInitializerInfo initializerInfo=null;

            if (providedSecurityInfo != null) {
                serProvidedEvidence = PolicyManager.MakeEvidenceArray(providedSecurityInfo, true);
                if (serProvidedEvidence == null)
                    bNeedGenericFormatter = true;
            }
            if (creatorsSecurityInfo != null && !bNeedGenericFormatter) {
                serCreatorEvidence = PolicyManager.MakeEvidenceArray(creatorsSecurityInfo, true);
                if (serCreatorEvidence == null)
                    bNeedGenericFormatter = true;
            }
            if (evidenceCollection != null && bNeedGenericFormatter) {
                serProvidedEvidence = serCreatorEvidence = null;
                serializedEvidence =
                    CrossAppDomainSerializer.SerializeObject(evidenceCollection).GetBuffer();                
            }

            if (setup!=null && setup.AppDomainInitializer!=null)
                initializerInfo=new AppDomainInitializerInfo(setup.AppDomainInitializer);

            return InternalRemotelySetupRemoteDomain(contextId,
                                              domainId,
                                              friendlyName, 
                                              setup,
                                              parentSecurityDescriptor,
                                              serProvidedEvidence,
                                              serCreatorEvidence,
                                              serializedEvidence,
                                              initializerInfo);    
        } // RemotelySetupRemoteDomain