We need you! We're working hard on the next version of Developer Fusion -
Let us know what you think we should be up to!
- namespace System.Security.Policy
- {
- using System.Collections;
- using System.Deployment.Internal.Isolation;
- using System.Deployment.Internal.Isolation.Manifest;
- using System.Globalization;
- using System.Runtime.InteropServices;
- using System.Security.Cryptography;
- using System.Security.Permissions;
- using System.Security.Policy;
- using System.Security.Util;
- using System.Threading;
- using System.Runtime.Versioning;
-
- [SecurityPermissionAttribute(SecurityAction.Assert, Flags = SecurityPermissionFlag.UnmanagedCode)]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class ApplicationSecurityInfo
- {
- private ActivationContext m_context;
- private object m_appId;
- private object m_deployId;
- private object m_defaultRequest;
- private object m_appEvidence;
-
- internal ApplicationSecurityInfo()
- {
- }
-
-
-
-
-
- public ApplicationSecurityInfo(ActivationContext activationContext)
- {
- if (activationContext == null)
- throw new ArgumentNullException("activationContext");
- m_context = activationContext;
- }
-
- public ApplicationId ApplicationId {
- get {
- if (m_appId == null && m_context != null) {
- ICMS appManifest = m_context.ApplicationComponentManifest;
- ApplicationId appId = ParseApplicationId(appManifest);
- Interlocked.CompareExchange(ref m_appId, appId, null);
- }
- return m_appId as ApplicationId;
- }
- set {
- if (value == null)
- throw new ArgumentNullException("value");
- m_appId = value;
- }
- }
-
- public ApplicationId DeploymentId {
- get {
- if (m_deployId == null && m_context != null) {
- ICMS deplManifest = m_context.DeploymentComponentManifest;
- ApplicationId deplId = ParseApplicationId(deplManifest);
- Interlocked.CompareExchange(ref m_deployId, deplId, null);
- }
- return m_deployId as ApplicationId;
- }
- set {
- if (value == null)
- throw new ArgumentNullException("value");
- m_deployId = value;
- }
- }
-
- public PermissionSet DefaultRequestSet {
- [ResourceExposure(ResourceScope.None)]
- [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
- get {
- if (m_defaultRequest == null) {
- PermissionSet defaultRequest = new PermissionSet(PermissionState.None);
- if (m_context != null) {
-
- ICMS appManifest = m_context.ApplicationComponentManifest;
- string defaultPSetId = ((IMetadataSectionEntry)appManifest.MetadataSectionEntry).defaultPermissionSetID;
- object permissionSetObj = null;
- if (defaultPSetId != null && defaultPSetId.Length > 0) {
- ((ISectionWithStringKey)appManifest.PermissionSetSection).Lookup(defaultPSetId, out permissionSetObj);
- IPermissionSetEntry defaultPSet = permissionSetObj as IPermissionSetEntry;
- if (defaultPSet != null) {
- SecurityElement seDefaultPS = SecurityElement.FromString(defaultPSet.AllData.XmlSegment);
- string unrestricted = seDefaultPS.Attribute("temp:Unrestricted");
- if (unrestricted != null)
- seDefaultPS.AddAttribute("Unrestricted", unrestricted);
- defaultRequest = new PermissionSet(PermissionState.None);
- defaultRequest.FromXml(seDefaultPS);
-
-
- string sameSite = seDefaultPS.Attribute("SameSite");
- if (String.Compare(sameSite, "Site", StringComparison.OrdinalIgnoreCase) == 0) {
- NetCodeGroup netCodeGroup = new NetCodeGroup(new AllMembershipCondition());
- Url url = new Url(m_context.Identity.CodeBase);
- PolicyStatement ps = netCodeGroup.CalculatePolicy(url.GetURLString().Host, url.GetURLString().Scheme, url.GetURLString().Port);
- if (ps != null) {
- PermissionSet netPermissionSet = ps.PermissionSet;
- if (netPermissionSet != null)
- defaultRequest.InplaceUnion(netPermissionSet);
- }
- if (String.Compare("file:", 0, m_context.Identity.CodeBase, 0, 5, StringComparison.OrdinalIgnoreCase) == 0) {
- FileCodeGroup fileCodeGroup = new FileCodeGroup(new AllMembershipCondition(), FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery);
- ps = fileCodeGroup.CalculatePolicy(url);
- if (ps != null) {
- PermissionSet filePermissionSet = ps.PermissionSet;
- if (filePermissionSet != null)
- defaultRequest.InplaceUnion(filePermissionSet);
- }
- }
- }
- }
- }
- }
- Interlocked.CompareExchange(ref m_defaultRequest, defaultRequest, null);
- }
- return m_defaultRequest as PermissionSet;
- }
- set {
- if (value == null)
- throw new ArgumentNullException("value");
- m_defaultRequest = value;
- }
- }
-
- public Evidence ApplicationEvidence {
- get {
- if (m_appEvidence == null) {
- Evidence appEvidence = new Evidence();
- if (m_context != null) {
- appEvidence = new Evidence();
- Url deploymentUrl = new Url(m_context.Identity.CodeBase);
- appEvidence.AddHost(deploymentUrl);
- appEvidence.AddHost(Zone.CreateFromUrl(m_context.Identity.CodeBase));
- if (String.Compare("file:", 0, m_context.Identity.CodeBase, 0, 5, StringComparison.OrdinalIgnoreCase) != 0)
- appEvidence.AddHost(Site.CreateFromUrl(m_context.Identity.CodeBase));
- appEvidence.AddHost(new StrongName(new StrongNamePublicKeyBlob(DeploymentId.m_publicKeyToken), DeploymentId.Name, DeploymentId.Version));
- }
- Interlocked.CompareExchange(ref m_appEvidence, appEvidence, null);
- }
- return m_appEvidence as Evidence;
- }
- set {
- if (value == null)
- throw new ArgumentNullException("value");
- m_appEvidence = value;
- }
- }
-
-
-
-
-
- private static ApplicationId ParseApplicationId(ICMS manifest)
- {
- if (manifest.Identity == null)
- return null;
-
- return new ApplicationId(Hex.DecodeHexString(manifest.Identity.GetAttribute("", "publicKeyToken")), manifest.Identity.GetAttribute("", "name"), new Version(manifest.Identity.GetAttribute("", "version")), manifest.Identity.GetAttribute("", "processorArchitecture"), manifest.Identity.GetAttribute("", "culture"));
- }
- }
- }