Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Pouliot <sebastien@ximian.com>2004-08-20 21:50:39 +0400
committerSebastien Pouliot <sebastien@ximian.com>2004-08-20 21:50:39 +0400
commit84dad1fad964e9ad94acec8f90b0424664b11a09 (patch)
tree605408be0fd645c831c000c761bf4417f16f03f2 /mcs/class/corlib/System.Security.Permissions
parent704cadc3d28eeef487644191e1193247352d516a (diff)
2004-08-20 Sebastien Pouliot <sebastien@ximian.com>
* UrlIdentityPermission.cs: Basic (without wildcards) implementation for Intersect, IsSubsetOf and Union. Fixed to pass all new unit tests. svn path=/trunk/mcs/; revision=32587
Diffstat (limited to 'mcs/class/corlib/System.Security.Permissions')
-rw-r--r--mcs/class/corlib/System.Security.Permissions/ChangeLog2
-rw-r--r--mcs/class/corlib/System.Security.Permissions/UrlIdentityPermission.cs67
2 files changed, 52 insertions, 17 deletions
diff --git a/mcs/class/corlib/System.Security.Permissions/ChangeLog b/mcs/class/corlib/System.Security.Permissions/ChangeLog
index 3658793ed13..64b32181d48 100644
--- a/mcs/class/corlib/System.Security.Permissions/ChangeLog
+++ b/mcs/class/corlib/System.Security.Permissions/ChangeLog
@@ -2,6 +2,8 @@
* SiteIdentityPermission.cs: Basic (without wildcards) implementation
for Intersect, IsSubsetOf and Union. Fixed to pass all new unit tests.
+ * UrlIdentityPermission.cs: Basic (without wildcards) implementation
+ for Intersect, IsSubsetOf and Union. Fixed to pass all new unit tests.
2004-08-19 Sebastien Pouliot <sebastien@ximian.com>
diff --git a/mcs/class/corlib/System.Security.Permissions/UrlIdentityPermission.cs b/mcs/class/corlib/System.Security.Permissions/UrlIdentityPermission.cs
index 259b139d04c..494fa5f4885 100644
--- a/mcs/class/corlib/System.Security.Permissions/UrlIdentityPermission.cs
+++ b/mcs/class/corlib/System.Security.Permissions/UrlIdentityPermission.cs
@@ -38,13 +38,16 @@ namespace System.Security.Permissions {
private string url;
- public UrlIdentityPermission (PermissionState state) : base ()
+ public UrlIdentityPermission (PermissionState state)
{
// false == do not allow Unrestricted for Identity Permissions
CheckPermissionState (state, false);
+#if NET_2_0
+ url = String.Empty;
+#endif
}
- public UrlIdentityPermission (string site) : base ()
+ public UrlIdentityPermission (string site)
{
if (site == null)
throw new ArgumentNullException ("site");
@@ -53,16 +56,25 @@ namespace System.Security.Permissions {
public string Url {
get {
+#if !NET_2_0
if (url == null)
throw new NullReferenceException ("Url");
+#endif
return url;
}
- set { url = value; }
+ set {
+ if (value == null)
+ throw new ArgumentNullException ("Url");
+ url = value;
+ }
}
public override IPermission Copy ()
{
- return new UrlIdentityPermission (url);
+ if (url == null)
+ return new UrlIdentityPermission (PermissionState.None);
+ else
+ return new UrlIdentityPermission (url);
}
public override void FromXml (SecurityElement esd)
@@ -72,42 +84,58 @@ namespace System.Security.Permissions {
// Note: we do not (yet) care about the return value
// as we only accept version 1 (min/max values)
- url = esd.Attribute ("Url");
+ string u = esd.Attribute ("Url");
+ if (u == null)
+ url = String.Empty;
+ else
+ Url = u;
}
- [MonoTODO]
+ [MonoTODO ("do not support wildcard")]
public override IPermission Intersect (IPermission target)
{
// if one permission is null (object or url) then there's no intersection
// if both are null then intersection is null
UrlIdentityPermission uip = Cast (target);
- if ((uip == null) || (url == null))
- return null;
-
- if (uip.Url == null)
+ if ((uip == null) || (IsEmpty ()))
return null;
-
- // TODO
+ if (url == uip.url)
+ return Copy ();
return null;
}
- [MonoTODO]
+ [MonoTODO ("do not support wildcard")]
public override bool IsSubsetOf (IPermission target)
{
- return false;
+ UrlIdentityPermission uip = Cast (target);
+ if (uip == null)
+ return IsEmpty ();
+ return (url == uip.url);
}
public override SecurityElement ToXml ()
{
SecurityElement se = Element (version);
- se.AddAttribute ("Url", url);
+ if (!IsEmpty ())
+ se.AddAttribute ("Url", url);
return se;
}
- [MonoTODO]
+ [MonoTODO ("do not support wildcard")]
public override IPermission Union (IPermission target)
{
- return null;
+ UrlIdentityPermission uip = Cast (target);
+ if (uip == null)
+ return Copy ();
+ if (IsEmpty () && uip.IsEmpty ())
+ return null;
+ if (uip.IsEmpty () || (url == uip.url))
+ return Copy ();
+ if (IsEmpty ())
+ return uip.Copy ();
+
+ throw new ArgumentException (Locale.GetText (
+ "Cannot union two different urls."), "target");
}
// IBuiltInPermission
@@ -118,6 +146,11 @@ namespace System.Security.Permissions {
// helpers
+ private bool IsEmpty ()
+ {
+ return ((url == null) || (url.Length == 0));
+ }
+
private UrlIdentityPermission Cast (IPermission target)
{
if (target == null)