Example #1
0
        /// <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"));
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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);
                }
            }
        }