Beispiel #1
0
        public override CodeGroup ResolveMatchingCodeGroups(Evidence evidence)
        {
            if (null == evidence)
            {
                throw new ArgumentNullException("evidence");
            }

            if (!MembershipCondition.Check(evidence))
            {
                return(null);
            }

            FileCodeGroup matchRoot = new FileCodeGroup(MembershipCondition, m_access);

            foreach (CodeGroup child in Children)
            {
                CodeGroup childMatchingCodeGroup = child.ResolveMatchingCodeGroups(evidence);
                if (childMatchingCodeGroup != null)
                {
                    matchRoot.AddChild(childMatchingCodeGroup);
                }
            }

            return(matchRoot);
        }
Beispiel #2
0
        // Resolve code groups that match specific evidence.
        public override CodeGroup ResolveMatchingCodeGroups(Evidence evidence)
        {
            FileCodeGroup newGroup;
            CodeGroup     child;

            // Validate the parameter.
            if (evidence == null)
            {
                throw new ArgumentNullException("evidence");
            }

            // Check the membership condition.
            if (!MembershipCondition.Check(evidence))
            {
                return(null);
            }

            // Clone this group, except for the children.
            newGroup             = new FileCodeGroup(MembershipCondition, access);
            newGroup.Name        = Name;
            newGroup.Description = Description;

            // Resolve and add the children.
            foreach (CodeGroup group in Children)
            {
                child = group.ResolveMatchingCodeGroups(evidence);
                if (child != null)
                {
                    newGroup.AddChild(child);
                }
            }

            // Return the result.
            return(newGroup);
        }
Beispiel #3
0
 public static void FileCodeGroupCallMethods()
 {
     FileCodeGroup fcg = new FileCodeGroup(new GacMembershipCondition(), new FileIOPermissionAccess());
     CodeGroup cg = fcg.Copy();
     bool equals = fcg.Equals(new object());
     int hash = fcg.GetHashCode();
     PolicyStatement ps = fcg.Resolve(new Evidence());
     cg = fcg.ResolveMatchingCodeGroups(new Evidence());
 }
		public void Constructor_PathDiscovery () 
		{
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.PathDiscovery);
			Assert.IsNotNull (cg.MembershipCondition, "MembershipCondition");
			Assert.IsNull (cg.PolicyStatement, "PolicyStatement");
			// documented as always null
			Assert.IsNull (cg.AttributeString, "AttributeString");
			Assert.IsNotNull (cg.PermissionSetName, "PermissionSetName");
		}
Beispiel #5
0
		public override CodeGroup Copy ()
		{
			FileCodeGroup copy = new FileCodeGroup (MembershipCondition, m_access);
			copy.Name = this.Name;
			copy.Description = this.Description;
			foreach (CodeGroup child in Children) {
				copy.AddChild (child.Copy ());	// deep copy
			}
			return copy;
		}
Beispiel #6
0
        /// <summary>生成当前代码组的深层副本。</summary>
        /// <returns>当前代码组(包括其成员条件和子代码组)的等效副本。</returns>
        public override CodeGroup Copy()
        {
            FileCodeGroup fileCodeGroup = new FileCodeGroup(this.MembershipCondition, this.m_access);

            fileCodeGroup.Name        = this.Name;
            fileCodeGroup.Description = this.Description;
            foreach (CodeGroup child in (IEnumerable)this.Children)
            {
                fileCodeGroup.AddChild(child);
            }
            return((CodeGroup)fileCodeGroup);
        }
Beispiel #7
0
        /// <summary>Makes a deep copy of the current code group.</summary>
        /// <returns>An equivalent copy of the current code group, including its membership conditions and child code groups.</returns>
        // Token: 0x0600293D RID: 10557 RVA: 0x00098400 File Offset: 0x00096600
        public override CodeGroup Copy()
        {
            FileCodeGroup fileCodeGroup = new FileCodeGroup(base.MembershipCondition, this.m_access);

            fileCodeGroup.Name        = base.Name;
            fileCodeGroup.Description = base.Description;
            foreach (object obj in base.Children)
            {
                fileCodeGroup.AddChild((CodeGroup)obj);
            }
            return(fileCodeGroup);
        }
Beispiel #8
0
        public override CodeGroup Copy()
        {
            FileCodeGroup copy = new FileCodeGroup(MembershipCondition, m_access);

            copy.Name        = this.Name;
            copy.Description = this.Description;
            foreach (CodeGroup child in Children)
            {
                copy.AddChild(child.Copy());                    // deep copy
            }
            return(copy);
        }
 public override CodeGroup Copy()
 {
     FileCodeGroup group = new FileCodeGroup(base.MembershipCondition, this.m_access) {
         Name = base.Name,
         Description = base.Description
     };
     IEnumerator enumerator = base.Children.GetEnumerator();
     while (enumerator.MoveNext())
     {
         group.AddChild((CodeGroup) enumerator.Current);
     }
     return group;
 }
