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