Author: spouliot
Date: 2005-06-14 10:14:36 -0400 (Tue, 14 Jun 2005)
New Revision: 45968

Modified:
   trunk/mcs/class/corlib/System.Security.Policy/ChangeLog
   trunk/mcs/class/corlib/System.Security.Policy/Evidence.cs
   trunk/mcs/class/corlib/System.Security.Policy/PolicyLevel.cs
Log:
2005-06-14  Sebastien Pouliot  <[EMAIL PROTECTED]>

        * Evidence.cs: Avoid creating the synchronized array lists unless they
        are needed.
        * PolicyLevel.cs: Fixed System.Drawing public key. IsFullTrustAssembly
        can now executed without a Demand for the AssemblyName. Added the
        UnionCodeGroup in the default policies. Reworked initialization to
        support FullyTrustedAssemblies.



Modified: trunk/mcs/class/corlib/System.Security.Policy/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/System.Security.Policy/ChangeLog     2005-06-14 
14:14:23 UTC (rev 45967)
+++ trunk/mcs/class/corlib/System.Security.Policy/ChangeLog     2005-06-14 
14:14:36 UTC (rev 45968)
@@ -1,3 +1,12 @@
+2005-06-14  Sebastien Pouliot  <[EMAIL PROTECTED]>
+
+       * Evidence.cs: Avoid creating the synchronized array lists unless they
+       are needed.
+       * PolicyLevel.cs: Fixed System.Drawing public key. IsFullTrustAssembly
+       can now executed without a Demand for the AssemblyName. Added the
+       UnionCodeGroup in the default policies. Reworked initialization to
+       support FullyTrustedAssemblies.
+
 2005-06-08  Sebastien Pouliot  <[EMAIL PROTECTED]>
 
        * PolicyLevel.cs: Added some missing initialization. More code reuse.

Modified: trunk/mcs/class/corlib/System.Security.Policy/Evidence.cs
===================================================================
--- trunk/mcs/class/corlib/System.Security.Policy/Evidence.cs   2005-06-14 
14:14:23 UTC (rev 45967)
+++ trunk/mcs/class/corlib/System.Security.Policy/Evidence.cs   2005-06-14 
14:14:36 UTC (rev 45968)
@@ -9,7 +9,7 @@
 //
 // (C) 2001 Ximian, Inc.
 // Portions (C) 2003, 2004 Motus Technologies Inc. (http://www.motus.com)
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -57,22 +57,20 @@
 
                public Evidence () 
                {
-                       hostEvidenceList = ArrayList.Synchronized (new 
ArrayList ());
-                       assemblyEvidenceList = ArrayList.Synchronized (new 
ArrayList ());
                }
 
-               public Evidence (Evidence evidence) : this ()
+               public Evidence (Evidence evidence)
                {
                        if (evidence != null)
                                Merge (evidence);       
                }
 
-               public Evidence (object[] hostEvidence, object[] 
assemblyEvidence) : this ()
+               public Evidence (object[] hostEvidence, object[] 
assemblyEvidence)
                {
                        if (null != hostEvidence)
-                               hostEvidenceList.AddRange (hostEvidence);
+                               HostEvidenceList.AddRange (hostEvidence);
                        if (null != assemblyEvidence)
-                               assemblyEvidenceList.AddRange 
(assemblyEvidence);
+                               AssemblyEvidenceList.AddRange 
(assemblyEvidence);
                }
                
                //
@@ -81,7 +79,12 @@
        
                public int Count {
                        get {
-                               return (hostEvidenceList.Count + 
assemblyEvidenceList.Count);
+                               int count = 0;
+                               if (hostEvidenceList != null)
+                                       count += hostEvidenceList.Count;
+                               if (assemblyEvidenceList!= null)
+                                       count += assemblyEvidenceList.Count;
+                               return count;
                        }
                }
 
@@ -100,8 +103,8 @@
 
                public bool Locked {
                        get { return _locked; }
+                       [SecurityPermission (SecurityAction.Demand, 
ControlEvidence = true)]
                        set { 
-                               new SecurityPermission 
(SecurityPermissionFlag.ControlEvidence).Demand ();
                                _locked = value; 
                        }
                }       
@@ -110,22 +113,38 @@
                        get { return this; }
                }
 
