Author: spouliot
Date: 2005-04-26 19:07:41 -0400 (Tue, 26 Apr 2005)
New Revision: 43630

Modified:
   trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs
   trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrustCollection.cs
   trunk/mcs/class/corlib/System.Security.Policy/ChangeLog
Log:
2005-04-26  Sebastien Pouliot  <[EMAIL PROTECTED]>

        * ApplicationTrust.cs: Completed TODO. Added missing set for 
        ApplicationIdentity property.
        * ApplicationTrustCollection.cs: Completed TODO.



Modified: trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs
===================================================================
--- trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs   
2005-04-26 22:25:36 UTC (rev 43629)
+++ trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrust.cs   
2005-04-26 23:07:41 UTC (rev 43630)
@@ -28,8 +28,13 @@
 
 #if NET_2_0
 
+using System.IO;
 using System.Runtime.InteropServices;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Security.Permissions;
 
+using Mono.Security.Cryptography;
+
 namespace System.Security.Policy {
 
        [ComVisible (true)]
@@ -41,23 +46,33 @@
                private bool _trustrun;
                private bool _persist;
 
-               [MonoTODO]
                public ApplicationTrust ()
                {
                }
 
-               [MonoTODO]
                public ApplicationTrust (ApplicationIdentity 
applicationIdentity)
-                       : this ()
                {
+                       if (applicationIdentity == null)
+                               throw new ArgumentNullException 
("applicationIdentity");
+                       _appid = applicationIdentity;
                }
 
                public ApplicationIdentity ApplicationIdentity {
                        get { return _appid; }
+                       set {
+                               if (value == null)
+                                       throw new ArgumentNullException 
("ApplicationIdentity");
+                               _appid = value;
+                       }
                }
 
                public PolicyStatement DefaultGrantSet {
-                       get { return _defaultPolicy; }
+                       get {
+                               if (_defaultPolicy == null)
+                                       _defaultPolicy = GetDefaultGrantSet ();
+
+                               return _defaultPolicy;
+                       }
                        set { _defaultPolicy = value; }
                }
 
@@ -76,19 +91,95 @@
                        set { _persist = value; }
                }
 
-               [MonoTODO ("incomplete")]
                public void FromXml (SecurityElement element) 
                {
                        if (element == null)
                                throw new ArgumentNullException ("element");
-                       throw new NotImplementedException ();
+
+                       if (element.Tag != "ApplicationTrust")
+                               throw new ArgumentException ("element");
+
+                       string s = element.Attribute ("FullName");
+                       if (s != null)
+                               _appid = new ApplicationIdentity (s);
+                       else
+                               _appid = null;
+
+                       _defaultPolicy = null;
+                       SecurityElement defaultGrant = 
element.SearchForChildByTag ("DefaultGrant");
+                       if (defaultGrant != null) {
+                               for (int i=0; i < defaultGrant.Children.Count; 
i++) {
+                                       SecurityElement se = 
(defaultGrant.Children [i] as SecurityElement);
+                                       if (se.Tag == "PolicyStatement") {
+                                               DefaultGrantSet.FromXml (se, 
null);
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (!Boolean.TryParse (element.Attribute 
("TrustedToRun"), out _trustrun))
+                               _trustrun = false;
+
+                       if (!Boolean.TryParse (element.Attribute ("Persist"), 
out _persist))
+                               _persist = false;
+
+                       _xtranfo = null;
+                       SecurityElement xtra = element.SearchForChildByTag 
("ExtraInfo");
+                       if (xtra != null) {
+                               s = xtra.Attribute ("Data");
+                               if (s != null) {
+                                       byte[] data = CryptoConvert.FromHex (s);
+                                       using (MemoryStream ms = new 
MemoryStream (data)) {
+                                               BinaryFormatter bf = new 
BinaryFormatter ();
+                                               _xtranfo = bf.Deserialize (ms);
+                                       }
+                               }
+                       }
                }
 
-               [MonoTODO ("incomplete")]
                public SecurityElement ToXml () 
                {
-                       throw new NotImplementedException ();
+                       SecurityElement se = new SecurityElement 
("ApplicationTrust");
+                       se.AddAttribute ("version", "1");
+
+                       if (_appid != null) {
+                               se.AddAttribute ("FullName", _appid.FullName);
+                       }
+
+                       if (_trustrun) {
+                               se.AddAttribute ("TrustedToRun", "true");
+                       }
+
+                       if (_persist) {
+                               se.AddAttribute ("Persist", "true");
+                       }
+
+                       SecurityElement defaultGrant = new SecurityElement 
("DefaultGrant");
+                       defaultGrant.AddChild (DefaultGrantSet.ToXml ());
+                       se.AddChild (defaultGrant);
+
+                       if (_xtranfo != null) {
+                               byte[] data = null;
+                               using (MemoryStream ms = new MemoryStream ()) {
+                                       BinaryFormatter bf = new 
BinaryFormatter ();
+                                       bf.Serialize (ms, _xtranfo);
+                                       data = ms.ToArray ();
+                               }
+                               SecurityElement xtra = new SecurityElement 
("ExtraInfo");
+                               xtra.AddAttribute ("Data", CryptoConvert.ToHex 
(data));
+                               se.AddChild (xtra);
+                       }
+
+                       return se;
                }
+
+               // internal stuff
+
+               private PolicyStatement GetDefaultGrantSet ()
+               {
+                       PermissionSet ps = new PermissionSet 
(PermissionState.None);
+                       return new PolicyStatement (ps);
+               }
        }
 }
 

Modified: 
trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrustCollection.cs
===================================================================
--- trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrustCollection.cs 
2005-04-26 22:25:36 UTC (rev 43629)
+++ trunk/mcs/class/corlib/System.Security.Policy/ApplicationTrustCollection.cs 
2005-04-26 23:07:41 UTC (rev 43630)
@@ -67,9 +67,15 @@
                        get { return (ApplicationTrust) _list [index]; }
                }
 
