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 Microsoft.Win32;
- using System.Collections;
- using System.Globalization;
- using System.IO;
- using System.Reflection;
- using System.Security.Permissions;
- using System.Security.Util;
- using System.Runtime.InteropServices;
- using System.Runtime.Remoting;
- using System.Runtime.Serialization;
- using System.Runtime.Versioning;
- using System.Text;
- using System.Threading;
-
-
- [Serializable()]
- internal enum ConfigId
- {
- None = 0,
- MachinePolicyLevel = 1,
- UserPolicyLevel = 2,
- EnterprisePolicyLevel = 3
- }
-
- static internal class PolicyLevelData
- {
-
-
-
- static internal readonly string s_defaultPermissionSets = "<NamedPermissionSets>" + "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Unrestricted=\"true\" " + "Name=\"FullTrust\" " + "Description=\"{Policy_PS_FullTrust}\"/>" + "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Name=\"Everything\" " + "Description=\"{Policy_PS_Everything}\">" + "<Permission class=\"System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<Permission class=\"System.Security.Permissions.EnvironmentPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<Permission class=\"System.Security.Permissions.FileIOPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<Permission class=\"System.Security.Permissions.FileDialogPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<Permission class=\"System.Security.Permissions.ReflectionPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<Permission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Flags=\"Assertion, UnmanagedCode, Execution, ControlThread, ControlEvidence, ControlPolicy, ControlAppDomain, SerializationFormatter, ControlDomainPolicy, ControlPrincipal, RemotingConfiguration, Infrastructure, BindingRedirects\"/>" + "<Permission class=\"System.Security.Permissions.UIPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<IPermission class=\"System.Net.SocketPermission, System, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<IPermission class=\"System.Net.WebPermission, System, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<IPermission class=\"System.Net.DnsPermission, System, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "</PermissionSet>" + "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Name=\"Nothing\" " + "Description=\"{Policy_PS_Nothing}\"/>" + "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Name=\"Execution\" " + "Description=\"{Policy_PS_Execution}\">" + "<Permission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Flags=\"Execution\"/>" + "</PermissionSet>" + "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Name=\"SkipVerification\" " + "Description=\"{Policy_PS_SkipVerification}\">" + "<Permission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Flags=\"SkipVerification\"/>" + "</PermissionSet>" + "</NamedPermissionSets>";
- }
-
- [Serializable()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class PolicyLevel
- {
- private ArrayList m_fullTrustAssemblies;
- private ArrayList m_namedPermissionSets;
- private CodeGroup m_rootCodeGroup;
- private string m_label;
- [OptionalField(VersionAdded = 2)]
- private PolicyLevelType m_type;
-
- #pragma warning disable 169
- private ConfigId m_configId;
- private bool m_useDefaultCodeGroupsOnReset;
- private bool m_generateQuickCacheOnLoad;
- private bool m_caching;
- private bool m_throwOnLoadError;
- private Encoding m_encoding;
- #pragma warning restore 169
-
- private bool m_loaded;
- private SecurityElement m_permSetElement;
- private string m_path;
-
- private static object s_InternalSyncObject;
- private static object InternalSyncObject {
- get {
- if (s_InternalSyncObject == null) {
- object o = new object();
- Interlocked.CompareExchange(ref s_InternalSyncObject, o, null);
- }
- return s_InternalSyncObject;
- }
- }
-
- private static readonly string[] s_FactoryPolicySearchStrings = {"{VERSION}", "{Policy_PS_FullTrust}", "{Policy_PS_Everything}", "{Policy_PS_Nothing}", "{Policy_PS_SkipVerification}", "{Policy_PS_Execution}"};
-
- private static readonly string[] s_InternetPolicySearchStrings = {"{VERSION}", "{Policy_PS_Internet}"};
-
- private static readonly string[] s_LocalIntranetPolicySearchStrings = {"{VERSION}", "{Policy_PS_LocalIntranet}"};
-
-
-
-
- private static readonly string s_internetPermissionSet = "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Name=\"Internet\" " + "Description=\"{Policy_PS_Internet}\">" + "<Permission class=\"System.Security.Permissions.FileDialogPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Access=\"Open\"/>" + "<Permission class=\"System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "UserQuota=\"512000\" " + "Allowed=\"ApplicationIsolationByUser\"/>" + "<Permission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Flags=\"Execution\"/>" + "<Permission class=\"System.Security.Permissions.UIPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Window=\"SafeTopLevelWindows\" " + "Clipboard=\"OwnClipboard\"/>" + "</PermissionSet>";
-
- private static readonly string s_localIntranetPermissionSet = "<PermissionSet class=\"System.Security.NamedPermissionSet\"" + "version=\"1\" " + "Name=\"LocalIntranet\" " + "Description=\"{Policy_PS_LocalIntranet}\">" + "<Permission class=\"System.Security.Permissions.EnvironmentPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Read=\"USERNAME\"/>" + "<Permission class=\"System.Security.Permissions.FileDialogPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<Permission class=\"System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Allowed=\"AssemblyIsolationByUser\" " + "UserQuota=\"9223372036854775807\" " + "Expiry=\"9223372036854775807\" " + "Permanent=\"true\"/>" + "<Permission class=\"System.Security.Permissions.ReflectionPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Flags=\"ReflectionEmit\"/>" + "<Permission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Flags=\"Execution, Assertion, BindingRedirects\"/>" + "<Permission class=\"System.Security.Permissions.UIPermission, mscorlib, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "<IPermission class=\"System.Net.DnsPermission, System, Version={VERSION}, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken + "\"" + "version=\"1\" " + "Unrestricted=\"true\"/>" + "</PermissionSet>";
-
- private static readonly Version s_mscorlibVersion = Assembly.GetExecutingAssembly().GetVersion();
-
- private static readonly string[] s_reservedNamedPermissionSets = {"FullTrust", "Nothing", "Execution", "SkipVerification", "Internet", "LocalIntranet"};
-
- private static readonly string[] s_extensibleNamedPermissionSets = {"Internet", "LocalIntranet"};
-
- [OnDeserialized()]
- private void OnDeserialized(StreamingContext ctx)
- {
- if (m_label != null)
- DeriveTypeFromLabel();
- }
-
- private void DeriveTypeFromLabel()
- {
- if (m_label.Equals(Environment.GetResourceString("Policy_PL_User")))
- m_type = System.Security.PolicyLevelType.User;
- else if (m_label.Equals(Environment.GetResourceString("Policy_PL_Machine")))
- m_type = System.Security.PolicyLevelType.Machine;
- else if (m_label.Equals(Environment.GetResourceString("Policy_PL_Enterprise")))
- m_type = System.Security.PolicyLevelType.Enterprise;
- else if (m_label.Equals(Environment.GetResourceString("Policy_PL_AppDomain")))
- m_type = System.Security.PolicyLevelType.AppDomain;
- else
- throw new ArgumentException(Environment.GetResourceString("Policy_Default"));
- }
-
- private string DeriveLabelFromType()
- {
- switch (m_type) {
- case System.Security.PolicyLevelType.User:
- return Environment.GetResourceString("Policy_PL_User");
- case System.Security.PolicyLevelType.Machine:
- return Environment.GetResourceString("Policy_PL_Machine");
- case System.Security.PolicyLevelType.Enterprise:
- return Environment.GetResourceString("Policy_PL_Enterprise");
- case System.Security.PolicyLevelType.AppDomain:
- return Environment.GetResourceString("Policy_PL_AppDomain");
- default:
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_EnumIllegalVal"), (int)m_type));
- break;
- }
- }
-
-
-
-
-
-
-
- private PolicyLevel()
- {
- }
-
- internal PolicyLevel(PolicyLevelType type) : this(type, GetLocationFromType(type))
- {
- }
- internal PolicyLevel(PolicyLevelType type, string path) : this(type, path, ConfigId.None)
- {
- }
- internal PolicyLevel(PolicyLevelType type, string path, ConfigId configId)
- {
- m_type = type;
- m_path = path;
- m_loaded = (path == null);
- if (m_path == null) {
- m_rootCodeGroup = CreateDefaultAllGroup();
- SetFactoryPermissionSets();
- SetDefaultFullTrustAssemblies();
- }
- m_configId = configId;
- }
-
- static internal string GetLocationFromType(PolicyLevelType type)
- {
- switch (type) {
- case PolicyLevelType.User:
- return Config.UserDirectory + "security.config";
- case PolicyLevelType.Machine:
- return Config.MachineDirectory + "security.config";
- case PolicyLevelType.Enterprise:
- return Config.MachineDirectory + "enterprisesec.config";
- default:
- return null;
- }
- }
-
- public static PolicyLevel CreateAppDomainLevel()
- {
- return new PolicyLevel(System.Security.PolicyLevelType.AppDomain);
- }
-
- public string Label {
- get {
- if (m_label == null)
- m_label = DeriveLabelFromType();
- return m_label;
- }
- }
-
-
-
-
-
- [ComVisible(false)]
- public PolicyLevelType Type {
- get { return m_type; }
- }
-
- internal ConfigId ConfigId {
- get { return m_configId; }
- }
-
- internal string Path {
- get { return m_path; }
- }
-
- public string StoreLocation {
- [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPolicy)]
- get { return GetLocationFromType(m_type); }
- }
-
- public CodeGroup RootCodeGroup {
- get {
- CheckLoaded();
- return m_rootCodeGroup;
- }
- set {
- if (value == null)
- throw new ArgumentNullException("RootCodeGroup");
-
- CheckLoaded();
- m_rootCodeGroup = value.Copy();
- }
- }
-
- public IList NamedPermissionSets {
- get {
- CheckLoaded();
- LoadAllPermissionSets();
-
- ArrayList newList = new ArrayList(m_namedPermissionSets.Count);
-
- IEnumerator enumerator = m_namedPermissionSets.GetEnumerator();
- while (enumerator.MoveNext()) {
- newList.Add(((NamedPermissionSet)enumerator.Current).Copy());
- }
-
- return newList;
- }
- }
-
- public CodeGroup ResolveMatchingCodeGroups(Evidence evidence)
- {
- if (evidence == null)
- throw new ArgumentNullException("evidence");
-
- return this.RootCodeGroup.ResolveMatchingCodeGroups(evidence);
- }
-
- [Obsolete("Because all GAC assemblies always get full trust, the full trust list is no longer meaningful. You should install any assemblies that are used in security policy in the GAC to ensure they are trusted.")]
- public void AddFullTrustAssembly(StrongName sn)
- {
- if (sn == null)
- throw new ArgumentNullException("sn");
-
- AddFullTrustAssembly(new StrongNameMembershipCondition(sn.PublicKey, sn.Name, sn.Version));
- }
-
- [Obsolete("Because all GAC assemblies always get full trust, the full trust list is no longer meaningful. You should install any assemblies that are used in security policy in the GAC to ensure they are trusted.")]
- public void AddFullTrustAssembly(StrongNameMembershipCondition snMC)
- {
- if (snMC == null)
- throw new ArgumentNullException("snMC");
-
- CheckLoaded();
-
- IEnumerator enumerator = m_fullTrustAssemblies.GetEnumerator();
- while (enumerator.MoveNext()) {
- if (((StrongNameMembershipCondition)enumerator.Current).Equals(snMC))
- throw new ArgumentException(Environment.GetResourceString("Argument_AssemblyAlreadyFullTrust"));
- }
-
- lock (m_fullTrustAssemblies) {
- m_fullTrustAssemblies.Add(snMC);
- }
- }
-
- [Obsolete("Because all GAC assemblies always get full trust, the full trust list is no longer meaningful. You should install any assemblies that are used in security policy in the GAC to ensure they are trusted.")]
- public void RemoveFullTrustAssembly(StrongName sn)
- {
- if (sn == null)
- throw new ArgumentNullException("assembly");
-
- RemoveFullTrustAssembly(new StrongNameMembershipCondition(sn.PublicKey, sn.Name, sn.Version));
- }
-
- [Obsolete("Because all GAC assemblies always get full trust, the full trust list is no longer meaningful. You should install any assemblies that are used in security policy in the GAC to ensure they are trusted.")]
- public void RemoveFullTrustAssembly(StrongNameMembershipCondition snMC)
- {
- if (snMC == null)
- throw new ArgumentNullException("snMC");
-
- CheckLoaded();
-
- object toRemove = null;
- IEnumerator enumerator = m_fullTrustAssemblies.GetEnumerator();
-
- while (enumerator.MoveNext()) {
- if (((StrongNameMembershipCondition)enumerator.Current).Equals(snMC)) {
- toRemove = enumerator.Current;
- break;
- }
- }
-
- if (toRemove == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_AssemblyNotFullTrust"));
-
- lock (m_fullTrustAssemblies) {
- m_fullTrustAssemblies.Remove(toRemove);
- }
- }
-
- [Obsolete("Because all GAC assemblies always get full trust, the full trust list is no longer meaningful. You should install any assemblies that are used in security policy in the GAC to ensure they are trusted.")]
- public IList FullTrustAssemblies {
- get {
- CheckLoaded();
- return new ArrayList(m_fullTrustAssemblies);
- }
- }
-
- public void AddNamedPermissionSet(NamedPermissionSet permSet)
- {
- if (permSet == null)
- throw new ArgumentNullException("permSet");
-
- CheckLoaded();
- LoadAllPermissionSets();
-
- lock (this) {
- IEnumerator enumerator = m_namedPermissionSets.GetEnumerator();
- while (enumerator.MoveNext()) {
- if (((NamedPermissionSet)enumerator.Current).Name.Equals(permSet.Name))
- throw new ArgumentException(Environment.GetResourceString("Argument_DuplicateName"));
- }
-
- NamedPermissionSet npsCopy = (NamedPermissionSet)permSet.Copy();
- npsCopy.IgnoreTypeLoadFailures = true;
- m_namedPermissionSets.Add(npsCopy);
- }
- }
-
- public NamedPermissionSet RemoveNamedPermissionSet(NamedPermissionSet permSet)
- {
- if (permSet == null)
- throw new ArgumentNullException("permSet");
-
- return RemoveNamedPermissionSet(permSet.Name);
- }
-
- public NamedPermissionSet RemoveNamedPermissionSet(string name)
- {
- CheckLoaded();
- LoadAllPermissionSets();
-
- if (name == null)
- throw new ArgumentNullException("name");
-
- int permSetIndex = -1;
-
-
- for (int index = 0; index < s_reservedNamedPermissionSets.Length; ++index) {
- if (s_reservedNamedPermissionSets[index].Equals(name))
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ReservedNPMS"), name));
- }
-
-
-
-
- ArrayList namedPermissionSets = m_namedPermissionSets;
-
- for (int index = 0; index < namedPermissionSets.Count; ++index) {
- if (((NamedPermissionSet)namedPermissionSets[index]).Name.Equals(name)) {
- permSetIndex = index;
- break;
- }
- }
-
- if (permSetIndex == -1)
- throw new ArgumentException(Environment.GetResourceString("Argument_NoNPMS"));
-
-
-
-
-
- ArrayList groups = new ArrayList();
- groups.Add(this.m_rootCodeGroup);
-
- for (int index = 0; index < groups.Count; ++index) {
- CodeGroup group = (CodeGroup)groups[index];
-
- if (group.PermissionSetName != null && group.PermissionSetName.Equals(name)) {
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_NPMSInUse"), name));
- }
-
- IEnumerator childEnumerator = group.Children.GetEnumerator();
-
- if (childEnumerator != null) {
- while (childEnumerator.MoveNext()) {
- groups.Add(childEnumerator.Current);
- }
- }
- }
-
- NamedPermissionSet permSet = (NamedPermissionSet)namedPermissionSets[permSetIndex];
- namedPermissionSets.RemoveAt(permSetIndex);
- return permSet;
- }
-
- public NamedPermissionSet ChangeNamedPermissionSet(string name, PermissionSet pSet)
- {
- if (name == null)
- throw new ArgumentNullException("name");
- if (pSet == null)
- throw new ArgumentNullException("pSet");
-
-
- for (int index = 0; index < s_reservedNamedPermissionSets.Length; ++index) {
- if (s_reservedNamedPermissionSets[index].Equals(name))
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_ReservedNPMS"), name));
- }
-
-
- NamedPermissionSet currentPSet = GetNamedPermissionSetInternal(name);
-
-
- if (currentPSet == null)
- throw new ArgumentException(Environment.GetResourceString("Argument_NoNPMS"));
-
-
- NamedPermissionSet retval = (NamedPermissionSet)currentPSet.Copy();
-
-
- currentPSet.Reset();
- currentPSet.SetUnrestricted(pSet.IsUnrestricted());
-
- IEnumerator enumerator = pSet.GetEnumerator();
- while (enumerator.MoveNext()) {
- currentPSet.SetPermission(((IPermission)enumerator.Current).Copy());
- }
-
- if (pSet is NamedPermissionSet) {
- currentPSet.Description = ((NamedPermissionSet)pSet).Description;
- }
-
- return retval;
- }
-
- public NamedPermissionSet GetNamedPermissionSet(string name)
- {
- if (name == null)
- throw new ArgumentNullException("name");
-
- NamedPermissionSet permSet = GetNamedPermissionSetInternal(name);
-
-
- if (permSet != null)
- return new NamedPermissionSet(permSet);
- else
- return null;
- }
-
- public void Recover()
- {
- if (m_configId == ConfigId.None)
- throw new PolicyException(Environment.GetResourceString("Policy_RecoverNotFileBased"));
-
- lock (this) {
-
- if (!Config.RecoverData(m_configId))
- throw new PolicyException(Environment.GetResourceString("Policy_RecoverNoConfigFile"));
-
-
- m_loaded = false;
- m_rootCodeGroup = null;
- m_namedPermissionSets = null;
- m_fullTrustAssemblies = new ArrayList();
- }
- }
-
- public void Reset()
- {
- SetDefault();
- }
-
- public PolicyStatement Resolve(Evidence evidence)
- {
- return Resolve(evidence, 0, null);
- }
-
- public SecurityElement ToXml()
- {
-
-
-
- CheckLoaded();
- LoadAllPermissionSets();
-
- IEnumerator enumerator;
- SecurityElement e = new SecurityElement("PolicyLevel");
- e.AddAttribute("version", "1");
-
- Hashtable classes = new Hashtable();
- lock (this) {
- SecurityElement elPermSets = new SecurityElement("NamedPermissionSets");
- enumerator = m_namedPermissionSets.GetEnumerator();
- while (enumerator.MoveNext()) {
- elPermSets.AddChild(NormalizeClassDeep(((NamedPermissionSet)enumerator.Current).ToXml(), classes));
- }
-
- SecurityElement elCodeGroup = NormalizeClassDeep(m_rootCodeGroup.ToXml(this), classes);
-
- SecurityElement elFullTrust = new SecurityElement("FullTrustAssemblies");
- enumerator = m_fullTrustAssemblies.GetEnumerator();
- while (enumerator.MoveNext()) {
- elFullTrust.AddChild(NormalizeClassDeep(((StrongNameMembershipCondition)enumerator.Current).ToXml(), classes));
- }
-
- SecurityElement elClasses = new SecurityElement("SecurityClasses");
- IDictionaryEnumerator dicEnumerator = classes.GetEnumerator();
- while (dicEnumerator.MoveNext()) {
- SecurityElement elClass = new SecurityElement("SecurityClass");
- elClass.AddAttribute("Name", (string)dicEnumerator.Value);
- elClass.AddAttribute("Description", (string)dicEnumerator.Key);
- elClasses.AddChild(elClass);
- }
-
- e.AddChild(elClasses);
- e.AddChild(elPermSets);
- e.AddChild(elCodeGroup);
- e.AddChild(elFullTrust);
- }
-
- return e;
- }
-
- public void FromXml(SecurityElement e)
- {
- if (e == null)
- throw new ArgumentNullException("e");
-
- Hashtable classes;
- lock (this) {
- ArrayList fullTrustAssemblies = new ArrayList();
-
- SecurityElement eClasses = e.SearchForChildByTag("SecurityClasses");
- if (eClasses != null) {
- classes = new Hashtable();
- IEnumerator enumerator = eClasses.Children.GetEnumerator();
- while (enumerator.MoveNext()) {
- SecurityElement current = (SecurityElement)enumerator.Current;
- if (current.Tag.Equals("SecurityClass")) {
- string name = current.Attribute("Name");
- string description = current.Attribute("Description");
-
- if (name != null && description != null)
- classes.Add(name, description);
- }
- }
- }
- else {
- classes = null;
- }
-
- SecurityElement elFullTrust = e.SearchForChildByTag("FullTrustAssemblies");
- if (elFullTrust != null && elFullTrust.InternalChildren != null) {
- string className = typeof(System.Security.Policy.StrongNameMembershipCondition).AssemblyQualifiedName;
-
- IEnumerator enumerator = elFullTrust.Children.GetEnumerator();
- while (enumerator.MoveNext()) {
- StrongNameMembershipCondition sn = new StrongNameMembershipCondition();
- sn.FromXml((SecurityElement)enumerator.Current);
- fullTrustAssemblies.Add(sn);
- }
- }
-
- m_fullTrustAssemblies = fullTrustAssemblies;
-
- ArrayList namedPermissionSets = new ArrayList();
-
- SecurityElement elPermSets = e.SearchForChildByTag("NamedPermissionSets");
- SecurityElement permSetElement = null;
-
-
-
-
- if (elPermSets != null && elPermSets.InternalChildren != null) {
- permSetElement = UnnormalizeClassDeep(elPermSets, classes);
-
-
-
-
- FindElement(permSetElement, "FullTrust");
- FindElement(permSetElement, "SkipVerification");
- FindElement(permSetElement, "Execution");
- FindElement(permSetElement, "Nothing");
- FindElement(permSetElement, "Internet");
- FindElement(permSetElement, "LocalIntranet");
- }
-
- if (permSetElement == null)
- permSetElement = new SecurityElement("NamedPermissionSets");
-
-
-
-
- namedPermissionSets.Add(CreateFullTrustSet());
- namedPermissionSets.Add(CreateSkipVerificationSet());
- namedPermissionSets.Add(CreateExecutionSet());
- namedPermissionSets.Add(CreateNothingSet());
-
- permSetElement.AddChild(GetInternetElement());
- permSetElement.AddChild(GetLocalIntranetElement());
-
- foreach (PermissionSet ps in namedPermissionSets)
- ps.IgnoreTypeLoadFailures = true;
-
- m_namedPermissionSets = namedPermissionSets;
- m_permSetElement = permSetElement;
-
-
- SecurityElement elCodeGroup = e.SearchForChildByTag("CodeGroup");
- if (elCodeGroup == null)
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidXMLElement"), "CodeGroup", this.GetType().FullName));
-
- CodeGroup rootCodeGroup = System.Security.Util.XMLUtil.CreateCodeGroup(UnnormalizeClassDeep(elCodeGroup, classes));
- if (rootCodeGroup == null)
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidXMLElement"), "CodeGroup", this.GetType().FullName));
-
- rootCodeGroup.FromXml(elCodeGroup, this);
- m_rootCodeGroup = rootCodeGroup;
- }
- }
-
-
-
-
-
- static internal PermissionSet GetBuiltInSet(string name)
- {
-
-
-
- if (name == null)
- return null;
- else if (name.Equals("FullTrust"))
- return CreateFullTrustSet();
- else if (name.Equals("Nothing"))
- return CreateNothingSet();
- else if (name.Equals("Execution"))
- return CreateExecutionSet();
- else if (name.Equals("SkipVerification"))
- return CreateSkipVerificationSet();
- else if (name.Equals("Internet"))
- return CreateInternetSet();
- else if (name.Equals("LocalIntranet"))
- return CreateLocalIntranetSet();
- else
- return null;
- }
-
- internal NamedPermissionSet GetNamedPermissionSetInternal(string name)
- {
- CheckLoaded();
-
- lock (InternalSyncObject) {
-
- IEnumerator enumerator = m_namedPermissionSets.GetEnumerator();
- while (enumerator.MoveNext()) {
- NamedPermissionSet current = (NamedPermissionSet)enumerator.Current;
- if (current.Name.Equals(name))
- return current;
- }
-
-
-
-
- if (m_permSetElement != null) {
- SecurityElement elem = FindElement(name);
- if (elem != null) {
- NamedPermissionSet permSet = new NamedPermissionSet();
- permSet.Name = name;
- m_namedPermissionSets.Add(permSet);
- try {
-
-
- permSet.FromXml(elem, false, true);
- }
- catch {
- m_namedPermissionSets.Remove(permSet);
- return null;
- }
-
- if (permSet.Name != null) {
- return permSet;
- }
- else {
- m_namedPermissionSets.Remove(permSet);
- return null;
- }
- }
- }
-
- return null;
- }
- }
-
- internal PolicyStatement Resolve(Evidence evidence, int count, char[] serializedEvidence)
- {
- if (evidence == null)
- throw new ArgumentNullException("evidence");
- &n