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 System;
- using System.Security;
- using System.Security.Util;
- using Math = System.Math;
- using System.Collections;
- using System.Security.Permissions;
- using System.Text;
- using System.Runtime.Remoting.Activation;
- using System.Globalization;
- [Flags(), Serializable()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public enum PolicyStatementAttribute
- {
- Nothing = 0,
- Exclusive = 1,
- LevelFinal = 2,
- All = 3
- }
-
- [Serializable()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public sealed class PolicyStatement : ISecurityEncodable, ISecurityPolicyEncodable
- {
-
- internal PermissionSet m_permSet;
-
-
- internal PolicyStatementAttribute m_attributes;
-
- internal PolicyStatement()
- {
- m_permSet = null;
- m_attributes = PolicyStatementAttribute.Nothing;
- }
-
- public PolicyStatement(PermissionSet permSet) : this(permSet, PolicyStatementAttribute.Nothing)
- {
- }
-
- public PolicyStatement(PermissionSet permSet, PolicyStatementAttribute attributes)
- {
- if (permSet == null) {
- m_permSet = new PermissionSet(false);
- }
- else {
- m_permSet = permSet.Copy();
- }
- if (ValidProperties(attributes)) {
- m_attributes = attributes;
- }
- }
-
- private PolicyStatement(PermissionSet permSet, PolicyStatementAttribute attributes, bool copy)
- {
- if (permSet != null) {
- if (copy)
- m_permSet = permSet.Copy();
- else
- m_permSet = permSet;
- }
- else {
- m_permSet = new PermissionSet(false);
- }
-
- m_attributes = attributes;
- }
-
-
- public PermissionSet PermissionSet {
- get {
- lock (this) {
- return m_permSet.Copy();
- }
- }
-
- set {
- lock (this) {
- if (value == null) {
- m_permSet = new PermissionSet(false);
- }
- else {
- m_permSet = value.Copy();
- }
- }
- }
- }
-
- internal void SetPermissionSetNoCopy(PermissionSet permSet)
- {
- m_permSet = permSet;
- }
-
- internal PermissionSet GetPermissionSetNoCopy()
- {
- lock (this) {
- return m_permSet;
- }
- }
-
- public PolicyStatementAttribute Attributes {
- get { return m_attributes; }
-
- set {
- if (ValidProperties(value)) {
- m_attributes = value;
- }
- }
- }
-
- public PolicyStatement Copy()
- {
- return new PolicyStatement(m_permSet, m_attributes, true);
- }
-
- public string AttributeString {
- get {
- StringBuilder sb = new StringBuilder();
-
- bool first = true;
-
- if (GetFlag((int)PolicyStatementAttribute.Exclusive)) {
- sb.Append("Exclusive");
- first = false;
- }
- if (GetFlag((int)PolicyStatementAttribute.LevelFinal)) {
- if (!first)
- sb.Append(" ");
- sb.Append("LevelFinal");
- }
-
- return sb.ToString();
- }
- }
-
- private static bool ValidProperties(PolicyStatementAttribute attributes)
- {
- if ((attributes & ~(PolicyStatementAttribute.All)) == 0) {
- return true;
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"));
- }
- }
-
- private bool GetFlag(int flag)
- {
- return (flag & (int)m_attributes) != 0;
- }
-
- public SecurityElement ToXml()
- {
- return ToXml(null);
- }
-
- public void FromXml(SecurityElement et)
- {
- FromXml(et, null);
- }
-
- public SecurityElement ToXml(PolicyLevel level)
- {
- return ToXml(level, false);
- }
-
- internal SecurityElement ToXml(PolicyLevel level, bool useInternal)
- {
- SecurityElement e = new SecurityElement("PolicyStatement");
- e.AddAttribute("version", "1");
- if (m_attributes != PolicyStatementAttribute.Nothing)
- e.AddAttribute("Attributes", XMLUtil.BitFieldEnumToString(typeof(PolicyStatementAttribute), m_attributes));
-
- lock (this) {
- if (m_permSet != null) {
- if (m_permSet is NamedPermissionSet) {
-
-
-
-
- NamedPermissionSet namedPermSet = (NamedPermissionSet)m_permSet;
- if (level != null && level.GetNamedPermissionSet(namedPermSet.Name) != null) {
- e.AddAttribute("PermissionSetName", namedPermSet.Name);
- }
- else {
- if (useInternal)
- e.AddChild(namedPermSet.InternalToXml());
- else
- e.AddChild(namedPermSet.ToXml());
- }
- }
- else {
- if (useInternal)
- e.AddChild(m_permSet.InternalToXml());
- else
- e.AddChild(m_permSet.ToXml());
- }
- }
- }
-
- return e;
- }
-
- public void FromXml(SecurityElement et, PolicyLevel level)
- {
- FromXml(et, level, false);
- }
-
- internal void FromXml(SecurityElement et, PolicyLevel level, bool allowInternalOnly)
- {
- if (et == null)
- throw new ArgumentNullException("et");
-
- if (!et.Tag.Equals("PolicyStatement"))
- throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_InvalidXMLElement"), "PolicyStatement", this.GetType().FullName));
-
- m_attributes = (PolicyStatementAttribute)0;
-
- string strAttributes = et.Attribute("Attributes");
-
- if (strAttributes != null)
- m_attributes = (PolicyStatementAttribute)Enum.Parse(typeof(PolicyStatementAttribute), strAttributes);
-
- lock (this) {
- m_permSet = null;
-
- if (level != null) {
- string permSetName = et.Attribute("PermissionSetName");
-
- if (permSetName != null) {
- m_permSet = level.GetNamedPermissionSetInternal(permSetName);
-
- if (m_permSet == null)
- m_permSet = new PermissionSet(PermissionState.None);
- }
- }
-
-
- if (m_permSet == null) {
-
-
-
-
- SecurityElement e = et.SearchForChildByTag("PermissionSet");
-
- if (e != null) {
- string className = e.Attribute("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);
-
- try {
- m_permSet.FromXml(e, allowInternalOnly, true);
- }
- catch {
-
-
-
-
- }
- }
- else {
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML"));
- }
- }
-
- if (m_permSet == null)
- 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"), "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) {
-
-
-
-
- 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);
- }
- }
-
-
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override bool Equals(object obj)
- {
- PolicyStatement other = obj as PolicyStatement;
-
- if (other == null)
- return false;
-
- if (this.m_attributes != other.m_attributes)
- return false;
-
- if (!Object.Equals(this.m_permSet, other.m_permSet))
- return false;
-
- return true;
- }
-
- [System.Runtime.InteropServices.ComVisible(false)]
- public override int GetHashCode()
- {
- int accumulator = (int)this.m_attributes;
-
- if (m_permSet != null)
- accumulator = accumulator ^ m_permSet.GetHashCode();
-
- return accumulator;
- }
-
- }
- }