Beispiel #10
0
        public override bool Equals(Object o)
        {
            FileCodeGroup that = (o as FileCodeGroup);

            if (that != null && base.Equals(that))
            {
                if (this.m_access == that.m_access)
                {
                    return(true);
                }
            }
            return(false);
        }
Beispiel #11
0
        public override CodeGroup Copy()
        {
            FileCodeGroup group = new FileCodeGroup(this.MembershipCondition, this.m_access);

            group.Name        = this.Name;
            group.Description = this.Description;

            IEnumerator enumerator = this.Children.GetEnumerator();

            while (enumerator.MoveNext())
            {
                group.AddChild((CodeGroup)enumerator.Current);
            }
            return(group);
        }
	// Make a copy of this code group.
	public override CodeGroup Copy()
			{
				FileCodeGroup group;
				group = new FileCodeGroup(MembershipCondition, access);
				group.Name = Name;
				group.Description = Description;
				IList children = Children;
				if(children != null)
				{
					foreach(CodeGroup child in children)
					{
						group.AddChild(child);
					}
				}
				return group;
			}
Beispiel #13
0
        // Compare two code groups for equality.
        public override bool Equals(Object obj)
        {
            FileCodeGroup cg = (obj as FileCodeGroup);

            if (cg != null)
            {
                if (!base.Equals(cg))
                {
                    return(false);
                }
                return(cg.access == access);
            }
            else
            {
                return(false);
            }
        }
Beispiel #14
0
        // Make a copy of this code group.
        public override CodeGroup Copy()
        {
            FileCodeGroup group;

            group             = new FileCodeGroup(MembershipCondition, access);
            group.Name        = Name;
            group.Description = Description;
            IList children = Children;

            if (children != null)
            {
                foreach (CodeGroup child in children)
                {
                    group.AddChild(child);
                }
            }
            return(group);
        }
        /// <summary>Resolves matching code groups.</summary>
        /// <returns>A <see cref="T:System.Security.Policy.CodeGroup" /> that is the root of the tree of matching code groups.</returns>
        /// <param name="evidence">The evidence for the assembly. </param>
        /// <exception cref="T:System.ArgumentNullException">The <paramref name="evidence" /> parameter is null. </exception>
        public override CodeGroup ResolveMatchingCodeGroups(Evidence evidence)
        {
            if (evidence == null)
            {
                throw new ArgumentNullException("evidence");
            }
            if (!base.MembershipCondition.Check(evidence))
            {
                return(null);
            }
            FileCodeGroup fileCodeGroup = new FileCodeGroup(base.MembershipCondition, this.m_access);

            foreach (object obj in base.Children)
            {
                CodeGroup codeGroup  = (CodeGroup)obj;
                CodeGroup codeGroup2 = codeGroup.ResolveMatchingCodeGroups(evidence);
                if (codeGroup2 != null)
                {
                    fileCodeGroup.AddChild(codeGroup2);
                }
            }
            return(fileCodeGroup);
        }
