2 // SiteMembershipCondition.cs: Site MembershipCondition
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2004 Motus Technologies Inc. (http://www.motus.com)
11 using System.Collections;
12 using System.Globalization;
13 using System.Security;
15 namespace System.Security.Policy {
18 public sealed class SiteMembershipCondition : IMembershipCondition, IConstantMembershipCondition {
24 public SiteMembershipCondition (string site)
35 throw new ArgumentNullException ("site");
36 if (!System.Security.Policy.Site.IsValid (value))
37 throw new ArgumentException ("invalid site");
44 public bool Check (Evidence evidence)
49 IEnumerator e = evidence.GetHostEnumerator ();
50 while (e.MoveNext ()) {
51 if (e.Current is Site) {
52 string[] s1 = _site.Split ('.');
53 string[] s2 = (e.Current as Site).origin_site.Split ('.');
54 for (int i = s1.Length - 1, j = s2.Length - 1; i>=0; i--, j--) {
57 return (String.Compare (s1 [0], "*", true, CultureInfo.InvariantCulture) == 0);
59 if (String.Compare (s1 [i], s2 [j], true, CultureInfo.InvariantCulture) != 0)
68 public IMembershipCondition Copy ()
70 return new SiteMembershipCondition (_site);
73 public override bool Equals (object o)
77 if (o is SiteMembershipCondition) {
78 Site s = new Site ((o as SiteMembershipCondition)._site);
79 return s.Equals (new Site (_site));
84 public void FromXml (SecurityElement e)
89 public void FromXml (SecurityElement e, PolicyLevel level)
92 throw new ArgumentNullException ("e");
93 if (e.Tag != "IMembershipCondition")
94 throw new ArgumentException (Locale.GetText ("Invalid XML - not a IMembershipCondition tag."));
95 if (e.Attribute ("class") != GetType ().AssemblyQualifiedName)
96 throw new ArgumentException (Locale.GetText ("Invalid class."));
97 if (e.Attribute ("version") != "1")
98 throw new ArgumentException (Locale.GetText ("Invalid version."));
100 _site = e.Attribute ("Site");
103 public override int GetHashCode ()
105 return _site.GetHashCode ();
108 public override string ToString ()
110 return "Site - " + _site;
113 public SecurityElement ToXml ()
118 public SecurityElement ToXml (PolicyLevel level)
120 SecurityElement element = new SecurityElement ("IMembershipCondition");
121 element.AddAttribute ("class", this.GetType ().AssemblyQualifiedName);
122 element.AddAttribute ("version", "1");
123 element.AddAttribute ("Site", _site);