mscorlib(4.0.0.0) API with additions
EnvironmentPermission.cs
2 using System.Security.Util;
3 
5 {
8  [ComVisible(true)]
9  public sealed class EnvironmentPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
10  {
11  private StringExpressionSet m_read;
12 
13  private StringExpressionSet m_write;
14 
15  private bool m_unrestricted;
16 
21  {
22  switch (state)
23  {
24  case PermissionState.Unrestricted:
25  m_unrestricted = true;
26  break;
27  case PermissionState.None:
28  m_unrestricted = false;
29  break;
30  default:
31  throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
32  }
33  }
34 
40  public EnvironmentPermission(EnvironmentPermissionAccess flag, string pathList)
41  {
42  SetPathList(flag, pathList);
43  }
44 
50  public void SetPathList(EnvironmentPermissionAccess flag, string pathList)
51  {
52  VerifyFlag(flag);
53  m_unrestricted = false;
54  if ((flag & EnvironmentPermissionAccess.Read) != 0)
55  {
56  m_read = null;
57  }
58  if ((flag & EnvironmentPermissionAccess.Write) != 0)
59  {
60  m_write = null;
61  }
62  AddPathList(flag, pathList);
63  }
64 
70  [SecuritySafeCritical]
71  public void AddPathList(EnvironmentPermissionAccess flag, string pathList)
72  {
73  VerifyFlag(flag);
74  if (FlagIsSet(flag, EnvironmentPermissionAccess.Read))
75  {
76  if (m_read == null)
77  {
78  m_read = new EnvironmentStringExpressionSet();
79  }
80  m_read.AddExpressions(pathList);
81  }
82  if (FlagIsSet(flag, EnvironmentPermissionAccess.Write))
83  {
84  if (m_write == null)
85  {
86  m_write = new EnvironmentStringExpressionSet();
87  }
88  m_write.AddExpressions(pathList);
89  }
90  }
91 
99  {
100  VerifyFlag(flag);
101  ExclusiveFlag(flag);
102  if (FlagIsSet(flag, EnvironmentPermissionAccess.Read))
103  {
104  if (m_read == null)
105  {
106  return "";
107  }
108  return m_read.ToString();
109  }
110  if (FlagIsSet(flag, EnvironmentPermissionAccess.Write))
111  {
112  if (m_write == null)
113  {
114  return "";
115  }
116  return m_write.ToString();
117  }
118  return "";
119  }
120 
121  private void VerifyFlag(EnvironmentPermissionAccess flag)
122  {
123  if ((flag & ~(EnvironmentPermissionAccess.Read | EnvironmentPermissionAccess.Write)) != 0)
124  {
125  throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flag));
126  }
127  }
128 
129  private void ExclusiveFlag(EnvironmentPermissionAccess flag)
130  {
131  if (flag == EnvironmentPermissionAccess.NoAccess)
132  {
133  throw new ArgumentException(Environment.GetResourceString("Arg_EnumNotSingleFlag"));
134  }
135  if ((flag & (flag - 1)) != 0)
136  {
137  throw new ArgumentException(Environment.GetResourceString("Arg_EnumNotSingleFlag"));
138  }
139  }
140 
141  private bool FlagIsSet(EnvironmentPermissionAccess flag, EnvironmentPermissionAccess question)
142  {
143  return (flag & question) != EnvironmentPermissionAccess.NoAccess;
144  }
145 
146  private bool IsEmpty()
147  {
148  if (!m_unrestricted && (m_read == null || m_read.IsEmpty()))
149  {
150  if (m_write != null)
151  {
152  return m_write.IsEmpty();
153  }
154  return true;
155  }
156  return false;
157  }
158 
162  public bool IsUnrestricted()
163  {
164  return m_unrestricted;
165  }
166 
172  [SecuritySafeCritical]
173  public override bool IsSubsetOf(IPermission target)
174  {
175  if (target == null)
176  {
177  return IsEmpty();
178  }
179  try
180  {
181  EnvironmentPermission environmentPermission = (EnvironmentPermission)target;
182  if (environmentPermission.IsUnrestricted())
183  {
184  return true;
185  }
186  if (IsUnrestricted())
187  {
188  return false;
189  }
190  return (m_read == null || m_read.IsSubsetOf(environmentPermission.m_read)) && (m_write == null || m_write.IsSubsetOf(environmentPermission.m_write));
191  }
192  catch (InvalidCastException)
193  {
194  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
195  }
196  }
197 
202  [SecuritySafeCritical]
203  public override IPermission Intersect(IPermission target)
204  {
205  if (target == null)
206  {
207  return null;
208  }
209  if (!VerifyType(target))
210  {
211  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
212  }
213  if (IsUnrestricted())
214  {
215  return target.Copy();
216  }
217  EnvironmentPermission environmentPermission = (EnvironmentPermission)target;
218  if (environmentPermission.IsUnrestricted())
219  {
220  return Copy();
221  }
222  StringExpressionSet stringExpressionSet = (m_read == null) ? null : m_read.Intersect(environmentPermission.m_read);
223  StringExpressionSet stringExpressionSet2 = (m_write == null) ? null : m_write.Intersect(environmentPermission.m_write);
224  if ((stringExpressionSet == null || stringExpressionSet.IsEmpty()) && (stringExpressionSet2 == null || stringExpressionSet2.IsEmpty()))
225  {
226  return null;
227  }
228  EnvironmentPermission environmentPermission2 = new EnvironmentPermission(PermissionState.None);
229  environmentPermission2.m_unrestricted = false;
230  environmentPermission2.m_read = stringExpressionSet;
231  environmentPermission2.m_write = stringExpressionSet2;
232  return environmentPermission2;
233  }
234 
239  [SecuritySafeCritical]
240  public override IPermission Union(IPermission other)
241  {
242  if (other == null)
243  {
244  return Copy();
245  }
246  if (!VerifyType(other))
247  {
248  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
249  }
250  EnvironmentPermission environmentPermission = (EnvironmentPermission)other;
251  if (IsUnrestricted() || environmentPermission.IsUnrestricted())
252  {
253  return new EnvironmentPermission(PermissionState.Unrestricted);
254  }
255  StringExpressionSet stringExpressionSet = (m_read == null) ? environmentPermission.m_read : m_read.Union(environmentPermission.m_read);
256  StringExpressionSet stringExpressionSet2 = (m_write == null) ? environmentPermission.m_write : m_write.Union(environmentPermission.m_write);
257  if ((stringExpressionSet == null || stringExpressionSet.IsEmpty()) && (stringExpressionSet2 == null || stringExpressionSet2.IsEmpty()))
258  {
259  return null;
260  }
261  EnvironmentPermission environmentPermission2 = new EnvironmentPermission(PermissionState.None);
262  environmentPermission2.m_unrestricted = false;
263  environmentPermission2.m_read = stringExpressionSet;
264  environmentPermission2.m_write = stringExpressionSet2;
265  return environmentPermission2;
266  }
267 
270  public override IPermission Copy()
271  {
272  EnvironmentPermission environmentPermission = new EnvironmentPermission(PermissionState.None);
273  if (m_unrestricted)
274  {
275  environmentPermission.m_unrestricted = true;
276  }
277  else
278  {
279  environmentPermission.m_unrestricted = false;
280  if (m_read != null)
281  {
282  environmentPermission.m_read = m_read.Copy();
283  }
284  if (m_write != null)
285  {
286  environmentPermission.m_write = m_write.Copy();
287  }
288  }
289  return environmentPermission;
290  }
291 
294  public override SecurityElement ToXml()
295  {
296  SecurityElement securityElement = CodeAccessPermission.CreatePermissionElement(this, "System.Security.Permissions.EnvironmentPermission");
297  if (!IsUnrestricted())
298  {
299  if (m_read != null && !m_read.IsEmpty())
300  {
301  securityElement.AddAttribute("Read", SecurityElement.Escape(m_read.ToString()));
302  }
303  if (m_write != null && !m_write.IsEmpty())
304  {
305  securityElement.AddAttribute("Write", SecurityElement.Escape(m_write.ToString()));
306  }
307  }
308  else
309  {
310  securityElement.AddAttribute("Unrestricted", "true");
311  }
312  return securityElement;
313  }
314 
319  public override void FromXml(SecurityElement esd)
320  {
321  CodeAccessPermission.ValidateElement(esd, this);
322  if (XMLUtil.IsUnrestricted(esd))
323  {
324  m_unrestricted = true;
325  return;
326  }
327  m_unrestricted = false;
328  m_read = null;
329  m_write = null;
330  string text = esd.Attribute("Read");
331  if (text != null)
332  {
333  m_read = new EnvironmentStringExpressionSet(text);
334  }
335  text = esd.Attribute("Write");
336  if (text != null)
337  {
338  m_write = new EnvironmentStringExpressionSet(text);
339  }
340  }
341 
342  int IBuiltInPermission.GetTokenIndex()
343  {
344  return GetTokenIndex();
345  }
346 
347  internal static int GetTokenIndex()
348  {
349  return 0;
350  }
351  }
352 }
Allows a permission to expose an unrestricted state.
string GetPathList(EnvironmentPermissionAccess flag)
Gets all environment variables with the specified T:System.Security.Permissions.EnvironmentPermission...
Definition: __Canon.cs:3
The exception that is thrown for invalid casting or explicit conversion.
IPermission Copy()
Creates and returns an identical copy of the current permission.
bool IsUnrestricted()
Returns a value indicating whether the current permission is unrestricted.
EnvironmentPermissionAccess
Specifies access to environment variables.
static string Escape(string str)
Replaces invalid XML characters in a string with their valid XML equivalent.
override IPermission Intersect(IPermission target)
Creates and returns a permission that is the intersection of the current permission and the specified...
Provides information about, and means to manipulate, the current environment and platform....
Definition: Environment.cs:21
void AddPathList(EnvironmentPermissionAccess flag, string pathList)
Adds access for the specified environment variables to the existing state of the permission.
Represents the XML object model for encoding security objects. This class cannot be inherited.
Defines the underlying structure of all code access permissions.
override void FromXml(SecurityElement esd)
Reconstructs a permission with a specified state from an XML encoding.
Defines methods implemented by permission types.
Definition: IPermission.cs:7
The exception that is thrown when one of the arguments provided to a method is not valid.
override SecurityElement ToXml()
Creates an XML encoding of the permission and its current state.
void SetPathList(EnvironmentPermissionAccess flag, string pathList)
Sets the specified access to the specified environment variables to the existing state of the permiss...
PermissionState
Specifies whether a permission should have all or no access to resources at creation.
void AddAttribute(string name, string value)
Adds a name/value attribute to an XML element.
Specifies that the class can be serialized.
Controls access to system and user environment variables. This class cannot be inherited.
EnvironmentPermission(EnvironmentPermissionAccess flag, string pathList)
Initializes a new instance of the T:System.Security.Permissions.EnvironmentPermission class with the ...
override IPermission Copy()
Creates and returns an identical copy of the current permission.
EnvironmentPermission(PermissionState state)
Initializes a new instance of the T:System.Security.Permissions.EnvironmentPermission class with eith...
override bool IsSubsetOf(IPermission target)
Determines whether the current permission is a subset of the specified permission.
override IPermission Union(IPermission other)
Creates a permission that is the union of the current permission and the specified permission.