Beispiel #16
0
		public override CodeGroup ResolveMatchingCodeGroups(Evidence evidence)
		{
			if (null == evidence)
				throw new ArgumentNullException("evidence");

			if (!MembershipCondition.Check (evidence))
				return null;

			FileCodeGroup matchRoot = new FileCodeGroup (MembershipCondition, m_access);

			foreach (CodeGroup child in Children) {
				CodeGroup childMatchingCodeGroup = child.ResolveMatchingCodeGroups (evidence);
				if (childMatchingCodeGroup != null)
					matchRoot.AddChild (childMatchingCodeGroup);
			}

			return matchRoot;
		}
 private CodeGroup CreateDefaultMachinePolicy()
 {
     UnionCodeGroup group = new UnionCodeGroup();
     group.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Nothing", new AllMembershipCondition().ToXml()), this);
     group.Name = Environment.GetResourceString("Policy_AllCode_Name");
     group.Description = Environment.GetResourceString("Policy_AllCode_DescriptionNothing");
     UnionCodeGroup group2 = new UnionCodeGroup();
     group2.FromXml(CreateCodeGroupElement("UnionCodeGroup", "FullTrust", new ZoneMembershipCondition(SecurityZone.MyComputer).ToXml()), this);
     group2.Name = Environment.GetResourceString("Policy_MyComputer_Name");
     group2.Description = Environment.GetResourceString("Policy_MyComputer_Description");
     StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob("002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293");
     UnionCodeGroup group3 = new UnionCodeGroup();
     group3.FromXml(CreateCodeGroupElement("UnionCodeGroup", "FullTrust", new StrongNameMembershipCondition(blob, null, null).ToXml()), this);
     group3.Name = Environment.GetResourceString("Policy_Microsoft_Name");
     group3.Description = Environment.GetResourceString("Policy_Microsoft_Description");
     group2.AddChildInternal(group3);
     blob = new StrongNamePublicKeyBlob("00000000000000000400000000000000");
     UnionCodeGroup group4 = new UnionCodeGroup();
     group4.FromXml(CreateCodeGroupElement("UnionCodeGroup", "FullTrust", new StrongNameMembershipCondition(blob, null, null).ToXml()), this);
     group4.Name = Environment.GetResourceString("Policy_Ecma_Name");
     group4.Description = Environment.GetResourceString("Policy_Ecma_Description");
     group2.AddChildInternal(group4);
     group.AddChildInternal(group2);
     CodeGroup group5 = new UnionCodeGroup();
     group5.FromXml(CreateCodeGroupElement("UnionCodeGroup", "LocalIntranet", new ZoneMembershipCondition(SecurityZone.Intranet).ToXml()), this);
     group5.Name = Environment.GetResourceString("Policy_Intranet_Name");
     group5.Description = Environment.GetResourceString("Policy_Intranet_Description");
     CodeGroup group6 = new NetCodeGroup(new AllMembershipCondition()) {
         Name = Environment.GetResourceString("Policy_IntranetNet_Name"),
         Description = Environment.GetResourceString("Policy_IntranetNet_Description")
     };
     group5.AddChildInternal(group6);
     CodeGroup group7 = new FileCodeGroup(new AllMembershipCondition(), FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read) {
         Name = Environment.GetResourceString("Policy_IntranetFile_Name"),
         Description = Environment.GetResourceString("Policy_IntranetFile_Description")
     };
     group5.AddChildInternal(group7);
     group.AddChildInternal(group5);
     CodeGroup group8 = new UnionCodeGroup();
     group8.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Internet", new ZoneMembershipCondition(SecurityZone.Internet).ToXml()), this);
     group8.Name = Environment.GetResourceString("Policy_Internet_Name");
     group8.Description = Environment.GetResourceString("Policy_Internet_Description");
     CodeGroup group9 = new NetCodeGroup(new AllMembershipCondition()) {
         Name = Environment.GetResourceString("Policy_InternetNet_Name"),
         Description = Environment.GetResourceString("Policy_InternetNet_Description")
     };
     group8.AddChildInternal(group9);
     group.AddChildInternal(group8);
     CodeGroup group10 = new UnionCodeGroup();
     group10.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Nothing", new ZoneMembershipCondition(SecurityZone.Untrusted).ToXml()), this);
     group10.Name = Environment.GetResourceString("Policy_Untrusted_Name");
     group10.Description = Environment.GetResourceString("Policy_Untrusted_Description");
     group.AddChildInternal(group10);
     CodeGroup group11 = new UnionCodeGroup();
     group11.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Internet", new ZoneMembershipCondition(SecurityZone.Trusted).ToXml()), this);
     group11.Name = Environment.GetResourceString("Policy_Trusted_Name");
     group11.Description = Environment.GetResourceString("Policy_Trusted_Description");
     CodeGroup group12 = new NetCodeGroup(new AllMembershipCondition()) {
         Name = Environment.GetResourceString("Policy_TrustedNet_Name"),
         Description = Environment.GetResourceString("Policy_TrustedNet_Description")
     };
     group11.AddChildInternal(group12);
     group.AddChildInternal(group11);
     return group;
 }
Beispiel #18
0
        public override bool Equals(object o)
        {
            FileCodeGroup group = o as FileCodeGroup;

            return(((group != null) && base.Equals(group)) && (this.m_access == group.m_access));
        }