-               [MonoTODO]
                public ApplicationTrust this [string appFullName] {
-                       get { return (ApplicationTrust) _list [0]; }
+                       get {
+                               for (int i=0; i < _list.Count; i++) {
+                                       ApplicationTrust at = (_list [i] as 
ApplicationTrust);
+                                       if (at.ApplicationIdentity.FullName == 
appFullName)
+                                               return at;
+                               }
+                               return null;
+                       }
                }
 
                // methods
@@ -129,22 +135,32 @@
                        _list.CopyTo (array, index);
                }
 
-               [MonoTODO ("missing MatchExactVersion")]
                public ApplicationTrustCollection Find (ApplicationIdentity 
applicationIdentity, ApplicationVersionMatch versionMatch)
                {
+                       if (applicationIdentity == null)
+                               throw new ArgumentNullException 
("applicationIdentity");
+
+                       string fullname = applicationIdentity.FullName;
+
+                       switch (versionMatch) {
+                       case ApplicationVersionMatch.MatchAllVersions:
+                               int pos = fullname.IndexOf (", Version=");
+                               if (pos >= 0)
+                                       fullname = fullname.Substring (0, pos);
+                               break;
+                       case ApplicationVersionMatch.MatchExactVersion:
+                               break;
+                       default:
+                               throw new ArgumentException ("versionMatch");
+                       }
+
                        ApplicationTrustCollection coll = new 
ApplicationTrustCollection ();
                        foreach (ApplicationTrust t in _list) {
-                               if (t.ApplicationIdentity.Equals 
(applicationIdentity)) {
-                                       switch (versionMatch) {
-                                       case 
ApplicationVersionMatch.MatchAllVersions:
-                                               coll.Add (t);
-                                               break;
-                                       case 
ApplicationVersionMatch.MatchExactVersion:
-                                               // TODO: version is encoded in 
a fullname ?
-                                               break;
-                                       }
+                               if (t.ApplicationIdentity.FullName.StartsWith 
(fullname)) {
+                                       coll.Add (t);
                                }
                        }
+
                        return coll;
                }
 
@@ -170,7 +186,6 @@
                        RemoveAllInstances (trust);
                }
 
-               [MonoTODO ("missing MatchExactVersion (relies on Find)")]
                public void Remove (ApplicationIdentity applicationIdentity, 
ApplicationVersionMatch versionMatch)
                {
                        ApplicationTrustCollection coll = Find 
(applicationIdentity, versionMatch);

Modified: trunk/mcs/class/corlib/System.Security.Policy/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/System.Security.Policy/ChangeLog     2005-04-26 
22:25:36 UTC (rev 43629)
+++ trunk/mcs/class/corlib/System.Security.Policy/ChangeLog     2005-04-26 
23:07:41 UTC (rev 43630)
@@ -1,3 +1,9 @@
+2005-04-26  Sebastien Pouliot  <[EMAIL PROTECTED]>
+
+       * ApplicationTrust.cs: Completed TODO. Added missing set for 
+       ApplicationIdentity property.
+       * ApplicationTrustCollection.cs: Completed TODO.
+
 2005-04-25  Sebastien Pouliot  <[EMAIL PROTECTED]>
 
        * AllMembershipCondition.cs: Added [ComVisible (true)] in NET_2_0 to

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to