2 // Mono.ILASM.DeclSecurity
5 // Ankit Jain <JAnkit@novell.com>
7 // (C) 2005 Ankit Jain, All rights reserved
12 using System
.Collections
;
13 using System
.Security
;
14 using System
.Security
.Permissions
;
16 using SSPermissionSet
= System
.Security
.PermissionSet
;
17 using MIPermissionSet
= Mono
.ILASM
.PermissionSet
;
19 namespace Mono
.ILASM
{
21 public interface IDeclSecurityTarget
{
22 DeclSecurity DeclSecurity { get; }
25 public class DeclSecurity
{
27 private Hashtable permissionset_table
;
28 private Hashtable permissionset20_table
;
30 public DeclSecurity ()
32 permissionset_table
= new Hashtable ();
35 public void AddPermission (PEAPI
.SecurityAction sec_action
, IPermission perm
)
37 SSPermissionSet ps
= (SSPermissionSet
) permissionset_table
[sec_action
];
39 ps
= new SSPermissionSet (PermissionState
.None
);
40 permissionset_table
[sec_action
] = ps
;
43 ps
.AddPermission (perm
);
46 public void AddPermissionSet (PEAPI
.SecurityAction sec_action
, SSPermissionSet perm_set
)
48 SSPermissionSet ps
= (SSPermissionSet
) permissionset_table
[sec_action
];
50 permissionset_table
[sec_action
] = perm_set
;
54 foreach (IPermission iper
in perm_set
)
55 ps
.AddPermission (iper
);
58 //Not called by parser for profile != NET_2_0
59 public void AddPermissionSet (PEAPI
.SecurityAction sec_action
, MIPermissionSet perm_set
)
61 PermissionSet ps
= null;
63 if (permissionset20_table
== null)
64 permissionset20_table
= new Hashtable ();
66 ps
= (MIPermissionSet
) permissionset20_table
[sec_action
];
69 permissionset20_table
[sec_action
] = perm_set
;
73 foreach (Permission perm
in perm_set
.Permissions
)
74 ps
.AddPermission (perm
);
77 public void AddTo (CodeGen code_gen
, PEAPI
.MetaDataElement elem
)
79 System
.Text
.UnicodeEncoding ue
= new System
.Text
.UnicodeEncoding ();
80 foreach (DictionaryEntry entry
in permissionset_table
) {
81 PEAPI
.SecurityAction sec_action
= (PEAPI
.SecurityAction
) entry
.Key
;
82 SSPermissionSet ps
= (SSPermissionSet
) entry
.Value
;
84 code_gen
.PEFile
.AddDeclSecurity (sec_action
,
85 ue
.GetBytes (ps
.ToXml ().ToString ()),
89 if (permissionset20_table
== null)
92 foreach (DictionaryEntry entry
in permissionset20_table
) {
93 PEAPI
.SecurityAction sec_action
= (PEAPI
.SecurityAction
) entry
.Key
;
94 MIPermissionSet ps
= (MIPermissionSet
) entry
.Value
;
96 code_gen
.PEFile
.AddDeclSecurity (sec_action
,
97 ps
.Resolve (code_gen
),