Beispiel #19
0
        internal void SetDefaultCodeGroups()
        {
            // NOTE: if you are going to add references to any permission set
            // that references permissions outside of mscorlib, DO NOT
            // CALL GetNamedPermissionSetInternal().  You need to use
            // CreateCodeGroupElement() and AddChildInternal().

            // NOTE: any changes to this will require that you recontemplate
            // the quick cache data found in PolicyLevelData.

            // Before we call GetNamedPermissionSetInternal, make sure that we are "loaded"
            m_loaded = true;
            UnionCodeGroup root = new UnionCodeGroup();
            root.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "Nothing", new AllMembershipCondition().ToXml() ), this );
            root.Name = Environment.GetResourceString( "Policy_AllCode_Name" );
            root.Description = Environment.GetResourceString( "Policy_AllCode_DescriptionNothing" );

            UnionCodeGroup myComputerCodeGroup = new UnionCodeGroup();
            myComputerCodeGroup.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "FullTrust", new ZoneMembershipCondition( SecurityZone.MyComputer ).ToXml() ), this );
            myComputerCodeGroup.Name = Environment.GetResourceString( "Policy_MyComputer_Name" );
            myComputerCodeGroup.Description = Environment.GetResourceString( "Policy_MyComputer_Description" );

            // This code give trust to anything StrongName signed by Microsoft.
            StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob( AssemblyRef.MicrosoftPublicKeyFull );
            UnionCodeGroup microsoft = new UnionCodeGroup();
            microsoft.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "FullTrust", new StrongNameMembershipCondition( blob, null, null ).ToXml() ), this );
            microsoft.Name = Environment.GetResourceString( "Policy_Microsoft_Name" );
            microsoft.Description = Environment.GetResourceString( "Policy_Microsoft_Description" );
            myComputerCodeGroup.AddChildInternal( microsoft );

            // This code give trust to anything StrongName signed using the ECMA
            // public key (core system assemblies).
            blob = new StrongNamePublicKeyBlob( AssemblyRef.EcmaPublicKeyFull );
            UnionCodeGroup ecma = new UnionCodeGroup();
            ecma.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "FullTrust", new StrongNameMembershipCondition( blob, null, null ).ToXml() ), this );
            ecma.Name = Environment.GetResourceString( "Policy_Ecma_Name" );
            ecma.Description = Environment.GetResourceString( "Policy_Ecma_Description" );
            myComputerCodeGroup.AddChildInternal( ecma );

            root.AddChildInternal(myComputerCodeGroup);
            
            // do the rest of the zones
            CodeGroup intranet = new UnionCodeGroup();
            intranet.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "LocalIntranet", new ZoneMembershipCondition( SecurityZone.Intranet ).ToXml() ), this );
            intranet.Name = Environment.GetResourceString( "Policy_Intranet_Name" );
            intranet.Description = Environment.GetResourceString( "Policy_Intranet_Description" );

            CodeGroup intranetNetCode = new NetCodeGroup( new AllMembershipCondition() );
            intranetNetCode.Name = Environment.GetResourceString( "Policy_IntranetNet_Name" );
            intranetNetCode.Description = Environment.GetResourceString( "Policy_IntranetNet_Description" );
            intranet.AddChildInternal( intranetNetCode );

            CodeGroup intranetFileCode = new FileCodeGroup( new AllMembershipCondition(), FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery );
            intranetFileCode.Name = Environment.GetResourceString( "Policy_IntranetFile_Name" );
            intranetFileCode.Description = Environment.GetResourceString( "Policy_IntranetFile_Description" );
            intranet.AddChildInternal( intranetFileCode );

            root.AddChildInternal( intranet );

            CodeGroup internet = new UnionCodeGroup();
            internet.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "Nothing", new ZoneMembershipCondition( SecurityZone.Internet ).ToXml() ), this );
            internet.Name = Environment.GetResourceString( "Policy_Internet_Name" );
            internet.Description = Environment.GetResourceString( "Policy_Internet_Description" );


            root.AddChildInternal( internet );

            CodeGroup untrusted = new UnionCodeGroup();
            untrusted.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "Nothing", new ZoneMembershipCondition( SecurityZone.Untrusted ).ToXml() ), this );
            untrusted.Name = Environment.GetResourceString( "Policy_Untrusted_Name" );
            untrusted.Description = Environment.GetResourceString( "Policy_Untrusted_Description" );
            root.AddChildInternal( untrusted );

            CodeGroup trusted = new UnionCodeGroup();
            trusted.FromXml( CreateCodeGroupElement( "UnionCodeGroup", "Internet", new ZoneMembershipCondition( SecurityZone.Trusted ).ToXml() ), this );
            trusted.Name = Environment.GetResourceString( "Policy_Trusted_Name" );
            trusted.Description = Environment.GetResourceString( "Policy_Trusted_Description" );
            CodeGroup trustedNet = new NetCodeGroup( new AllMembershipCondition() );
            trustedNet.Name = Environment.GetResourceString( "Policy_TrustedNet_Name" );
            trustedNet.Description = Environment.GetResourceString( "Policy_TrustedNet_Description" );
            trusted.AddChildInternal( trustedNet );

            root.AddChildInternal( trusted );
            m_rootCodeGroup = root;
        }
		public void ToXml () 
		{
			FileIOPermissionAccess access = FileIOPermissionAccess.Read | FileIOPermissionAccess.Write;
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), access);
			string s = cg.ToXml ().ToString ();
			Assert.IsTrue (s.IndexOf ("Access=\"Read, Write\"") > 0, "Access='Read, Write'");
		}
		public void MergeLogic () 
		{
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			Assert.AreEqual ("Union", cg.MergeLogic, "MergeLogic");
		}
        // Get a sandbox permission set that the CLR considers safe to grant an application with the given
        // evidence.  Note that this API is not a policy API, but rather a host helper API so that a host can
        // determine if an application's requested permission set is reasonable.  This is esentially just a
        // hard coded mapping of Zone -> Sandbox and is not configurable in any way.
        public static PermissionSet GetStandardSandbox(Evidence evidence)
        {
            if (evidence == null)
                throw new ArgumentNullException("evidence");
            Contract.EndContractBlock();

            //
            // The top-level switch for grant set is based upon Zone
            //   MyComputer -> FullTrust
            //   Intranet   -> LocalIntranet
            //   Trusted    -> Internet
            //   Internet   -> Internet
            //   All else   -> Nothing
            //   
            //   Both the Internet and LocalIntranet zones can have permission set extensions applied to them
            //   if there is Activation.
            //   

            Zone zone = evidence.GetHostEvidence<Zone>();
            if (zone == null)
            {
                return new PermissionSet(PermissionState.None);
            }
#if FEATURE_CAS_POLICY
            else if (zone.SecurityZone == SecurityZone.MyComputer)
            {
                return new PermissionSet(PermissionState.Unrestricted);
            }
            else if (zone.SecurityZone == SecurityZone.Intranet)
            {
                PermissionSet intranetGrantSet = BuiltInPermissionSets.LocalIntranet;

                // We also need to add in same site web and file IO permission
                PolicyStatement webPolicy =
                    new NetCodeGroup(new AllMembershipCondition()).Resolve(evidence);
                PolicyStatement filePolicy =
                    new FileCodeGroup(new AllMembershipCondition(), FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery).Resolve(evidence);

                if (webPolicy != null)
                {
                    intranetGrantSet.InplaceUnion(webPolicy.PermissionSet);
                }
                if (filePolicy != null)
                {
                    intranetGrantSet.InplaceUnion(filePolicy.PermissionSet);
                }

                return intranetGrantSet;
            }
            else if (zone.SecurityZone == SecurityZone.Internet ||
                     zone.SecurityZone == SecurityZone.Trusted)
            {
                PermissionSet internetGrantSet = BuiltInPermissionSets.Internet;

                // We also need to add in same site web permission
                PolicyStatement webPolicy =
                    new NetCodeGroup(new AllMembershipCondition()).Resolve(evidence);

                if (webPolicy != null)
                {
                    internetGrantSet.InplaceUnion(webPolicy.PermissionSet);
                }

                return internetGrantSet;
            }
#endif // FEATURE_CAS_POLICY
            else
            {
                return new PermissionSet(PermissionState.None);
            }
        }
		public void ResolveMatchingCodeGroups_NoMatch ()
		{
			FileCodeGroup cg = new FileCodeGroup (new ZoneMembershipCondition (SecurityZone.Untrusted), FileIOPermissionAccess.AllAccess);
			Assert.IsNull (cg.ResolveMatchingCodeGroups (new Evidence ()));
		}
		public void Resolve_AllMembershipCondition_AllAccess ()
		{
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			PolicyStatement result = cg.Resolve (new Evidence ());
			Assert.AreEqual (PolicyStatementAttribute.Nothing, result.Attributes, "Attributes");
			Assert.AreEqual (String.Empty, result.AttributeString, "AttributeString");
			Assert.IsFalse (result.PermissionSet.IsUnrestricted (), "IsUnrestricted");
			Assert.AreEqual (0, result.PermissionSet.Count, "Count");
		}
		public void ResolveMatchingCodeGroups_TwoLevel ()
		{
			FileCodeGroup level1 = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			CodeGroup level2 = level1.Copy ();
			level1.AddChild (level2);

			CodeGroup match = level1.ResolveMatchingCodeGroups (new Evidence ());
			Assert.IsNotNull (match, "Match");
			Assert.IsTrue (match.Equals (level1, false), "Equals(false)");
			Assert.IsTrue (match.Equals (level1, true), "Equals(true)");

			FileCodeGroup level2b = new FileCodeGroup (new ZoneMembershipCondition (SecurityZone.Untrusted), FileIOPermissionAccess.AllAccess);
			level1.AddChild (level2b);
			CodeGroup match2 = level1.ResolveMatchingCodeGroups (new Evidence ());
			Assert.IsNotNull (match2, "Match2");
			Assert.IsTrue (match2.Equals (level1, false), "Equals(false)");
			Assert.IsTrue (!match2.Equals (level1, true), "Equals(true)");
		}
		public void ResolveMatchingCodeGroups_ThreeLevel ()
		{
			FileCodeGroup level1 = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			CodeGroup level2 = level1.Copy ();
			level1.AddChild (level2);
			FileCodeGroup level3 = new FileCodeGroup (new ZoneMembershipCondition (SecurityZone.Untrusted), FileIOPermissionAccess.AllAccess);
			level2.AddChild (level3);

			CodeGroup match = level1.ResolveMatchingCodeGroups (new Evidence ());
			Assert.IsNotNull (match, "Match");
			Assert.IsTrue (match.Equals (level1, false), "Equals(false)");
			// Equals (true) isn't a deep compare (just one level)
			Assert.IsTrue (match.Equals (level1, true), "Equals(true)");
		}
		public void Resolve_ZoneMembershipCondition_Untrusted ()
		{
			IMembershipCondition mc = new ZoneMembershipCondition (SecurityZone.Untrusted);
			PermissionSet pset = new PermissionSet (PermissionState.None);
			FileCodeGroup cg = new FileCodeGroup (mc, FileIOPermissionAccess.AllAccess);

			Evidence e = new Evidence ();
			e.AddHost (new Zone (SecurityZone.Untrusted));
			PolicyStatement result = cg.Resolve (e);
			Assert.AreEqual (PolicyStatementAttribute.Nothing, result.Attributes, "Untrusted-Attributes");
			Assert.AreEqual (String.Empty, result.AttributeString, "Untrusted-AttributeString");
			Assert.IsFalse (result.PermissionSet.IsUnrestricted (), "Untrusted-IsUnrestricted");
			Assert.AreEqual (0, result.PermissionSet.Count, "Untrusted-Count");

			e = new Evidence ();
			e.AddHost (new Zone (SecurityZone.Internet));
			Assert.IsNull (cg.Resolve (e), "Internet");

			e = new Evidence ();
			e.AddHost (new Zone (SecurityZone.Intranet));
			Assert.IsNull (cg.Resolve (e), "Intranet");

			e = new Evidence ();
			e.AddHost (new Zone (SecurityZone.MyComputer));
			Assert.IsNull (cg.Resolve (e), "MyComputer");

			e = new Evidence ();
			e.AddHost (new Zone (SecurityZone.NoZone));
			Assert.IsNull (cg.Resolve (e), "NoZone");

			e = new Evidence ();
			e.AddHost (new Zone (SecurityZone.Trusted));
			Assert.IsNull (cg.Resolve (e), "Trusted");
		}
		public void ToFromXmlRoundtrip () 
		{
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			cg.Name = "SomeName";
			cg.Description = "Some Description";
			Assert.IsTrue (cg.Equals (cg), "Equals (itself)");
			SecurityElement se = cg.ToXml ();

			FileCodeGroup cg2 = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.NoAccess);
			cg2.Name = "SomeOtherName";
			cg2.Description = "Some Other Description";
			Assert.IsFalse (cg.Equals (cg2), "Equals (another)");

			cg2.FromXml (se);
			Assert.IsTrue (cg.Equals (cg2), "Equals (FromXml)");
		}
		public void Copy () 
		{
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			FileCodeGroup cg2 = (FileCodeGroup) cg.Copy ();
			Assert.AreEqual (cg.AttributeString, cg2.AttributeString, "AttributeString");
			Assert.AreEqual (cg.Children.Count, cg2.Children.Count, "Children");
			Assert.AreEqual (cg.Description, cg2.Description, "Description");
			Assert.AreEqual (cg.MergeLogic, cg2.MergeLogic, "MergeLogic");
			Assert.AreEqual (cg.Name, cg2.Name, "Name");
			Assert.AreEqual (cg.PermissionSetName, cg2.PermissionSetName, "PermissionSetName");
			Assert.AreEqual (cg.ToXml ().ToString (), cg2.ToXml ().ToString (), "ToXml");
		}
        [System.Security.SecurityCritical]  // auto-generated
        private CodeGroup CreateDefaultMachinePolicy() {
            UnionCodeGroup root = new UnionCodeGroup();
            root.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Nothing", new AllMembershipCondition().ToXml()), this);
            root.Name = Environment.GetResourceString("Policy_AllCode_Name");
            root.Description = Environment.GetResourceString("Policy_AllCode_DescriptionNothing");

            UnionCodeGroup myComputerCodeGroup = new UnionCodeGroup();
            myComputerCodeGroup.FromXml(CreateCodeGroupElement("UnionCodeGroup", "FullTrust", new ZoneMembershipCondition(SecurityZone.MyComputer).ToXml()), this);
            myComputerCodeGroup.Name = Environment.GetResourceString("Policy_MyComputer_Name");
            myComputerCodeGroup.Description = Environment.GetResourceString("Policy_MyComputer_Description");

            // This code give trust to anything StrongName signed by Microsoft.
            StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob(AssemblyRef.MicrosoftPublicKeyFull);
            UnionCodeGroup microsoft = new UnionCodeGroup();
            microsoft.FromXml(CreateCodeGroupElement("UnionCodeGroup", "FullTrust", new StrongNameMembershipCondition(blob, null, null).ToXml()), this);
            microsoft.Name = Environment.GetResourceString("Policy_Microsoft_Name");
            microsoft.Description = Environment.GetResourceString("Policy_Microsoft_Description");
            myComputerCodeGroup.AddChildInternal(microsoft);

            // This code give trust to anything StrongName signed using the ECMA
            // public key (core system assemblies).
            blob = new StrongNamePublicKeyBlob(AssemblyRef.EcmaPublicKeyFull);
            UnionCodeGroup ecma = new UnionCodeGroup();
            ecma.FromXml(CreateCodeGroupElement("UnionCodeGroup", "FullTrust", new StrongNameMembershipCondition(blob, null, null).ToXml()), this);
            ecma.Name = Environment.GetResourceString("Policy_Ecma_Name");
            ecma.Description = Environment.GetResourceString("Policy_Ecma_Description");
            myComputerCodeGroup.AddChildInternal(ecma);

            root.AddChildInternal(myComputerCodeGroup);

            // do the rest of the zones
            CodeGroup intranet = new UnionCodeGroup();
            intranet.FromXml(CreateCodeGroupElement("UnionCodeGroup", "LocalIntranet", new ZoneMembershipCondition(SecurityZone.Intranet).ToXml()), this);
            intranet.Name = Environment.GetResourceString("Policy_Intranet_Name");
            intranet.Description = Environment.GetResourceString("Policy_Intranet_Description");

            CodeGroup intranetNetCode = new NetCodeGroup(new AllMembershipCondition());
            intranetNetCode.Name = Environment.GetResourceString("Policy_IntranetNet_Name");
            intranetNetCode.Description = Environment.GetResourceString("Policy_IntranetNet_Description");
            intranet.AddChildInternal(intranetNetCode);

            CodeGroup intranetFileCode = new FileCodeGroup(new AllMembershipCondition(), FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery);
            intranetFileCode.Name = Environment.GetResourceString("Policy_IntranetFile_Name");
            intranetFileCode.Description = Environment.GetResourceString("Policy_IntranetFile_Description");
            intranet.AddChildInternal(intranetFileCode);

            root.AddChildInternal(intranet);

            CodeGroup internet = new UnionCodeGroup();
            internet.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Internet", new ZoneMembershipCondition(SecurityZone.Internet).ToXml()), this);
            internet.Name = Environment.GetResourceString("Policy_Internet_Name");
            internet.Description = Environment.GetResourceString("Policy_Internet_Description");

            CodeGroup internetNet = new NetCodeGroup(new AllMembershipCondition());
            internetNet.Name = Environment.GetResourceString("Policy_InternetNet_Name");
            internetNet.Description = Environment.GetResourceString("Policy_InternetNet_Description");
            internet.AddChildInternal(internetNet);

            root.AddChildInternal(internet);

            CodeGroup untrusted = new UnionCodeGroup();
            untrusted.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Nothing", new ZoneMembershipCondition(SecurityZone.Untrusted).ToXml()), this);
            untrusted.Name = Environment.GetResourceString("Policy_Untrusted_Name");
            untrusted.Description = Environment.GetResourceString("Policy_Untrusted_Description");
            root.AddChildInternal(untrusted);

            CodeGroup trusted = new UnionCodeGroup();
            trusted.FromXml(CreateCodeGroupElement("UnionCodeGroup", "Internet", new ZoneMembershipCondition(SecurityZone.Trusted).ToXml()), this);
            trusted.Name = Environment.GetResourceString("Policy_Trusted_Name");
            trusted.Description = Environment.GetResourceString("Policy_Trusted_Description");
            CodeGroup trustedNet = new NetCodeGroup(new AllMembershipCondition());
            trustedNet.Name = Environment.GetResourceString("Policy_TrustedNet_Name");
            trustedNet.Description = Environment.GetResourceString("Policy_TrustedNet_Description");
            trusted.AddChildInternal(trustedNet);

            root.AddChildInternal(trusted);

            return root;
        }
 public static PermissionSet GetStandardSandbox(Evidence evidence)
 {
     if (evidence == null)
     {
         throw new ArgumentNullException("evidence");
     }
     Zone hostEvidence = evidence.GetHostEvidence<Zone>();
     if (hostEvidence == null)
     {
         return new PermissionSet(PermissionState.None);
     }
     if (hostEvidence.SecurityZone == SecurityZone.MyComputer)
     {
         return new PermissionSet(PermissionState.Unrestricted);
     }
     if (hostEvidence.SecurityZone == SecurityZone.Intranet)
     {
         PermissionSet localIntranet = BuiltInPermissionSets.LocalIntranet;
         PolicyStatement statement = new NetCodeGroup(new AllMembershipCondition()).Resolve(evidence);
         PolicyStatement statement2 = new FileCodeGroup(new AllMembershipCondition(), FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read).Resolve(evidence);
         if (statement != null)
         {
             localIntranet.InplaceUnion(statement.PermissionSet);
         }
         if (statement2 != null)
         {
             localIntranet.InplaceUnion(statement2.PermissionSet);
         }
         return localIntranet;
     }
     if ((hostEvidence.SecurityZone != SecurityZone.Internet) && (hostEvidence.SecurityZone != SecurityZone.Trusted))
     {
         return new PermissionSet(PermissionState.None);
     }
     PermissionSet internet = BuiltInPermissionSets.Internet;
     PolicyStatement statement3 = new NetCodeGroup(new AllMembershipCondition()).Resolve(evidence);
     if (statement3 != null)
     {
         internet.InplaceUnion(statement3.PermissionSet);
     }
     return internet;
 }
		public void CopyWithChildren () 
		{
			FileCodeGroup cgChild = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			cg.AddChild (cgChild);
			FileCodeGroup cg2 = (FileCodeGroup) cg.Copy ();
			Assert.AreEqual (cg.Children.Count, cg2.Children.Count, "Children");
			Assert.AreEqual (cg.ToXml ().ToString (), cg2.ToXml ().ToString (), "ToXml");
		}
		public void ResolveMatchingCodeGroups_OneLevel ()
		{
			FileCodeGroup level1 = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			CodeGroup match = level1.ResolveMatchingCodeGroups (new Evidence ());
			Assert.IsNotNull (match, "Match");
			Assert.IsTrue (match.Equals (level1, false), "Equals(false)");
			Assert.IsTrue (match.Equals (level1, true), "Equals(true)");
		}
		public void ResolveMatchingCodeGroups_Null () 
		{
			FileCodeGroup cg = new FileCodeGroup (new AllMembershipCondition (), FileIOPermissionAccess.AllAccess);
			cg.ResolveMatchingCodeGroups (null);
		}
		public void Constructor_MembershipConditionNullFileIOPermissionAccess () 
		{
			FileCodeGroup cg = new FileCodeGroup (null, FileIOPermissionAccess.AllAccess);
		}
