diff options
author | Sebastien Pouliot <sebastien@ximian.com> | 2004-08-20 21:50:39 +0400 |
---|---|---|
committer | Sebastien Pouliot <sebastien@ximian.com> | 2004-08-20 21:50:39 +0400 |
commit | 84dad1fad964e9ad94acec8f90b0424664b11a09 (patch) | |
tree | 605408be0fd645c831c000c761bf4417f16f03f2 /mcs/class/corlib/System.Security.Permissions | |
parent | 704cadc3d28eeef487644191e1193247352d516a (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/ChangeLog | 2 | ||||
-rw-r--r-- | mcs/class/corlib/System.Security.Permissions/UrlIdentityPermission.cs | 67 |
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) |