The Labs \ Source Viewer \ SSCLI \ System.Security.Policy \ SiteMembershipCondition

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. // SiteMembershipCondition.cs
  16. //
  17. // Implementation of membership condition for zones
  18. //
  19. namespace System.Security.Policy
  20. {
  21.    
  22.     using System;
  23.     using SecurityManager = System.Security.SecurityManager;
  24.     using SiteString = System.Security.Util.SiteString;
  25.     using PermissionSet = System.Security.PermissionSet;
  26.     using SecurityElement = System.Security.SecurityElement;
  27.     using System.Collections;
  28.     using System.Globalization;
  29.    
  30.     [Serializable()]
  31.     [System.Runtime.InteropServices.ComVisible(true)]
  32.     public sealed class SiteMembershipCondition : IMembershipCondition, IConstantMembershipCondition
  33.     {
  34.        
  35.         //------------------------------------------------------
  36.         //
  37.         // PRIVATE STATE DATA
  38.         //
  39.         //------------------------------------------------------
  40.        
  41.         private SiteString m_site;
  42.         private SecurityElement m_element;
  43.        
  44.         //------------------------------------------------------
  45.         //
  46.         // PUBLIC CONSTRUCTORS
  47.         //
  48.         //------------------------------------------------------
  49.        
  50.         internal SiteMembershipCondition()
  51.         {
  52.             m_site = null;
  53.         }
  54.        
  55.         public SiteMembershipCondition(string site)
  56.         {
  57.             if (site == null)
  58.                 throw new ArgumentNullException("site");
  59.            
  60.             m_site = new SiteString(site);
  61.         }
  62.        
  63.         //------------------------------------------------------
  64.         //
  65.         // PUBLIC ACCESSOR METHODS
  66.         //
  67.         //------------------------------------------------------
  68.        
  69.        
  70.         public string Site {
  71.            
  72.            
  73.             get {
  74.                 if (m_site == null && m_element != null)
  75.                     ParseSite();
  76.                
  77.                 if (m_site != null)
  78.                     return m_site.ToString();
  79.                 else
  80.                     return "";
  81.             }
  82.             set {
  83.                 if (value == null)
  84.                     throw new ArgumentNullException("value");
  85.                 m_site = new SiteString(value);
  86.             }
  87.         }
  88.        
  89.         //------------------------------------------------------
  90.         //
  91.         // IMEMBERSHIPCONDITION IMPLEMENTATION
  92.         //
  93.         //------------------------------------------------------
  94.        
  95.         public bool Check(Evidence evidence)
  96.         {
  97.             if (evidence == null)
  98.                 return false;
  99.            
  100.             IEnumerator enumerator = evidence.GetHostEnumerator();
  101.             while (enumerator.MoveNext()) {
  102.                 object obj = enumerator.Current;
  103.                 if (obj is Site) {
  104.                     if (m_site == null && m_element != null)
  105.                         ParseSite();
  106.                    
  107.                     if (((Site)obj).GetSiteString().IsSubsetOf(this.m_site)) {
  108.                         return true;
  109.                     }
  110.                 }
  111.             }
  112.             return false;
  113.         }
  114.        
  115.         public IMembershipCondition Copy()
  116.         {
  117.             if (m_site == null && m_element != null)
  118.                 ParseSite();
  119.            
  120.             return new SiteMembershipCondition(m_site.ToString());
  121.         }
  122.        
  123.        
  124.         public SecurityElement ToXml()
  125.         {
  126.             return ToXml(null);
  127.         }
  128.        
  129.         public void FromXml(SecurityElement e)
  130.         {
  131.             FromXml(e, null);
  132.         }
  133.        
  134.         public SecurityElement ToXml(PolicyLevel level)
  135.         {
  136.             if (m_site == null && m_element != null)
  137.                 ParseSite();
  138.            
  139.             SecurityElement root = new SecurityElement("IMembershipCondition");
  140.             System.Security.Util.XMLUtil.AddClassAttribute(root, this.GetType(), "System.Security.Policy.SiteMembershipCondition");
  141.             // If you hit this assert then most likely you are trying to change the name of this class.
  142.             // This is ok as long as you change the hard coded string above and change the assert below.
  143.             BCLDebug.Assert(this.GetType().FullName.Equals("System.Security.Policy.SiteMembershipCondition"), "Class name changed!");
  144.            
  145.             root.AddAttribute("version", "1");
  146.            
  147.             if (m_site != null)
  148.                 root.AddAttribute("Site", m_site.ToString());
  149.            
  150.             return root;
  151.         }
  152.        
  153.         public void FromXml(SecurityElement e, PolicyLevel level)
  154.         {
  155.             if (e == null)
  156.                 throw new ArgumentNullException("e");
  157.            
  158.             if (!e.Tag.Equals("IMembershipCondition")) {
  159.                 throw new ArgumentException(Environment.GetResourceString("Argument_MembershipConditionElement"));
  160.             }
  161.            
  162.             lock (this) {
  163.                 m_site = null;
  164.                 m_element = e;
  165.             }
  166.         }
  167.        
  168.         private void ParseSite()
  169.         {
  170.             lock (this) {
  171.                 if (m_element == null)
  172.                     return;
  173.                
  174.                 string elSite = m_element.Attribute("Site");
  175.                 if (elSite == null)
  176.                     throw new ArgumentException(Environment.GetResourceString("Argument_SiteCannotBeNull"));
  177.                 else
  178.                     m_site = new SiteString(elSite);
  179.                 m_element = null;
  180.             }
  181.         }
  182.        
  183.         public override bool Equals(object o)
  184.         {
  185.             SiteMembershipCondition that = (o as SiteMembershipCondition);
  186.            
  187.             if (that != null) {
  188.                 if (this.m_site == null && this.m_element != null)
  189.                     this.ParseSite();
  190.                 if (that.m_site == null && that.m_element != null)
  191.                     that.ParseSite();
  192.                
  193.                 if (Equals(this.m_site, that.m_site)) {
  194.                     return true;
  195.                 }
  196.             }
  197.             return false;
  198.         }
  199.        
  200.         public override int GetHashCode()
  201.         {
  202.             if (m_site == null && m_element != null)
  203.                 ParseSite();
  204.            
  205.             if (m_site != null) {
  206.                 return m_site.GetHashCode();
  207.             }
  208.             else {
  209.                 return typeof(SiteMembershipCondition).GetHashCode();
  210.             }
  211.         }
  212.        
  213.         public override string ToString()
  214.         {
  215.             if (m_site == null && m_element != null)
  216.                 ParseSite();
  217.            
  218.             if (m_site != null)
  219.                 return String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Site_ToStringArg"), m_site);
  220.             else
  221.                 return Environment.GetResourceString("Site_ToString");
  222.         }
  223.     }
  224. }

Developer Fusion