scripts
This commit is contained in:
@@ -0,0 +1,478 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Principal;
|
||||
using System.Threading;
|
||||
|
||||
namespace System.Security.Permissions
|
||||
{
|
||||
/// <summary>Allows checks against the active principal (see <see cref="T:System.Security.Principal.IPrincipal" />) using the language constructs defined for both declarative and imperative security actions. This class cannot be inherited.</summary>
|
||||
// Token: 0x0200055C RID: 1372
|
||||
[ComVisible(true)]
|
||||
[Serializable]
|
||||
public sealed class PrincipalPermission : IBuiltInPermission, IUnrestrictedPermission, IPermission, ISecurityEncodable
|
||||
{
|
||||
/// <summary>Initializes a new instance of the <see cref="T:System.Security.Permissions.PrincipalPermission" /> class with the specified <see cref="T:System.Security.Permissions.PermissionState" />.</summary>
|
||||
/// <param name="state">One of the <see cref="T:System.Security.Permissions.PermissionState" /> values. </param>
|
||||
/// <exception cref="T:System.ArgumentException">The <paramref name="state" /> parameter is not a valid <see cref="T:System.Security.Permissions.PermissionState" />. </exception>
|
||||
// Token: 0x06003218 RID: 12824 RVA: 0x000ABBC4 File Offset: 0x000A9DC4
|
||||
public PrincipalPermission(PermissionState state)
|
||||
{
|
||||
this.principals = new ArrayList();
|
||||
if (CodeAccessPermission.CheckPermissionState(state, true) == PermissionState.Unrestricted)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = new PrincipalPermission.PrincipalInfo(null, null, true);
|
||||
this.principals.Add(principalInfo);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="T:System.Security.Permissions.PrincipalPermission" /> class for the specified <paramref name="name" /> and <paramref name="role" />.</summary>
|
||||
/// <param name="name">The name of the <see cref="T:System.Security.Principal.IPrincipal" /> object's user. </param>
|
||||
/// <param name="role">The role of the <see cref="T:System.Security.Principal.IPrincipal" /> object's user (for example, Administrator). </param>
|
||||
// Token: 0x06003219 RID: 12825 RVA: 0x000ABC08 File Offset: 0x000A9E08
|
||||
public PrincipalPermission(string name, string role)
|
||||
: this(name, role, true)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="T:System.Security.Permissions.PrincipalPermission" /> class for the specified <paramref name="name" />, <paramref name="role" />, and authentication status.</summary>
|
||||
/// <param name="name">The name of the <see cref="T:System.Security.Principal.IPrincipal" /> object's user. </param>
|
||||
/// <param name="role">The role of the <see cref="T:System.Security.Principal.IPrincipal" /> object's user (for example, Administrator). </param>
|
||||
/// <param name="isAuthenticated">true to signify that the user is authenticated; otherwise, false. </param>
|
||||
// Token: 0x0600321A RID: 12826 RVA: 0x000ABC14 File Offset: 0x000A9E14
|
||||
public PrincipalPermission(string name, string role, bool isAuthenticated)
|
||||
{
|
||||
this.principals = new ArrayList();
|
||||
PrincipalPermission.PrincipalInfo principalInfo = new PrincipalPermission.PrincipalInfo(name, role, isAuthenticated);
|
||||
this.principals.Add(principalInfo);
|
||||
}
|
||||
|
||||
// Token: 0x0600321B RID: 12827 RVA: 0x000ABC48 File Offset: 0x000A9E48
|
||||
internal PrincipalPermission(ArrayList principals)
|
||||
{
|
||||
this.principals = (ArrayList)principals.Clone();
|
||||
}
|
||||
|
||||
// Token: 0x0600321C RID: 12828 RVA: 0x000ABC64 File Offset: 0x000A9E64
|
||||
int IBuiltInPermission.GetTokenIndex()
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
|
||||
/// <summary>Creates and returns an identical copy of the current permission.</summary>
|
||||
/// <returns>A copy of the current permission.</returns>
|
||||
// Token: 0x0600321D RID: 12829 RVA: 0x000ABC68 File Offset: 0x000A9E68
|
||||
public IPermission Copy()
|
||||
{
|
||||
return new PrincipalPermission(this.principals);
|
||||
}
|
||||
|
||||
/// <summary>Determines at run time whether the current principal matches the principal specified by the current permission.</summary>
|
||||
/// <exception cref="T:System.Security.SecurityException">The current principal does not pass the security check for the principal specified by the current permission.-or- The current <see cref="T:System.Security.Principal.IPrincipal" /> is null. </exception>
|
||||
// Token: 0x0600321E RID: 12830 RVA: 0x000ABC78 File Offset: 0x000A9E78
|
||||
public void Demand()
|
||||
{
|
||||
IPrincipal currentPrincipal = Thread.CurrentPrincipal;
|
||||
if (currentPrincipal == null)
|
||||
{
|
||||
throw new SecurityException("no Principal");
|
||||
}
|
||||
if (this.principals.Count > 0)
|
||||
{
|
||||
bool flag = false;
|
||||
foreach (object obj in this.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj;
|
||||
if ((principalInfo.Name == null || principalInfo.Name == currentPrincipal.Identity.Name) && (principalInfo.Role == null || currentPrincipal.IsInRole(principalInfo.Role)) && ((principalInfo.IsAuthenticated && currentPrincipal.Identity.IsAuthenticated) || !principalInfo.IsAuthenticated))
|
||||
{
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
throw new SecurityException("Demand for principal refused.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Reconstructs a permission with a specified state from an XML encoding.</summary>
|
||||
/// <param name="elem">The XML encoding to use to reconstruct the permission. </param>
|
||||
/// <exception cref="T:System.ArgumentNullException">The <paramref name="elem" /> parameter is null. </exception>
|
||||
/// <exception cref="T:System.ArgumentException">The <paramref name="elem" /> parameter is not a valid permission element.-or- The <paramref name="elem" /> parameter's version number is not valid. </exception>
|
||||
// Token: 0x0600321F RID: 12831 RVA: 0x000ABD90 File Offset: 0x000A9F90
|
||||
public void FromXml(SecurityElement elem)
|
||||
{
|
||||
this.CheckSecurityElement(elem, "elem", 1, 1);
|
||||
this.principals.Clear();
|
||||
if (elem.Children != null)
|
||||
{
|
||||
foreach (object obj in elem.Children)
|
||||
{
|
||||
SecurityElement securityElement = (SecurityElement)obj;
|
||||
if (securityElement.Tag != "Identity")
|
||||
{
|
||||
throw new ArgumentException("not IPermission/Identity");
|
||||
}
|
||||
string text = securityElement.Attribute("ID");
|
||||
string text2 = securityElement.Attribute("Role");
|
||||
string text3 = securityElement.Attribute("Authenticated");
|
||||
bool flag = false;
|
||||
if (text3 != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
flag = bool.Parse(text3);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
PrincipalPermission.PrincipalInfo principalInfo = new PrincipalPermission.PrincipalInfo(text, text2, flag);
|
||||
this.principals.Add(principalInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Creates and returns a permission that is the intersection of the current permission and the specified permission.</summary>
|
||||
/// <returns>A new permission that represents the intersection of the current permission and the specified permission. This new permission will be null if the intersection is empty.</returns>
|
||||
/// <param name="target">A permission to intersect with the current permission. It must be of the same type as the current permission. </param>
|
||||
/// <exception cref="T:System.ArgumentException">The <paramref name="target" /> parameter is not null and is not an instance of the same class as the current permission. </exception>
|
||||
// Token: 0x06003220 RID: 12832 RVA: 0x000ABEB4 File Offset: 0x000AA0B4
|
||||
public IPermission Intersect(IPermission target)
|
||||
{
|
||||
PrincipalPermission principalPermission = this.Cast(target);
|
||||
if (principalPermission == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (this.IsUnrestricted())
|
||||
{
|
||||
return principalPermission.Copy();
|
||||
}
|
||||
if (principalPermission.IsUnrestricted())
|
||||
{
|
||||
return this.Copy();
|
||||
}
|
||||
PrincipalPermission principalPermission2 = new PrincipalPermission(PermissionState.None);
|
||||
foreach (object obj in this.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj;
|
||||
foreach (object obj2 in principalPermission.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo2 = (PrincipalPermission.PrincipalInfo)obj2;
|
||||
if (principalInfo.IsAuthenticated == principalInfo2.IsAuthenticated)
|
||||
{
|
||||
string text = null;
|
||||
if (principalInfo.Name == principalInfo2.Name || principalInfo2.Name == null)
|
||||
{
|
||||
text = principalInfo.Name;
|
||||
}
|
||||
else if (principalInfo.Name == null)
|
||||
{
|
||||
text = principalInfo2.Name;
|
||||
}
|
||||
string text2 = null;
|
||||
if (principalInfo.Role == principalInfo2.Role || principalInfo2.Role == null)
|
||||
{
|
||||
text2 = principalInfo.Role;
|
||||
}
|
||||
else if (principalInfo.Role == null)
|
||||
{
|
||||
text2 = principalInfo2.Role;
|
||||
}
|
||||
if (text != null || text2 != null)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo3 = new PrincipalPermission.PrincipalInfo(text, text2, principalInfo.IsAuthenticated);
|
||||
principalPermission2.principals.Add(principalInfo3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return (principalPermission2.principals.Count <= 0) ? null : principalPermission2;
|
||||
}
|
||||
|
||||
/// <summary>Determines whether the current permission is a subset of the specified permission.</summary>
|
||||
/// <returns>true if the current permission is a subset of the specified permission; otherwise, false.</returns>
|
||||
/// <param name="target">A permission that is to be tested for the subset relationship. This permission must be of the same type as the current permission. </param>
|
||||
/// <exception cref="T:System.ArgumentException">The <paramref name="target" /> parameter is an object that is not of the same type as the current permission. </exception>
|
||||
// Token: 0x06003221 RID: 12833 RVA: 0x000AC0A0 File Offset: 0x000AA2A0
|
||||
public bool IsSubsetOf(IPermission target)
|
||||
{
|
||||
PrincipalPermission principalPermission = this.Cast(target);
|
||||
if (principalPermission == null)
|
||||
{
|
||||
return this.IsEmpty();
|
||||
}
|
||||
if (this.IsUnrestricted())
|
||||
{
|
||||
return principalPermission.IsUnrestricted();
|
||||
}
|
||||
if (principalPermission.IsUnrestricted())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
foreach (object obj in this.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj;
|
||||
bool flag = false;
|
||||
foreach (object obj2 in principalPermission.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo2 = (PrincipalPermission.PrincipalInfo)obj2;
|
||||
if ((principalInfo.Name == principalInfo2.Name || principalInfo2.Name == null) && (principalInfo.Role == principalInfo2.Role || principalInfo2.Role == null) && principalInfo.IsAuthenticated == principalInfo2.IsAuthenticated)
|
||||
{
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>Returns a value indicating whether the current permission is unrestricted.</summary>
|
||||
/// <returns>true if the current permission is unrestricted; otherwise, false.</returns>
|
||||
// Token: 0x06003222 RID: 12834 RVA: 0x000AC20C File Offset: 0x000AA40C
|
||||
public bool IsUnrestricted()
|
||||
{
|
||||
foreach (object obj in this.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj;
|
||||
if (principalInfo.Name == null && principalInfo.Role == null && principalInfo.IsAuthenticated)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>Creates and returns a string representing the current permission.</summary>
|
||||
/// <returns>A representation of the current permission.</returns>
|
||||
// Token: 0x06003223 RID: 12835 RVA: 0x000AC2A0 File Offset: 0x000AA4A0
|
||||
public override string ToString()
|
||||
{
|
||||
return this.ToXml().ToString();
|
||||
}
|
||||
|
||||
/// <summary>Creates an XML encoding of the permission and its current state.</summary>
|
||||
/// <returns>An XML encoding of the permission, including any state information.</returns>
|
||||
// Token: 0x06003224 RID: 12836 RVA: 0x000AC2B0 File Offset: 0x000AA4B0
|
||||
public SecurityElement ToXml()
|
||||
{
|
||||
SecurityElement securityElement = new SecurityElement("Permission");
|
||||
Type type = base.GetType();
|
||||
securityElement.AddAttribute("class", type.FullName + ", " + type.Assembly.ToString().Replace('"', '\''));
|
||||
securityElement.AddAttribute("version", 1.ToString());
|
||||
foreach (object obj in this.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj;
|
||||
SecurityElement securityElement2 = new SecurityElement("Identity");
|
||||
if (principalInfo.Name != null)
|
||||
{
|
||||
securityElement2.AddAttribute("ID", principalInfo.Name);
|
||||
}
|
||||
if (principalInfo.Role != null)
|
||||
{
|
||||
securityElement2.AddAttribute("Role", principalInfo.Role);
|
||||
}
|
||||
if (principalInfo.IsAuthenticated)
|
||||
{
|
||||
securityElement2.AddAttribute("Authenticated", "true");
|
||||
}
|
||||
securityElement.AddChild(securityElement2);
|
||||
}
|
||||
return securityElement;
|
||||
}
|
||||
|
||||
/// <summary>Creates a permission that is the union of the current permission and the specified permission.</summary>
|
||||
/// <returns>A new permission that represents the union of the current permission and the specified permission.</returns>
|
||||
/// <param name="other">A permission to combine with the current permission. It must be of the same type as the current permission. </param>
|
||||
/// <exception cref="T:System.ArgumentException">The <paramref name="other" /> parameter is an object that is not of the same type as the current permission. </exception>
|
||||
// Token: 0x06003225 RID: 12837 RVA: 0x000AC3DC File Offset: 0x000AA5DC
|
||||
public IPermission Union(IPermission other)
|
||||
{
|
||||
PrincipalPermission principalPermission = this.Cast(other);
|
||||
if (principalPermission == null)
|
||||
{
|
||||
return this.Copy();
|
||||
}
|
||||
if (this.IsUnrestricted() || principalPermission.IsUnrestricted())
|
||||
{
|
||||
return new PrincipalPermission(PermissionState.Unrestricted);
|
||||
}
|
||||
PrincipalPermission principalPermission2 = new PrincipalPermission(this.principals);
|
||||
foreach (object obj in principalPermission.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj;
|
||||
principalPermission2.principals.Add(principalInfo);
|
||||
}
|
||||
return principalPermission2;
|
||||
}
|
||||
|
||||
/// <summary>Determines whether the specified <see cref="T:System.Security.Permissions.PrincipalPermission" /> object is equal to the current <see cref="T:System.Security.Permissions.PrincipalPermission" />.</summary>
|
||||
/// <returns>true if the specified <see cref="T:System.Security.Permissions.PrincipalPermission" /> is equal to the current <see cref="T:System.Security.Permissions.PrincipalPermission" /> object; otherwise, false.</returns>
|
||||
/// <param name="obj">The <see cref="T:System.Security.Permissions.PrincipalPermission" /> object to compare with the current <see cref="T:System.Security.Permissions.PrincipalPermission" />. </param>
|
||||
// Token: 0x06003226 RID: 12838 RVA: 0x000AC494 File Offset: 0x000AA694
|
||||
[ComVisible(false)]
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
PrincipalPermission principalPermission = obj as PrincipalPermission;
|
||||
if (principalPermission == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (this.principals.Count != principalPermission.principals.Count)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
foreach (object obj2 in this.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo = (PrincipalPermission.PrincipalInfo)obj2;
|
||||
bool flag = false;
|
||||
foreach (object obj3 in principalPermission.principals)
|
||||
{
|
||||
PrincipalPermission.PrincipalInfo principalInfo2 = (PrincipalPermission.PrincipalInfo)obj3;
|
||||
if ((principalInfo.Name == principalInfo2.Name || principalInfo2.Name == null) && (principalInfo.Role == principalInfo2.Role || principalInfo2.Role == null) && principalInfo.IsAuthenticated == principalInfo2.IsAuthenticated)
|
||||
{
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>Gets a hash code for the <see cref="T:System.Security.Permissions.PrincipalPermission" /> object that is suitable for use in hashing algorithms and data structures such as a hash table.</summary>
|
||||
/// <returns>A hash code for the current <see cref="T:System.Security.Permissions.PrincipalPermission" /> object.</returns>
|
||||
// Token: 0x06003227 RID: 12839 RVA: 0x000AC608 File Offset: 0x000AA808
|
||||
[ComVisible(false)]
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return base.GetHashCode();
|
||||
}
|
||||
|
||||
// Token: 0x06003228 RID: 12840 RVA: 0x000AC610 File Offset: 0x000AA810
|
||||
private PrincipalPermission Cast(IPermission target)
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
PrincipalPermission principalPermission = target as PrincipalPermission;
|
||||
if (principalPermission == null)
|
||||
{
|
||||
CodeAccessPermission.ThrowInvalidPermission(target, typeof(PrincipalPermission));
|
||||
}
|
||||
return principalPermission;
|
||||
}
|
||||
|
||||
// Token: 0x06003229 RID: 12841 RVA: 0x000AC644 File Offset: 0x000AA844
|
||||
private bool IsEmpty()
|
||||
{
|
||||
return this.principals.Count == 0;
|
||||
}
|
||||
|
||||
// Token: 0x0600322A RID: 12842 RVA: 0x000AC654 File Offset: 0x000AA854
|
||||
internal int CheckSecurityElement(SecurityElement se, string parameterName, int minimumVersion, int maximumVersion)
|
||||
{
|
||||
if (se == null)
|
||||
{
|
||||
throw new ArgumentNullException(parameterName);
|
||||
}
|
||||
if (se.Tag != "Permission")
|
||||
{
|
||||
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: 0x04001496 RID: 5270
|
||||
private const int version = 1;
|
||||
|
||||
// Token: 0x04001497 RID: 5271
|
||||
private ArrayList principals;
|
||||
|
||||
// Token: 0x0200055D RID: 1373
|
||||
internal class PrincipalInfo
|
||||
{
|
||||
// Token: 0x0600322B RID: 12843 RVA: 0x000AC744 File Offset: 0x000AA944
|
||||
public PrincipalInfo(string name, string role, bool isAuthenticated)
|
||||
{
|
||||
this._name = name;
|
||||
this._role = role;
|
||||
this._isAuthenticated = isAuthenticated;
|
||||
}
|
||||
|
||||
// Token: 0x170009D7 RID: 2519
|
||||
// (get) Token: 0x0600322C RID: 12844 RVA: 0x000AC764 File Offset: 0x000AA964
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._name;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x170009D8 RID: 2520
|
||||
// (get) Token: 0x0600322D RID: 12845 RVA: 0x000AC76C File Offset: 0x000AA96C
|
||||
public string Role
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._role;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x170009D9 RID: 2521
|
||||
// (get) Token: 0x0600322E RID: 12846 RVA: 0x000AC774 File Offset: 0x000AA974
|
||||
public bool IsAuthenticated
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._isAuthenticated;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x04001498 RID: 5272
|
||||
private string _name;
|
||||
|
||||
// Token: 0x04001499 RID: 5273
|
||||
private string _role;
|
||||
|
||||
// Token: 0x0400149A RID: 5274
|
||||
private bool _isAuthenticated;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user