Beispiel #36
0
        /// <summary>Determines whether the specified code group is equivalent to the current code group.</summary>
        /// <param name="o">The code group to compare with the current code group. </param>
        /// <returns>
        ///     <see langword="true" /> if the specified code group is equivalent to the current code group; otherwise, <see langword="false" />.</returns>
        // Token: 0x06002943 RID: 10563 RVA: 0x00098504 File Offset: 0x00096704
        public override bool Equals(object o)
        {
            FileCodeGroup fileCodeGroup = o as FileCodeGroup;

            return(fileCodeGroup != null && base.Equals(fileCodeGroup) && this.m_access == fileCodeGroup.m_access);
        }
	// Resolve code groups that match specific evidence.
	public override CodeGroup ResolveMatchingCodeGroups(Evidence evidence)
			{
				FileCodeGroup newGroup;
				CodeGroup child;

				// Validate the parameter.
				if(evidence == null)
				{
					throw new ArgumentNullException("evidence");
				}

				// Check the membership condition.
				if(!MembershipCondition.Check(evidence))
				{
					return null;
				}

				// Clone this group, except for the children.
				newGroup = new FileCodeGroup(MembershipCondition, access);
				newGroup.Name = Name;
				newGroup.Description = Description;

				// Resolve and add the children.
				foreach(CodeGroup group in Children)
				{
					child = group.ResolveMatchingCodeGroups(evidence);
					if(child != null)
					{
						newGroup.AddChild(child);
					}
				}

				// Return the result.
				return newGroup;
			}