2 // System.Security.Policy.PolicyLevel.cs
5 // Nick Drochak (ndrochak@gol.com)
6 // Duncan Mak (duncan@ximian.com)
8 // (C) 2001 Nick Drochak
9 // (C) 2003 Duncan Mak, Ximian Inc.
12 using System.Collections; // for IList
13 using System.Globalization;
14 using System.Security.Policy;
16 namespace System.Security.Policy
18 [MonoTODO][Serializable]
19 public sealed class PolicyLevel
22 StrongNameMembershipCondition [] full_trust_assemblies;
23 CodeGroup root_code_group;
24 NamedPermissionSet [] named_permission_sets;
26 internal PolicyLevel (string label)
30 // What's a good default size?
31 full_trust_assemblies = new StrongNameMembershipCondition [10];
32 named_permission_sets = new NamedPermissionSet [10];
36 public IList FullTrustAssemblies
39 if (full_trust_assemblies != null)
40 return (IList) full_trust_assemblies;
51 public IList NamedPermissionSets {
54 return (IList) named_permission_sets;
58 public CodeGroup RootCodeGroup {
60 get { return root_code_group; }
62 set { root_code_group = value; }
66 public string StoreLocation {
68 throw new NotImplementedException ();
72 public void AddFullTrustAssembly (StrongName sn)
74 StrongNameMembershipCondition snMC = new StrongNameMembershipCondition(
75 sn.PublicKey, sn.Name, sn.Version);
77 AddFullTrustAssembly (snMC);
80 public void AddFullTrustAssembly (StrongNameMembershipCondition snMC)
83 throw new ArgumentNullException (
84 Locale.GetText ("The argument is null."));
86 if (((IList) full_trust_assemblies).Contains (snMC))
87 throw new ArgumentException (
88 Locale.GetText ("sn already has full trust."));
90 ((IList) full_trust_assemblies).Add (snMC);
93 public void AddNamedPermissionSet (NamedPermissionSet permSet)
96 throw new ArgumentNullException (
97 Locale.GetText ("The argument is null."));
99 foreach (NamedPermissionSet n in named_permission_sets)
100 if (permSet.Name == n.Name)
101 throw new ArgumentException (
102 Locale.GetText ("This NamedPermissionSet is the same an existing NamedPermissionSet."));
104 ((IList) named_permission_sets).Add (permSet);
107 [MonoTODO ("Set NamedPermissionSet to the one from default policy and grant a FullTrust RootCodeGroup")]
108 public static PolicyLevel CreateAppDomainLevel ()
110 PolicyLevel p = new PolicyLevel ("AppDomain");
115 [MonoTODO ("Check for the element's validity")]
116 public void FromXml (SecurityElement e)
119 throw new ArgumentNullException (
120 Locale.GetText ("The Argument is null."));
123 public NamedPermissionSet GetNamedPermissionSet (string name)
126 throw new ArgumentNullException (
127 Locale.GetText ("The Argument is null."));
129 foreach (NamedPermissionSet n in named_permission_sets)
137 public void Recover ()
139 throw new NotImplementedException ();
142 public void RemoveFullTrustAssembly (StrongName sn)
144 StrongNameMembershipCondition s = new StrongNameMembershipCondition (sn.PublicKey, sn.Name, sn.Version);
146 RemoveFullTrustAssembly (s);
149 public void RemoveFullTrustAssembly (StrongNameMembershipCondition snMC)
152 throw new ArgumentNullException (
153 Locale.GetText ("The Argument is null."));
155 if (((IList) full_trust_assemblies).Contains (snMC))
156 ((IList) full_trust_assemblies).Remove (snMC);
159 throw new ArgumentException (
160 Locale.GetText ("sn does not have full trust."));
163 public NamedPermissionSet RemoveNamedPermissionSet (NamedPermissionSet permSet)
166 throw new ArgumentNullException (
167 Locale.GetText ("The Argument is null."));
169 if (! ((IList )named_permission_sets).Contains (permSet))
170 throw new ArgumentException (
171 Locale.GetText ("permSet cannot be found."));
173 ((IList) named_permission_sets).Remove (permSet);
178 [MonoTODO ("Check for reserver names")]
179 public NamedPermissionSet RemoveNamedPermissionSet (string name)
182 throw new ArgumentNullException (
183 Locale.GetText ("The Argument is null."));
186 for (int i = 0; i < named_permission_sets.Length; i++) {
187 NamedPermissionSet current = named_permission_sets [i];
189 if (current.Name == name)
195 throw new ArgumentException (
196 Locale.GetText ("Name cannot be found."));
198 NamedPermissionSet retval = named_permission_sets [idx];
199 ((IList) named_permission_sets).RemoveAt (idx);
204 [MonoTODO ("Find out what the default state is")]
207 throw new NotImplementedException ();
211 public PolicyStatement Resolve (Evidence evidence)
213 if (evidence == null)
214 throw new ArgumentNullException (
215 Locale.GetText ("The Argument is null."));
217 throw new NotImplementedException ();
221 public CodeGroup ResolveMatchingCodeGroups (Evidence evidence)
223 if (evidence == null)
224 throw new ArgumentNullException (
225 Locale.GetText ("The Argument is null."));
227 throw new NotImplementedException ();
230 [MonoTODO ("Populate security_classes")]
231 public SecurityElement ToXml ()
233 SecurityElement element = new SecurityElement (
234 typeof (System.Security.Policy.PolicyLevel).Name);
236 element.AddAttribute ("version", "1");
238 SecurityElement security_classes = new SecurityElement ("SecurityClasses");
239 element.AddChild (security_classes);
241 SecurityElement namedPSs = new SecurityElement ("NamedPermissionSets");
242 element.AddChild (namedPSs);
244 foreach (NamedPermissionSet nps in named_permission_sets)
245 namedPSs.AddChild (nps.ToXml ());
247 element.AddChild (root_code_group.ToXml ());
249 SecurityElement fta = new SecurityElement ("FullTrustAssemblies");
250 element.AddChild (fta);
252 foreach (StrongNameMembershipCondition s in full_trust_assemblies)
253 element.AddChild (s.ToXml (this));