+               internal ArrayList HostEvidenceList {
+                       get {
+                               if (hostEvidenceList == null)
+                                       hostEvidenceList = 
ArrayList.Synchronized (new ArrayList ());
+                               return hostEvidenceList;
+                       }
+               }
+
+               internal ArrayList AssemblyEvidenceList {
+                       get {
+                               if (assemblyEvidenceList == null)
+                                       assemblyEvidenceList = 
ArrayList.Synchronized (new ArrayList ());
+                               return assemblyEvidenceList;
+                       }
+               }
+
                //
                // Public Methods
                //
 
                public void AddAssembly (object id) 
                {
-                       assemblyEvidenceList.Add (id);
+                       AssemblyEvidenceList.Add (id);
                        _hashCode = 0;
                }
 
                public void AddHost (object id) 
                {
-                       if (_locked) {
+                       if (_locked && SecurityManager.SecurityEnabled) {
                                new SecurityPermission 
(SecurityPermissionFlag.ControlEvidence).Demand ();
                        }
-                       hostEvidenceList.Add (id);
+                       HostEvidenceList.Add (id);
                        _hashCode = 0;
                }
 
@@ -133,18 +152,24 @@
                [ComVisible (false)]
                public void Clear ()
                {
-                       hostEvidenceList.Clear ();
-                       assemblyEvidenceList.Clear ();
+                       if (hostEvidenceList != null)
+                               hostEvidenceList.Clear ();
+                       if (assemblyEvidenceList != null)
+                               assemblyEvidenceList.Clear ();
                        _hashCode = 0;
                }
 #endif
 
                public void CopyTo (Array array, int index) 
                {
-                       if (hostEvidenceList.Count > 0) 
-                               hostEvidenceList.CopyTo (array, index);
-                       if (assemblyEvidenceList.Count > 0) 
-                               assemblyEvidenceList.CopyTo (array, index + 
hostEvidenceList.Count);
+                       int hc = 0;
+                       if (hostEvidenceList != null) {
+                               hc = hostEvidenceList.Count;
+                               if (hc > 0)
+                                       hostEvidenceList.CopyTo (array, index);
+                       }
+                       if ((assemblyEvidenceList != null) && 
(assemblyEvidenceList.Count > 0))
+                               assemblyEvidenceList.CopyTo (array, index + hc);
                }
 
 #if NET_2_0
@@ -157,9 +182,9 @@
                        if (e == null)
                                return false;
 
-                       if (hostEvidenceList.Count != e.hostEvidenceList.Count)
+                       if (HostEvidenceList.Count != e.HostEvidenceList.Count)
                                return false;
-                       if (assemblyEvidenceList.Count != 
e.assemblyEvidenceList.Count)
+                       if (AssemblyEvidenceList.Count != 
e.AssemblyEvidenceList.Count)
                                return false;
 
                        for (int i = 0; i < hostEvidenceList.Count; i++) {
@@ -191,13 +216,18 @@
 
                public IEnumerator GetEnumerator () 
                {
-                       return new EvidenceEnumerator 
(hostEvidenceList.GetEnumerator (), 
-                               assemblyEvidenceList.GetEnumerator ());
+                       IEnumerator he = null;
+                       if (hostEvidenceList != null)
+                               he = hostEvidenceList.GetEnumerator ();
+                       IEnumerator ae = null;
+                       if (assemblyEvidenceList != null)
+                               assemblyEvidenceList.GetEnumerator ();
+                       return new EvidenceEnumerator (he, ae);
                }
 
                public IEnumerator GetAssemblyEnumerator () 
                {
-                       return assemblyEvidenceList.GetEnumerator ();
+                       return AssemblyEvidenceList.GetEnumerator ();
                }
 
 #if NET_2_0
@@ -206,10 +236,14 @@
                {
                        // kind of long so we cache it
                        if (_hashCode == 0) {
-                               for (int i = 0; i < hostEvidenceList.Count; i++)
-                                       _hashCode ^= hostEvidenceList 
[i].GetHashCode ();
-                               for (int i = 0; i < assemblyEvidenceList.Count; 
i++)
-                                       _hashCode ^= assemblyEvidenceList 
[i].GetHashCode ();
+                               if (hostEvidenceList != null) {
+                                       for (int i = 0; i < 
hostEvidenceList.Count; i++)
+                                               _hashCode ^= hostEvidenceList 
[i].GetHashCode ();
+                               }
+                               if (assemblyEvidenceList != null) {
+                                       for (int i = 0; i < 
assemblyEvidenceList.Count; i++)
+                                               _hashCode ^= 
assemblyEvidenceList [i].GetHashCode ();
+                               }
                        }
                        return _hashCode;
                }
@@ -217,20 +251,19 @@
 
                public IEnumerator GetHostEnumerator () 
                {
-                       return hostEvidenceList.GetEnumerator ();
+                       return HostEvidenceList.GetEnumerator ();
                }
 
                public void Merge (Evidence evidence) 
                {
                        if ((evidence != null) && (evidence.Count > 0)) {
-                               IEnumerator hostenum = 
evidence.GetHostEnumerator ();
-                               while (hostenum.MoveNext ()) {
-                                       AddHost (hostenum.Current);
+                               if (evidence.hostEvidenceList != null) {
+                                       foreach (object o in 
evidence.hostEvidenceList)
+                                               AddHost (o);
                                }
-
-                               IEnumerator assemblyenum = 
evidence.GetAssemblyEnumerator ();
-                               while (assemblyenum.MoveNext ()) {
-                                       AddAssembly (assemblyenum.Current);
+                               if (evidence.assemblyEvidenceList != null) {
+                                       foreach (object o in 
evidence.assemblyEvidenceList)
+                                               AddAssembly (o);
                                }
                                _hashCode = 0;
                        }
@@ -325,14 +358,17 @@
                        {
                                this.hostEnum = hostenum;
                                this.assemblyEnum = assemblyenum;
-                               currentEnum = hostEnum;                 
+                               currentEnum = hostEnum;         
                        }
 
                        public bool MoveNext () 
                        {
+                               if (currentEnum == null)
+                                       return false;
+
                                bool ret = currentEnum.MoveNext ();
                                
-                               if ( !ret && hostEnum == currentEnum ) {
+                               if (!ret && (hostEnum == currentEnum) && 
(assemblyEnum != null)) {
                                        currentEnum = assemblyEnum;
                                        ret = assemblyEnum.MoveNext ();
                                }
@@ -342,9 +378,14 @@
 
                        public void Reset () 
                        {
-                               hostEnum.Reset ();
-                               assemblyEnum.Reset ();
-                               currentEnum = hostEnum;
+                               if (hostEnum != null) {
+                                       hostEnum.Reset ();
+                                       currentEnum = hostEnum;
+                               } else {
+                                       currentEnum = assemblyEnum;
+                               }
+                               if (assemblyEnum != null)
+                                       assemblyEnum.Reset ();
                        }
 
                        public object Current {

Modified: trunk/mcs/class/corlib/System.Security.Policy/PolicyLevel.cs
===================================================================
--- trunk/mcs/class/corlib/System.Security.Policy/PolicyLevel.cs        
2005-06-14 14:14:23 UTC (rev 45967)
+++ trunk/mcs/class/corlib/System.Security.Policy/PolicyLevel.cs        
2005-06-14 14:14:36 UTC (rev 45968)
@@ -55,7 +55,6 @@
                private string _location;
                private PolicyLevelType _type;
                private Hashtable fullNames;
-               private bool loaded;
                private SecurityElement xml;
 
                internal PolicyLevel (string label, PolicyLevelType type)
@@ -69,7 +68,6 @@
                internal void LoadFromFile (string filename)
                {
                        try {
-                               loaded = false;
                                // check for policy file
                                if (!File.Exists (filename)) {
                                        // if it doesn't exist use the default 
configuration (like Fx 2.0)
@@ -84,11 +82,13 @@
                                if (File.Exists (filename)) {
                                        using (StreamReader sr = File.OpenText 
(filename)) {
                                                xml = FromString (sr.ReadToEnd 
());
-                                               FromXml1 (xml);
+                                               FromXml (xml);
                                        }
-                                       loaded = true;
                                } else {
+                                       CreateDefaultFullTrustAssemblies ();
+                                       CreateDefaultNamedPermissionSets ();
                                        CreateDefaultLevel (_type);
+                                       Save ();
                                }
                        }
                        catch {
@@ -97,30 +97,13 @@
                                // * can't copy default file to policy
                                // * can't read policy file;
                                // * can't decode policy file
-                               if (!loaded)
-                                       CreateDefaultLevel (_type);
+                               // * can't save hardcoded policy to filename
                        }
                        finally {
                                _location = filename;
                        }
                }
 
-               internal void Initialize ()
-               {
-                       if (loaded) {
-                               FromXml2 (xml);
-                       } else {
-                               CreateDefaultNamedPermissionSets ();
-                               try {
-                                       Save ();
-                               }
-                               catch {
-                                       // this can fail in many ways 
including...
-                                       // * can't save hardcoded policy to 
filename
-                               }
-                       }
-               }
-
                internal void LoadFromString (string xml) 
                {
                        FromXml (FromString (xml));
@@ -259,12 +242,6 @@
 //                     if (e.Tag != "PolicyLevel")
 //                             throw new ArgumentException (Locale.GetText 
("Invalid XML"));
 
-                       FromXml1 (e);
-                       FromXml2 (e);
-               }
-
-               internal void FromXml1 (SecurityElement e)
-               {
                        SecurityElement sc = e.SearchForChildByTag 
("SecurityClasses");
                        if ((sc != null) && (sc.Children != null) && 
(sc.Children.Count > 0)) {
                                fullNames = new Hashtable (sc.Children.Count);
@@ -290,13 +267,10 @@
                        SecurityElement cg = e.SearchForChildByTag 
("CodeGroup");
                        if ((cg != null) && (cg.Children != null) && 
(cg.Children.Count > 0)) {
                                root_code_group = CodeGroup.CreateFromXml (cg, 
this);
-                       }
-                       else
+                       } else {
                                throw new ArgumentException (Locale.GetText 
("Missing Root CodeGroup"));
-               }
+                       }
 
-               internal void FromXml2 (SecurityElement e)
-               {
                        SecurityElement nps = e.SearchForChildByTag 
("NamedPermissionSets");
                        if ((nps != null) && (nps.Children != null) && 
(nps.Children.Count > 0)) {
                                named_permission_sets.Clear ();
@@ -514,13 +488,40 @@
                // (b) no corresponding default policy file exists
                internal void CreateDefaultLevel (PolicyLevelType type) 
                {
-                       PolicyStatement psu = new PolicyStatement (new 
PermissionSet (PermissionState.Unrestricted));
+                       PolicyStatement psu = new PolicyStatement 
(DefaultPolicies.FullTrust);
 
                        switch (type) {
                        case PolicyLevelType.Machine:
                                // by default all stuff is in the machine 
policy...
-                               root_code_group = new UnionCodeGroup (new 
ZoneMembershipCondition (SecurityZone.MyComputer), psu);
+                               PolicyStatement psn = new PolicyStatement 
(DefaultPolicies.Nothing);
+                               root_code_group = new UnionCodeGroup (new 
AllMembershipCondition (), psn);
                                root_code_group.Name = "All_Code";
+
+                               UnionCodeGroup myComputerZone = new 
UnionCodeGroup (new ZoneMembershipCondition (SecurityZone.MyComputer), psu);
+                               myComputerZone.Name = "My_Computer_Zone";
+                               // TODO: strongname code group for ECMA and MS 
keys
+                               root_code_group.AddChild (myComputerZone);
+
+                               UnionCodeGroup localIntranetZone = new 
UnionCodeGroup (new ZoneMembershipCondition (SecurityZone.Intranet), 
+                                       new PolicyStatement 
(DefaultPolicies.LocalIntranet));
+                               localIntranetZone.Name = "LocalIntranet_Zone";
+                               // TODO: same site / same directory
+                               root_code_group.AddChild (localIntranetZone);
+
+                               PolicyStatement psi = new PolicyStatement 
(DefaultPolicies.Internet);
+                               UnionCodeGroup internetZone = new 
UnionCodeGroup (new ZoneMembershipCondition (SecurityZone.Internet), psi);
+                               internetZone.Name = "Internet_Zone";
+                               // TODO: same site
+                               root_code_group.AddChild (internetZone);
+
+                               UnionCodeGroup restrictedZone = new 
UnionCodeGroup (new ZoneMembershipCondition (SecurityZone.Untrusted), psn);
+                               restrictedZone.Name = "Restricted_Zone";
+                               root_code_group.AddChild (restrictedZone);
+
+                               UnionCodeGroup trustedZone = new UnionCodeGroup 
(new ZoneMembershipCondition (SecurityZone.Trusted), psi);
+                               trustedZone.Name = "Trusted_Zone";
+                               // TODO: same site
+                               root_code_group.AddChild (trustedZone);
                                break;
                        case PolicyLevelType.User:
                        case PolicyLevelType.Enterprise:
@@ -530,8 +531,6 @@
                                root_code_group.Name = "All_Code";
                                break;
                        }
-
-                       CreateDefaultFullTrustAssemblies ();
                }
 
                internal void CreateDefaultFullTrustAssemblies () 
@@ -542,7 +541,7 @@
                        full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System", DefaultPolicies.Key.Ecma));
                        full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System.Data", DefaultPolicies.Key.Ecma));
                        full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System.DirectoryServices", 
DefaultPolicies.Key.MsFinal));
-                       full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System.Drawing", 
DefaultPolicies.Key.Ecma));
+                       full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System.Drawing", 
DefaultPolicies.Key.MsFinal));
                        full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System.Messaging", 
DefaultPolicies.Key.MsFinal));
                        full_trust_assemblies.Add 
(DefaultPolicies.FullTrustMembership ("System.ServiceProcess", 
DefaultPolicies.Key.MsFinal));
                }
@@ -571,7 +570,7 @@
 
                internal bool IsFullTrustAssembly (Assembly a)
                {
-                       AssemblyName an = a.GetName ();
+                       AssemblyName an = a.UnprotectedGetName ();
                        StrongNamePublicKeyBlob snpkb = new 
StrongNamePublicKeyBlob (an.GetPublicKey ());
                        StrongNameMembershipCondition snMC = new 
StrongNameMembershipCondition (snpkb, an.Name, an.Version);
                        foreach (StrongNameMembershipCondition sn in 
full_trust_assemblies) {

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

Reply via email to