2006-12-30 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / class / corlib / System.Security.Permissions / KeyContainerPermissionAttribute.cs
1 //
2 // System.Security.Permissions.KeyContainerPermissionAttribute class
3 //
4 // Author
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 #if NET_2_0
30
31 using System.Globalization;
32 using System.Runtime.InteropServices;
33
34 namespace System.Security.Permissions {
35
36         [AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Class |
37                 AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method, 
38                 AllowMultiple = true, Inherited = false)]
39         [ComVisible (true)]
40         [Serializable]
41         public sealed class KeyContainerPermissionAttribute : CodeAccessSecurityAttribute {
42
43                 private KeyContainerPermissionFlags _flags;
44                 private string _containerName;
45                 private int _spec;
46                 private string _store;
47                 private string _providerName;
48                 private int _type;
49
50                 // Constructors
51
52                 public KeyContainerPermissionAttribute (SecurityAction action) 
53                         : base (action)
54                 {
55                         _spec = -1;
56                         _type = -1;
57                 }
58
59                 // Properties
60
61                 public KeyContainerPermissionFlags Flags {
62                         get { return _flags; }
63                         set { _flags = value; }
64                 }
65
66                 public string KeyContainerName {
67                         get { return _containerName; }
68                         set { _containerName = value; }
69                 }
70
71                 public int KeySpec {
72                         get { return _spec; }
73                         set { _spec = value; }
74                 }
75
76                 public string KeyStore {
77                         get { return _store; }
78                         set { _store = value; }
79                 }
80
81                 public string ProviderName {
82                         get { return _providerName; }
83                         set { _providerName = value; }
84                 }
85
86                 public int ProviderType {
87                         get { return _type; }
88                         set { _type = value; }
89                 }
90
91                 // Methods
92
93                 public override IPermission CreatePermission ()
94                 {
95                         if (this.Unrestricted)
96                                 return new KeyContainerPermission (PermissionState.Unrestricted);
97                         else if (EmptyEntry ())
98                                 return new KeyContainerPermission (_flags);
99                         else {
100                                 KeyContainerPermissionAccessEntry[] list = new KeyContainerPermissionAccessEntry [1];
101                                 list [0] = new KeyContainerPermissionAccessEntry (_store, _providerName, _type, _containerName, _spec, _flags);
102                                 return new KeyContainerPermission (_flags, list);
103                         }
104                 }
105
106                 private bool EmptyEntry () 
107                 {
108                         if (_containerName != null)
109                                 return false;
110                         if (_spec != 0)
111                                 return false;
112                         if (_store != null)
113                                 return false;
114                         if (_providerName != null)
115                                 return false;
116                         if (_type != 0)
117                                 return false;
118                         return true;
119                 }
120         }
121 }
122
123 #endif