Ejemplo n.º 1
0
        internal void FromXml(SecurityDocument doc, int position, PolicyLevel level, bool allowInternalOnly)
        {
            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }
            if (!doc.GetTagForElement(position).Equals("PolicyStatement"))
            {
                throw new ArgumentException(string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidXMLElement"), (object)"PolicyStatement", (object)this.GetType().FullName));
            }
            this.m_attributes = PolicyStatementAttribute.Nothing;
            string attributeForElement = doc.GetAttributeForElement(position, "Attributes");

            if (attributeForElement != null)
            {
                this.m_attributes = (PolicyStatementAttribute)Enum.Parse(typeof(PolicyStatementAttribute), attributeForElement);
            }
            lock (this)
            {
                this.m_permSet = (PermissionSet)null;
                if (level != null)
                {
                    string local_3 = doc.GetAttributeForElement(position, "PermissionSetName");
                    if (local_3 != null)
                    {
                        this.m_permSet = (PermissionSet)level.GetNamedPermissionSetInternal(local_3);
                        if (this.m_permSet == null)
                        {
                            this.m_permSet = new PermissionSet(PermissionState.None);
                        }
                    }
                }
                if (this.m_permSet == null)
                {
                    ArrayList local_4 = doc.GetChildrenPositionForElement(position);
                    int       local_5 = -1;
                    for (int local_6 = 0; local_6 < local_4.Count; ++local_6)
                    {
                        if (doc.GetTagForElement((int)local_4[local_6]).Equals("PermissionSet"))
                        {
                            local_5 = (int)local_4[local_6];
                        }
                    }
                    if (local_5 == -1)
                    {
                        throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML"));
                    }
                    string local_7 = doc.GetAttributeForElement(local_5, "class");
                    this.m_permSet = local_7 == null || !local_7.Equals("NamedPermissionSet") && !local_7.Equals("System.Security.NamedPermissionSet") ? new PermissionSet(PermissionState.None) : (PermissionSet) new NamedPermissionSet("DefaultName", PermissionState.None);
                    this.m_permSet.FromXml(doc, local_5, allowInternalOnly);
                }
                if (this.m_permSet != null)
                {
                    return;
                }
                this.m_permSet = new PermissionSet(PermissionState.None);
            }
        }
        internal void FromXml(SecurityDocument doc, int position, PolicyLevel level, bool allowInternalOnly)
        {
            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }
            if (!doc.GetTagForElement(position).Equals("PolicyStatement"))
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidXMLElement"), new object[] { "PolicyStatement", base.GetType().FullName }));
            }
            this.m_attributes = PolicyStatementAttribute.Nothing;
            string attributeForElement = doc.GetAttributeForElement(position, "Attributes");

            if (attributeForElement != null)
            {
                this.m_attributes = (PolicyStatementAttribute)Enum.Parse(typeof(PolicyStatementAttribute), attributeForElement);
            }
            lock (this)
            {
                this.m_permSet = null;
                if (level != null)
                {
                    string name = doc.GetAttributeForElement(position, "PermissionSetName");
                    if (name != null)
                    {
                        this.m_permSet = level.GetNamedPermissionSetInternal(name);
                        if (this.m_permSet == null)
                        {
                            this.m_permSet = new System.Security.PermissionSet(PermissionState.None);
                        }
                    }
                }
                if (this.m_permSet == null)
                {
                    ArrayList childrenPositionForElement = doc.GetChildrenPositionForElement(position);
                    int       num = -1;
                    for (int i = 0; i < childrenPositionForElement.Count; i++)
                    {
                        if (doc.GetTagForElement((int)childrenPositionForElement[i]).Equals("PermissionSet"))
                        {
                            num = (int)childrenPositionForElement[i];
                        }
                    }
                    if (num == -1)
                    {
                        throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML"));
                    }
                    string str3 = doc.GetAttributeForElement(num, "class");
                    if ((str3 != null) && (str3.Equals("NamedPermissionSet") || str3.Equals("System.Security.NamedPermissionSet")))
                    {
                        this.m_permSet = new NamedPermissionSet("DefaultName", PermissionState.None);
                    }
                    else
                    {
                        this.m_permSet = new System.Security.PermissionSet(PermissionState.None);
                    }
                    this.m_permSet.FromXml(doc, num, allowInternalOnly);
                }
                if (this.m_permSet == null)
                {
                    this.m_permSet = new System.Security.PermissionSet(PermissionState.None);
                }
            }
        }
        internal void FromXml(SecurityDocument doc, int position, PolicyLevel level, bool allowInternalOnly)
        {
            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }

            if (!doc.GetTagForElement(position).Equals("PolicyStatement"))
            {
                throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidXMLElement"), "PolicyStatement", this.GetType().FullName));
            }

            m_attributes = (PolicyStatementAttribute)0;

            String strAttributes = doc.GetAttributeForElement(position, "Attributes");

            if (strAttributes != null)
            {
                m_attributes = (PolicyStatementAttribute)Enum.Parse(typeof(PolicyStatementAttribute), strAttributes);
            }

            lock (this)
            {
                m_permSet = null;

                if (level != null)
                {
                    String permSetName = doc.GetAttributeForElement(position, "PermissionSetName");

                    if (permSetName != null)
                    {
                        m_permSet = level.GetNamedPermissionSetInternal(permSetName);

                        if (m_permSet == null)
                        {
                            m_permSet = new PermissionSet(PermissionState.None);
                        }
                    }
                }


                if (m_permSet == null)
                {
                    // There is no provided level, it is not a named permission set, or
                    // the named permission set doesn't exist in the provided level,
                    // so just create the class through reflection and decode normally.

                    ArrayList childPositions        = doc.GetChildrenPositionForElement(position);
                    int       positionPermissionSet = -1;

                    for (int i = 0; i < childPositions.Count; ++i)
                    {
                        if (doc.GetTagForElement((int)childPositions[i]).Equals("PermissionSet"))
                        {
                            positionPermissionSet = (int)childPositions[i];
                        }
                    }

                    if (positionPermissionSet != -1)
                    {
                        String className = doc.GetAttributeForElement(positionPermissionSet, "class");

                        if (className != null && (className.Equals("NamedPermissionSet") ||
                                                  className.Equals("System.Security.NamedPermissionSet")))
                        {
                            m_permSet = new NamedPermissionSet("DefaultName", PermissionState.None);
                        }
                        else
                        {
                            m_permSet = new PermissionSet(PermissionState.None);
                        }

                        m_permSet.FromXml(doc, positionPermissionSet, allowInternalOnly);
                    }
                    else
                    {
                        throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML"));
                    }
                }

                if (m_permSet == null)
                {
                    m_permSet = new PermissionSet(PermissionState.None);
                }
            }
        }