Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Security / HostSecurityManager.cs / 5 / HostSecurityManager.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// A HostSecurityManager gives a hosting application the chance to
// participate in the security decisions in the AppDomain.
//
namespace System.Security {
using System.Collections;
using System.Deployment.Internal.Isolation;
using System.Deployment.Internal.Isolation.Manifest;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Runtime.Hosting;
[Flags, Serializable()]
[System.Runtime.InteropServices.ComVisible(true)]
public enum HostSecurityManagerOptions {
None = 0x0000,
HostAppDomainEvidence = 0x0001,
HostPolicyLevel = 0x0002,
HostAssemblyEvidence = 0x0004,
HostDetermineApplicationTrust = 0x0008,
HostResolvePolicy = 0x0010,
AllFlags = 0x001F
}
[Serializable]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[System.Runtime.InteropServices.ComVisible(true)]
public class HostSecurityManager {
public HostSecurityManager () {}
// The host can choose which events he wants to participate in. This property can be set when
// the host only cares about a subset of the capabilities exposed through the HostSecurityManager.
public virtual HostSecurityManagerOptions Flags {
get {
// We use AllFlags as the default.
return HostSecurityManagerOptions.AllFlags;
}
}
// provide policy for the AppDomain.
public virtual PolicyLevel DomainPolicy {
get {
return null;
}
}
public virtual Evidence ProvideAppDomainEvidence (Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
public virtual Evidence ProvideAssemblyEvidence (Assembly loadedAssembly, Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
#if !FEATURE_PAL
[SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
public virtual ApplicationTrust DetermineApplicationTrust (Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context) {
if (applicationEvidence == null)
throw new ArgumentNullException("applicationEvidence");
// This method looks for a trust decision for the ActivationContext in three locations, in order
// of preference:
//
// 1. Supplied by the host in the AppDomainSetup. If the host supplied a decision this way, it
// will be in the applicationEvidence.
// 2. Reuse the ApplicationTrust from the current AppDomain
// 3. Ask the TrustManager for a trust decision
// get the activation context from the application evidence.
// The default HostSecurityManager does not examine the activatorEvidence
// but other security managers could use it to figure out the
// evidence of the domain attempting to activate the application.
IEnumerator enumerator = applicationEvidence.GetHostEnumerator();
ActivationArguments activationArgs = null;
ApplicationTrust appTrust = null;
while (enumerator.MoveNext())
{
if (activationArgs == null)
activationArgs = enumerator.Current as ActivationArguments;
if (appTrust == null)
appTrust = enumerator.Current as ApplicationTrust;
if (activationArgs != null && appTrust != null)
break;
}
if (activationArgs == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
ActivationContext actCtx = activationArgs.ActivationContext;
if (actCtx == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
// Make sure that any ApplicationTrust we find applies to the ActivationContext we're
// creating the new AppDomain for.
if (appTrust != null &&
!CmsUtils.CompareIdentities(appTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = null;
}
// If there was not a trust decision supplied in the Evidence, we can reuse the existing trust
// decision from this domain if its identity matches the ActivationContext of the new domain.
// Otherwise consult the TrustManager for a trust decision
if (appTrust == null)
{
if (AppDomain.CurrentDomain.ApplicationTrust != null &&
CmsUtils.CompareIdentities(AppDomain.CurrentDomain.ApplicationTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = AppDomain.CurrentDomain.ApplicationTrust;
}
else
{
appTrust = ApplicationSecurityManager.DetermineApplicationTrustInternal(actCtx, context);
}
}
// If the trust decision allows the application to run, then it should also have a permission set
// which is at least the permission set the application requested.
ApplicationSecurityInfo appRequest = new ApplicationSecurityInfo(actCtx);
if (appTrust != null &&
appTrust.IsApplicationTrustedToRun &&
!appRequest.DefaultRequestSet.IsSubsetOf(appTrust.DefaultGrantSet.PermissionSet))
{
throw new InvalidOperationException(Environment.GetResourceString("Policy_AppTrustMustGrantAppRequest"));
}
return appTrust;
}
#endif //!FEATURE_PAL
public virtual PermissionSet ResolvePolicy (Evidence evidence) {
return SecurityManager.PolicyManager.ResolveHelper(evidence);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// A HostSecurityManager gives a hosting application the chance to
// participate in the security decisions in the AppDomain.
//
namespace System.Security {
using System.Collections;
using System.Deployment.Internal.Isolation;
using System.Deployment.Internal.Isolation.Manifest;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Runtime.Hosting;
[Flags, Serializable()]
[System.Runtime.InteropServices.ComVisible(true)]
public enum HostSecurityManagerOptions {
None = 0x0000,
HostAppDomainEvidence = 0x0001,
HostPolicyLevel = 0x0002,
HostAssemblyEvidence = 0x0004,
HostDetermineApplicationTrust = 0x0008,
HostResolvePolicy = 0x0010,
AllFlags = 0x001F
}
[Serializable]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[System.Runtime.InteropServices.ComVisible(true)]
public class HostSecurityManager {
public HostSecurityManager () {}
// The host can choose which events he wants to participate in. This property can be set when
// the host only cares about a subset of the capabilities exposed through the HostSecurityManager.
public virtual HostSecurityManagerOptions Flags {
get {
// We use AllFlags as the default.
return HostSecurityManagerOptions.AllFlags;
}
}
// provide policy for the AppDomain.
public virtual PolicyLevel DomainPolicy {
get {
return null;
}
}
public virtual Evidence ProvideAppDomainEvidence (Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
public virtual Evidence ProvideAssemblyEvidence (Assembly loadedAssembly, Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
#if !FEATURE_PAL
[SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
public virtual ApplicationTrust DetermineApplicationTrust (Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context) {
if (applicationEvidence == null)
throw new ArgumentNullException("applicationEvidence");
// This method looks for a trust decision for the ActivationContext in three locations, in order
// of preference:
//
// 1. Supplied by the host in the AppDomainSetup. If the host supplied a decision this way, it
// will be in the applicationEvidence.
// 2. Reuse the ApplicationTrust from the current AppDomain
// 3. Ask the TrustManager for a trust decision
// get the activation context from the application evidence.
// The default HostSecurityManager does not examine the activatorEvidence
// but other security managers could use it to figure out the
// evidence of the domain attempting to activate the application.
IEnumerator enumerator = applicationEvidence.GetHostEnumerator();
ActivationArguments activationArgs = null;
ApplicationTrust appTrust = null;
while (enumerator.MoveNext())
{
if (activationArgs == null)
activationArgs = enumerator.Current as ActivationArguments;
if (appTrust == null)
appTrust = enumerator.Current as ApplicationTrust;
if (activationArgs != null && appTrust != null)
break;
}
if (activationArgs == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
ActivationContext actCtx = activationArgs.ActivationContext;
if (actCtx == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
// Make sure that any ApplicationTrust we find applies to the ActivationContext we're
// creating the new AppDomain for.
if (appTrust != null &&
!CmsUtils.CompareIdentities(appTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = null;
}
// If there was not a trust decision supplied in the Evidence, we can reuse the existing trust
// decision from this domain if its identity matches the ActivationContext of the new domain.
// Otherwise consult the TrustManager for a trust decision
if (appTrust == null)
{
if (AppDomain.CurrentDomain.ApplicationTrust != null &&
CmsUtils.CompareIdentities(AppDomain.CurrentDomain.ApplicationTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = AppDomain.CurrentDomain.ApplicationTrust;
}
else
{
appTrust = ApplicationSecurityManager.DetermineApplicationTrustInternal(actCtx, context);
}
}
// If the trust decision allows the application to run, then it should also have a permission set
// which is at least the permission set the application requested.
ApplicationSecurityInfo appRequest = new ApplicationSecurityInfo(actCtx);
if (appTrust != null &&
appTrust.IsApplicationTrustedToRun &&
!appRequest.DefaultRequestSet.IsSubsetOf(appTrust.DefaultGrantSet.PermissionSet))
{
throw new InvalidOperationException(Environment.GetResourceString("Policy_AppTrustMustGrantAppRequest"));
}
return appTrust;
}
#endif //!FEATURE_PAL
public virtual PermissionSet ResolvePolicy (Evidence evidence) {
return SecurityManager.PolicyManager.ResolveHelper(evidence);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListParaClient.cs
- SizeFConverter.cs
- CodeNamespace.cs
- DataGridViewTopRowAccessibleObject.cs
- WorkflowRuntimeSection.cs
- MappingMetadataHelper.cs
- HashMembershipCondition.cs
- TreeIterators.cs
- AssociationTypeEmitter.cs
- DBNull.cs
- TypeDescriptionProviderAttribute.cs
- _ChunkParse.cs
- TranslateTransform3D.cs
- SiteMapPathDesigner.cs
- HttpServerUtilityWrapper.cs
- UnsafeNativeMethods.cs
- AttachedPropertyBrowsableAttribute.cs
- XhtmlBasicLinkAdapter.cs
- DiscoveryMessageSequence11.cs
- SerializationHelper.cs
- XmlSchemaInclude.cs
- ArglessEventHandlerProxy.cs
- PassportIdentity.cs
- GraphicsContainer.cs
- NativeActivityMetadata.cs
- FixedDocument.cs
- XDeferredAxisSource.cs
- DataObjectCopyingEventArgs.cs
- DecimalKeyFrameCollection.cs
- WebPartVerbCollection.cs
- HttpResponse.cs
- BitConverter.cs
- DetailsViewModeEventArgs.cs
- BitmapPalettes.cs
- Vector3dCollection.cs
- WebPartConnection.cs
- TeredoHelper.cs
- SerializationInfoEnumerator.cs
- MgmtResManager.cs
- StringConverter.cs
- WorkerRequest.cs
- CodeCatchClause.cs
- XmlTypeAttribute.cs
- ContextMenuService.cs
- DrawingDrawingContext.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- CollectionType.cs
- LinkClickEvent.cs
- DataGridColumnHeaderCollection.cs
- PageParser.cs
- SystemColors.cs
- WebPartConnectionsCancelVerb.cs
- SmtpNetworkElement.cs
- HotSpot.cs
- RemoteTokenFactory.cs
- FunctionQuery.cs
- ByteAnimationUsingKeyFrames.cs
- NullableBoolConverter.cs
- ComplexLine.cs
- DateTimeFormat.cs
- PeerNameRecord.cs
- BreakRecordTable.cs
- UnitControl.cs
- CatalogPart.cs
- ReplyChannel.cs
- UdpConstants.cs
- ClientSettingsProvider.cs
- XmlQueryRuntime.cs
- DecoderExceptionFallback.cs
- DetailsViewPageEventArgs.cs
- XmlSchemaDatatype.cs
- UInt16Converter.cs
- XmlTextWriter.cs
- SqlBulkCopyColumnMapping.cs
- FlowNode.cs
- DataGridPageChangedEventArgs.cs
- Int16Converter.cs
- MultilineStringConverter.cs
- OleCmdHelper.cs
- InstanceLockLostException.cs
- EndpointNameMessageFilter.cs
- MissingMemberException.cs
- SqlDependencyUtils.cs
- WebPartCatalogCloseVerb.cs
- AmbiguousMatchException.cs
- InputLanguageManager.cs
- HtmlTextArea.cs
- HTMLTagNameToTypeMapper.cs
- PenThreadPool.cs
- DatatypeImplementation.cs
- EnumValAlphaComparer.cs
- ContainerActivationHelper.cs
- InteropBitmapSource.cs
- PolicyStatement.cs
- MachineKeySection.cs
- SplayTreeNode.cs
- QuaternionAnimation.cs
- Repeater.cs
- SingleAnimationUsingKeyFrames.cs
- AppDomainFactory.cs