Welcome to mirror list, hosted at ThFree Co, Russian Federation.

FileCodeGroup.cs « System.Security.Policy « corlib « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: debd7d3543abe78bcda76ce85bab4a48c4de8cd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// System.Security.Policy.FileCodeGroup
//
// Author(s):
//   Nick Drochak (ndrochak@gol.com)
//
// (C) 2001 Nick Drochak, All rights reserved.

using System.Security.Policy;
using System.Security.Permissions;
using System.Collections;
using System;  // for MonoTODO attribute

namespace System.Security.Policy
{
	[Serializable]
	public sealed class FileCodeGroup : CodeGroup
	{
		FileIOPermissionAccess m_access;

		[MonoTODO("Check if membershipCondition is valid")]
		public FileCodeGroup(IMembershipCondition membershipCondition,
					FileIOPermissionAccess access) 
			: base(membershipCondition, null)
		{
			if (!Enum.IsDefined(typeof(FileIOPermissionAccess), access))
				throw new ArgumentException("Value not defined for FileIOPermissionAccess","access");
			
			m_access = access;
		}

		public override CodeGroup Copy()
		{
			FileCodeGroup copy = new FileCodeGroup(MembershipCondition, m_access);
			foreach (CodeGroup child in Children)
			{
				AddChild(child.Copy());
			}

			return copy;
		}
		
		public override string MergeLogic
		{
			get
			{
				return "Union";
			}
		}

		[MonoTODO]
		public override PolicyStatement Resolve(	Evidence evidence)
		{
			if (null == evidence)
				throw new ArgumentNullException("evidence");

			if (null == PolicyStatement)
				throw new PolicyException();

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

			IEnumerator hostEnumerator = evidence.GetHostEnumerator();
			while (hostEnumerator.MoveNext())
			{
				// FIXME: not sure what to do here
				//  How do we check the URL and make a PolicyStatement?
			}
			throw new NotImplementedException();
		}

		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)
					AddChild(childMatchingCodeGroup);
			}

			return matchRoot;
		}

		public override string AttributeString
		{
			get
			{
				return null;
			}
		}

		public override string PermissionSetName
		{
			get
			{
				return "Same directory FileIO - " + m_access.ToString();
			}
		}

		public override bool Equals(object o)
		{
			if (!(o is FileCodeGroup))
				return false;

			if (this.m_access != ((FileCodeGroup)o).m_access)
				return false;

			return Equals((CodeGroup)o, false);
		}

		[MonoTODO]
		public override int GetHashCode()
		{
			throw new NotImplementedException();
		}

		protected override void ParseXml(SecurityElement e, PolicyLevel level)
		{
			m_access = (FileIOPermissionAccess)Enum.Parse(typeof(FileIOPermissionAccess), e.Attribute("Access"), true);
		}
		
		protected override void CreateXml(SecurityElement element, PolicyLevel level)
		{
			element.AddAttribute("Access", m_access.ToString());
		}
	}  // public abstract class CodeGroup

}  // namespace System.Security.Policy