/// <summary>Reconstructs a security object with a given state from an XML encoding.</summary> /// <param name="e">The XML encoding to use to reconstruct the security object. </param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="e" /> parameter is null. </exception> /// <exception cref="T:System.ArgumentException">The <see cref="T:System.Security.SecurityElement" /> specified by the <paramref name="e" /> parameter is invalid. </exception> /// <PermissionSet> /// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode" /> /// </PermissionSet> public void FromXml(SecurityElement e) { if (e == null) { throw new ArgumentNullException("e"); } SecurityElement securityElement = e.SearchForChildByTag("SecurityClasses"); if (securityElement != null && securityElement.Children != null && securityElement.Children.Count > 0) { this.fullNames = new Hashtable(securityElement.Children.Count); foreach (object obj in securityElement.Children) { SecurityElement securityElement2 = (SecurityElement)obj; this.fullNames.Add(securityElement2.Attributes["Name"], securityElement2.Attributes["Description"]); } } SecurityElement securityElement3 = e.SearchForChildByTag("FullTrustAssemblies"); if (securityElement3 != null && securityElement3.Children != null && securityElement3.Children.Count > 0) { this.full_trust_assemblies.Clear(); foreach (object obj2 in securityElement3.Children) { SecurityElement securityElement4 = (SecurityElement)obj2; if (securityElement4.Tag != "IMembershipCondition") { throw new ArgumentException(Locale.GetText("Invalid XML")); } string text = securityElement4.Attribute("class"); if (text.IndexOf("StrongNameMembershipCondition") < 0) { throw new ArgumentException(Locale.GetText("Invalid XML - must be StrongNameMembershipCondition")); } this.full_trust_assemblies.Add(new StrongNameMembershipCondition(securityElement4)); } } SecurityElement securityElement5 = e.SearchForChildByTag("CodeGroup"); if (securityElement5 != null && securityElement5.Children != null && securityElement5.Children.Count > 0) { this.root_code_group = CodeGroup.CreateFromXml(securityElement5, this); SecurityElement securityElement6 = e.SearchForChildByTag("NamedPermissionSets"); if (securityElement6 != null && securityElement6.Children != null && securityElement6.Children.Count > 0) { this.named_permission_sets.Clear(); foreach (object obj3 in securityElement6.Children) { SecurityElement et = (SecurityElement)obj3; NamedPermissionSet namedPermissionSet = new NamedPermissionSet(); namedPermissionSet.Resolver = this; namedPermissionSet.FromXml(et); this.named_permission_sets.Add(namedPermissionSet); } } return; } throw new ArgumentException(Locale.GetText("Missing Root CodeGroup")); }
/// <summary>Reconstructs a security object with a given state and policy level from an XML encoding.</summary> /// <param name="e">The XML encoding to use to reconstruct the security object. </param> /// <param name="level">The policy level within which the code group exists. </param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="e" /> parameter is null. </exception> public void FromXml(SecurityElement e, PolicyLevel level) { if (e == null) { throw new ArgumentNullException("e"); } string text = e.Attribute("PermissionSetName"); PermissionSet permissionSet; if (text != null && level != null) { permissionSet = level.GetNamedPermissionSet(text); } else { SecurityElement securityElement = e.SearchForChildByTag("PermissionSet"); if (securityElement != null) { Type type = Type.GetType(securityElement.Attribute("class")); permissionSet = (PermissionSet)Activator.CreateInstance(type, true); permissionSet.FromXml(securityElement); } else { permissionSet = new PermissionSet(new PermissionSet(PermissionState.None)); } } this.m_policy = new PolicyStatement(permissionSet); this.m_children.Clear(); if (e.Children != null && e.Children.Count > 0) { foreach (object obj in e.Children) { SecurityElement securityElement2 = (SecurityElement)obj; if (securityElement2.Tag == "CodeGroup") { this.AddChild(CodeGroup.CreateFromXml(securityElement2, level)); } } } this.m_membershipCondition = null; SecurityElement securityElement3 = e.SearchForChildByTag("IMembershipCondition"); if (securityElement3 != null) { string text2 = securityElement3.Attribute("class"); Type type2 = Type.GetType(text2); if (type2 == null) { type2 = Type.GetType("System.Security.Policy." + text2); } this.m_membershipCondition = (IMembershipCondition)Activator.CreateInstance(type2, true); this.m_membershipCondition.FromXml(securityElement3, level); } this.m_name = e.Attribute("Name"); this.m_description = e.Attribute("Description"); this.ParseXml(e, level); }
public void FromXml(SecurityElement e, PolicyLevel level) { if (null == e) { throw new ArgumentNullException("e"); } PermissionSet ps = null; string psetname = e.Attribute("PermissionSetName"); if ((psetname != null) && (level != null)) { ps = level.GetNamedPermissionSet(psetname); } else { SecurityElement pset = e.SearchForChildByTag("PermissionSet"); if (pset != null) { Type classType = Type.GetType(pset.Attribute("class")); ps = (PermissionSet)Activator.CreateInstance(classType, true); ps.FromXml(pset); } else { ps = new PermissionSet(new PermissionSet(PermissionState.None)); } } m_policy = new PolicyStatement(ps); m_children.Clear(); if ((e.Children != null) && (e.Children.Count > 0)) { foreach (SecurityElement se in e.Children) { if (se.Tag == "CodeGroup") { this.AddChild(CodeGroup.CreateFromXml(se, level)); } } } m_membershipCondition = null; SecurityElement mc = e.SearchForChildByTag("IMembershipCondition"); if (mc != null) { string className = mc.Attribute("class"); Type classType = Type.GetType(className); if (classType == null) { classType = Type.GetType("System.Security.Policy." + className); } m_membershipCondition = (IMembershipCondition)Activator.CreateInstance(classType, true); m_membershipCondition.FromXml(mc, level); } m_name = e.Attribute("Name"); m_description = e.Attribute("Description"); // seems like we might need this to Resolve() in subclasses m_level = level; ParseXml(e, level); }
public void FromXml(SecurityElement e) { if (e == null) { throw new ArgumentNullException("e"); } // MS doesn't throw an exception for this case // if (e.Tag != "PolicyLevel") // throw new ArgumentException (Locale.GetText ("Invalid XML")); SecurityElement sc = e.SearchForChildByTag("SecurityClasses"); if ((sc != null) && (sc.Children != null) && (sc.Children.Count > 0)) { fullNames = new Hashtable(sc.Children.Count); foreach (SecurityElement se in sc.Children) { fullNames.Add(se.Attributes ["Name"], se.Attributes ["Description"]); } } SecurityElement fta = e.SearchForChildByTag("FullTrustAssemblies"); if ((fta != null) && (fta.Children != null) && (fta.Children.Count > 0)) { full_trust_assemblies.Clear(); foreach (SecurityElement se in fta.Children) { if (se.Tag != "IMembershipCondition") { throw new ArgumentException(Locale.GetText("Invalid XML")); } string className = se.Attribute("class"); if (className.IndexOf("StrongNameMembershipCondition") < 0) { throw new ArgumentException(Locale.GetText("Invalid XML - must be StrongNameMembershipCondition")); } // we directly use StrongNameMembershipCondition full_trust_assemblies.Add(new StrongNameMembershipCondition(se)); } } SecurityElement cg = e.SearchForChildByTag("CodeGroup"); if ((cg != null) && (cg.Children != null) && (cg.Children.Count > 0)) { root_code_group = CodeGroup.CreateFromXml(cg, this); } else { throw new ArgumentException(Locale.GetText("Missing Root CodeGroup")); } SecurityElement nps = e.SearchForChildByTag("NamedPermissionSets"); if ((nps != null) && (nps.Children != null) && (nps.Children.Count > 0)) { named_permission_sets.Clear(); foreach (SecurityElement se in nps.Children) { NamedPermissionSet n = new NamedPermissionSet(); n.Resolver = this; n.FromXml(se); named_permission_sets.Add(n); } } }