using System; using System.Globalization; using System.Runtime.InteropServices; using System.Security.Permissions; namespace System.Security { /// Defines the underlying structure of all code access permissions. // Token: 0x020005BC RID: 1468 [ComVisible(true)] [MonoTODO("CAS support is experimental (and unsupported).")] [Serializable] public abstract class CodeAccessPermission : IPermission, ISecurityEncodable, IStackWalk { /// Declares that the calling code can access the resource protected by a permission demand through the code that calls this method, even if callers higher in the stack have not been granted permission to access the resource. Using can create security issues. /// The calling code does not have .-or- There is already an active for the current frame. // Token: 0x06003595 RID: 13717 RVA: 0x000B7D10 File Offset: 0x000B5F10 [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public void Assert() { } // Token: 0x06003596 RID: 13718 RVA: 0x000B7D14 File Offset: 0x000B5F14 internal bool CheckAssert(CodeAccessPermission asserted) { return asserted != null && asserted.GetType() == base.GetType() && this.IsSubsetOf(asserted); } // Token: 0x06003597 RID: 13719 RVA: 0x000B7D44 File Offset: 0x000B5F44 internal bool CheckDemand(CodeAccessPermission target) { return target != null && target.GetType() == base.GetType() && this.IsSubsetOf(target); } // Token: 0x06003598 RID: 13720 RVA: 0x000B7D74 File Offset: 0x000B5F74 internal bool CheckDeny(CodeAccessPermission denied) { if (denied == null) { return true; } Type type = denied.GetType(); return type != base.GetType() || this.Intersect(denied) == null || denied.IsSubsetOf(PermissionBuilder.Create(type)); } // Token: 0x06003599 RID: 13721 RVA: 0x000B7DBC File Offset: 0x000B5FBC internal bool CheckPermitOnly(CodeAccessPermission target) { return target != null && target.GetType() == base.GetType() && this.IsSubsetOf(target); } /// When implemented by a derived class, creates and returns an identical copy of the current permission object. /// A copy of the current permission object. // Token: 0x0600359A RID: 13722 public abstract IPermission Copy(); /// Forces a at run time if all callers higher in the call stack have not been granted the permission specified by the current instance. /// A caller higher in the call stack does not have the permission specified by the current instance.-or- A caller higher in the call stack has called on the current permission object. // Token: 0x0600359B RID: 13723 RVA: 0x000B7DEC File Offset: 0x000B5FEC public void Demand() { } /// Prevents callers higher in the call stack from using the code that calls this method to access the resource specified by the current instance. /// There is already an active for the current frame. // Token: 0x0600359C RID: 13724 RVA: 0x000B7DF0 File Offset: 0x000B5FF0 [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public void Deny() { } /// Determines whether the specified object is equal to the current . /// true if the specified object is equal to the current ; otherwise, false. /// The object to compare with the current . // Token: 0x0600359D RID: 13725 RVA: 0x000B7DF4 File Offset: 0x000B5FF4 [ComVisible(false)] public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != base.GetType()) { return false; } CodeAccessPermission codeAccessPermission = obj as CodeAccessPermission; return this.IsSubsetOf(codeAccessPermission) && codeAccessPermission.IsSubsetOf(this); } /// When overridden in a derived class, reconstructs a security object with a specified state from an XML encoding. /// The XML encoding to use to reconstruct the security object. /// The parameter is null. /// The parameter does not contain the XML encoding for an instance of the same type as the current instance.-or- The version number of the parameter is not supported. // Token: 0x0600359E RID: 13726 public abstract void FromXml(SecurityElement elem); /// Gets a hash code for the object that is suitable for use in hashing algorithms and data structures such as a hash table. /// A hash code for the current object. // Token: 0x0600359F RID: 13727 RVA: 0x000B7E3C File Offset: 0x000B603C [ComVisible(false)] public override int GetHashCode() { return base.GetHashCode(); } /// When implemented by a derived class, creates and returns a permission that is the intersection of the current permission and the specified permission. /// A new permission that represents the intersection of the current permission and the specified permission. This new permission is null if the intersection is empty. /// A permission to intersect with the current permission. It must be of the same type as the current permission. /// The parameter is not null and is not an instance of the same class as the current permission. // Token: 0x060035A0 RID: 13728 public abstract IPermission Intersect(IPermission target); /// When implemented by a derived class, determines whether the current permission is a subset of the specified permission. /// true if the current permission is a subset of the specified permission; otherwise, false. /// A permission that is to be tested for the subset relationship. This permission must be of the same type as the current permission. /// The parameter is not null and is not of the same type as the current permission. // Token: 0x060035A1 RID: 13729 public abstract bool IsSubsetOf(IPermission target); /// Creates and returns a string representation of the current permission object. /// A string representation of the current permission object. // Token: 0x060035A2 RID: 13730 RVA: 0x000B7E44 File Offset: 0x000B6044 public override string ToString() { SecurityElement securityElement = this.ToXml(); return securityElement.ToString(); } /// When overridden in a derived class, creates an XML encoding of the security object and its current state. /// An XML encoding of the security object, including any state information. // Token: 0x060035A3 RID: 13731 public abstract SecurityElement ToXml(); /// When overridden in a derived class, creates a permission that is the union of the current permission and the specified permission. /// A new permission that represents the union of the current permission and the specified permission. /// A permission to combine with the current permission. It must be of the same type as the current permission. /// The parameter is not null. This method is only supported at this level when passed null. // Token: 0x060035A4 RID: 13732 RVA: 0x000B7E60 File Offset: 0x000B6060 public virtual IPermission Union(IPermission other) { if (other != null) { throw new NotSupportedException(); } return null; } /// Prevents callers higher in the call stack from using the code that calls this method to access all resources except for the resource specified by the current instance. /// There is already an active for the current frame. // Token: 0x060035A5 RID: 13733 RVA: 0x000B7E70 File Offset: 0x000B6070 [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public void PermitOnly() { } /// Causes all previous overrides for the current frame to be removed and no longer in effect. /// There is no previous , , or for the current frame. // Token: 0x060035A6 RID: 13734 RVA: 0x000B7E74 File Offset: 0x000B6074 [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public static void RevertAll() { } /// Causes any previous for the current frame to be removed and no longer in effect. /// There is no previous for the current frame. // Token: 0x060035A7 RID: 13735 RVA: 0x000B7E78 File Offset: 0x000B6078 [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public static void RevertAssert() { } /// Causes any previous for the current frame to be removed and no longer in effect. /// There is no previous for the current frame. // Token: 0x060035A8 RID: 13736 RVA: 0x000B7E7C File Offset: 0x000B607C [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public static void RevertDeny() { } /// Causes any previous for the current frame to be removed and no longer in effect. /// There is no previous for the current frame. // Token: 0x060035A9 RID: 13737 RVA: 0x000B7E80 File Offset: 0x000B6080 [MonoTODO("CAS support is experimental (and unsupported). Imperative mode is not implemented.")] public static void RevertPermitOnly() { } // Token: 0x060035AA RID: 13738 RVA: 0x000B7E84 File Offset: 0x000B6084 internal SecurityElement Element(int version) { SecurityElement securityElement = new SecurityElement("IPermission"); Type type = base.GetType(); securityElement.AddAttribute("class", type.FullName + ", " + type.Assembly.ToString().Replace('"', '\'')); securityElement.AddAttribute("version", version.ToString()); return securityElement; } // Token: 0x060035AB RID: 13739 RVA: 0x000B7EE8 File Offset: 0x000B60E8 internal static PermissionState CheckPermissionState(PermissionState state, bool allowUnrestricted) { if (state != PermissionState.None) { if (state != PermissionState.Unrestricted) { string text = string.Format(Locale.GetText("Invalid enum {0}"), state); throw new ArgumentException(text, "state"); } } return state; } // Token: 0x060035AC RID: 13740 RVA: 0x000B7F38 File Offset: 0x000B6138 internal static int CheckSecurityElement(SecurityElement se, string parameterName, int minimumVersion, int maximumVersion) { if (se == null) { throw new ArgumentNullException(parameterName); } if (se.Tag != "IPermission") { string text = string.Format(Locale.GetText("Invalid tag {0}"), se.Tag); throw new ArgumentException(text, parameterName); } int num = minimumVersion; string text2 = se.Attribute("version"); if (text2 != null) { try { num = int.Parse(text2); } catch (Exception ex) { string text3 = Locale.GetText("Couldn't parse version from '{0}'."); text3 = string.Format(text3, text2); throw new ArgumentException(text3, parameterName, ex); } } if (num < minimumVersion || num > maximumVersion) { string text4 = Locale.GetText("Unknown version '{0}', expected versions between ['{1}','{2}']."); text4 = string.Format(text4, num, minimumVersion, maximumVersion); throw new ArgumentException(text4, parameterName); } return num; } // Token: 0x060035AD RID: 13741 RVA: 0x000B8028 File Offset: 0x000B6228 internal static bool IsUnrestricted(SecurityElement se) { string text = se.Attribute("Unrestricted"); return text != null && string.Compare(text, bool.TrueString, true, CultureInfo.InvariantCulture) == 0; } // Token: 0x060035AE RID: 13742 RVA: 0x000B8060 File Offset: 0x000B6260 internal bool ProcessFrame(SecurityFrame frame) { if (frame.PermitOnly != null) { bool flag = frame.PermitOnly.IsUnrestricted(); if (!flag) { foreach (object obj in frame.PermitOnly) { IPermission permission = (IPermission)obj; if (this.CheckPermitOnly(permission as CodeAccessPermission)) { flag = true; break; } } } if (!flag) { CodeAccessPermission.ThrowSecurityException(this, "PermitOnly", frame, SecurityAction.Demand, null); } } if (frame.Deny != null) { if (frame.Deny.IsUnrestricted()) { CodeAccessPermission.ThrowSecurityException(this, "Deny", frame, SecurityAction.Demand, null); } foreach (object obj2 in frame.Deny) { IPermission permission2 = (IPermission)obj2; if (!this.CheckDeny(permission2 as CodeAccessPermission)) { CodeAccessPermission.ThrowSecurityException(this, "Deny", frame, SecurityAction.Demand, permission2); } } } if (frame.Assert != null) { if (frame.Assert.IsUnrestricted()) { return true; } foreach (object obj3 in frame.Assert) { IPermission permission3 = (IPermission)obj3; if (this.CheckAssert(permission3 as CodeAccessPermission)) { return true; } } return false; } return false; } // Token: 0x060035AF RID: 13743 RVA: 0x000B8260 File Offset: 0x000B6460 internal static void ThrowInvalidPermission(IPermission target, Type expected) { string text = Locale.GetText("Invalid permission type '{0}', expected type '{1}'."); text = string.Format(text, target.GetType(), expected); throw new ArgumentException(text, "target"); } // Token: 0x060035B0 RID: 13744 RVA: 0x000B8294 File Offset: 0x000B6494 internal static void ThrowExecutionEngineException(SecurityAction stackmod) { string text = Locale.GetText("No {0} modifier is present on the current stack frame."); text = text + Environment.NewLine + "Currently only declarative stack modifiers are supported."; throw new ExecutionEngineException(string.Format(text, stackmod)); } // Token: 0x060035B1 RID: 13745 RVA: 0x000B82D0 File Offset: 0x000B64D0 internal static void ThrowSecurityException(object demanded, string message, SecurityFrame frame, SecurityAction action, IPermission failed) { throw new SecurityException(message); } } }