static void CompleteSecurityAttributeFields(SSP.SecurityAttribute security_attribute, SecurityAttribute attribute) { var type = security_attribute.GetType (); foreach (var named_argument in attribute.Fields) type.GetField (named_argument.Name).SetValue (security_attribute, named_argument.Argument.Value); }
static void CompleteSecurityAttributeProperties(SSP.SecurityAttribute security_attribute, SecurityAttribute attribute) { var type = security_attribute.GetType (); foreach (var named_argument in attribute.Properties) type.GetProperty (named_argument.Name).SetValue (security_attribute, named_argument.Argument.Value, null); }
private SSP.SecurityAttribute CreateSecurityAttribute(SecurityAction action, BinaryReader br, byte [] permset, int pos, out int start, bool resolve) { string cname = SignatureReader.ReadUTF8String(permset, pos, out start); Type secattr = null; // note: the SecurityAction parameter isn't important to generate the XML SSP.SecurityAttribute sa = null; try { secattr = Type.GetType(cname, false); if (secattr == null) { return(null); } sa = Activator.CreateInstance(secattr, new object [] { (SSP.SecurityAction)action }) as SSP.SecurityAttribute; } catch {} if (sa == null) { return(null); } // encoded length of all parameters (we don't need the value - except the updated pos) Utilities.ReadCompressedInteger(permset, start, out pos); int numparams = Utilities.ReadCompressedInteger(permset, pos, out start); if (numparams == 0) { return(sa); } br.BaseStream.Position = start; for (int j = 0; j < numparams; j++) { bool read = true; CustomAttrib.NamedArg na = sr.ReadNamedArg(permset, br, ref read, resolve); if (!read) { return(null); } if (na.Field) { FieldInfo fi = secattr.GetField(na.FieldOrPropName); fi.SetValue(sa, na.FixedArg.Elems[0].Value); } else if (na.Property) { PropertyInfo pi = secattr.GetProperty(na.FieldOrPropName); pi.SetValue(sa, na.FixedArg.Elems[0].Value, null); } } start = (int)br.BaseStream.Position; return(sa); }
static void CompleteSecurityAttribute(SSP.SecurityAttribute security_attribute, SecurityAttribute attribute) { if (attribute.HasFields) CompleteSecurityAttributeFields (security_attribute, attribute); if (attribute.HasProperties) CompleteSecurityAttributeProperties (security_attribute, attribute); }
static void CompleteSecurityAttributeProperties(SSP.SecurityAttribute security_attribute, SecurityAttribute attribute) { var type = security_attribute.GetType(); foreach (var named_argument in attribute.Properties) { type.GetProperty(named_argument.Name).SetValue(security_attribute, named_argument.Argument.Value, null); } }
static void CompleteSecurityAttributeFields(SSP.SecurityAttribute security_attribute, SecurityAttribute attribute) { var type = security_attribute.GetType(); foreach (var named_argument in attribute.Fields) { type.GetField(named_argument.Name).SetValue(security_attribute, named_argument.Argument.Value); } }
private static void CompleteSecurityAttributeProperties(System.Security.Permissions.SecurityAttribute security_attribute, Mono.Cecil.SecurityAttribute attribute) { Type type = security_attribute.GetType(); foreach (Mono.Cecil.CustomAttributeNamedArgument property in attribute.Properties) { type.GetProperty(property.Name).SetValue(security_attribute, property.Argument.Value, null); } }
private static void CompleteSecurityAttributeFields(System.Security.Permissions.SecurityAttribute security_attribute, Mono.Cecil.SecurityAttribute attribute) { Type type = security_attribute.GetType(); foreach (Mono.Cecil.CustomAttributeNamedArgument field in attribute.Fields) { type.GetField(field.Name).SetValue(security_attribute, field.Argument.Value); } }
private static void CompleteSecurityAttribute(System.Security.Permissions.SecurityAttribute security_attribute, Mono.Cecil.SecurityAttribute attribute) { if (attribute.HasFields) { SecurityDeclarationRocks.CompleteSecurityAttributeFields(security_attribute, attribute); } if (attribute.HasProperties) { SecurityDeclarationRocks.CompleteSecurityAttributeProperties(security_attribute, attribute); } }
static void CompleteSecurityAttribute(SSP.SecurityAttribute security_attribute, SecurityAttribute attribute) { if (attribute.HasFields) { CompleteSecurityAttributeFields(security_attribute, attribute); } if (attribute.HasProperties) { CompleteSecurityAttributeProperties(security_attribute, attribute); } }
public SecurityDeclaration FromByteArray(SecurityAction action, byte [] declaration, bool resolve) { SecurityDeclaration dec = new SecurityDeclaration(action); #if !CF_1_0 && !CF_2_0 dec.PermissionSet = new PermissionSet(SSP.PermissionState.None); if (declaration == null || declaration.Length == 0) { return(dec); } if (declaration[0] == 0x2e) { // new binary format introduced in 2.0 int pos = 1; int start; int numattr = Utilities.ReadCompressedInteger(declaration, pos, out start); if (numattr == 0) { return(dec); } BinaryReader br = new BinaryReader(new MemoryStream(declaration)); for (int i = 0; i < numattr; i++) { pos = start; SSP.SecurityAttribute sa = CreateSecurityAttribute(action, br, declaration, pos, out start, resolve); if (sa == null) { dec.Resolved = false; dec.Blob = declaration; return(dec); } IPermission p = sa.CreatePermission(); dec.PermissionSet.AddPermission(p); } } else { Parser.LoadXml(Encoding.Unicode.GetString(declaration)); try { dec.PermissionSet.FromXml(Parser.ToXml()); dec.PermissionSet.ToXml(); } catch { dec.Resolved = false; dec.Blob = declaration; } } #endif return(dec); }
static IPermission CreatePermission (SecurityDeclaration declaration, SecurityAttribute attribute) { var attribute_type = Type.GetType (attribute.AttributeType.FullName); if (attribute_type == null) throw new ArgumentException ("attribute"); var security_attribute = CreateSecurityAttribute (attribute_type, declaration); if (security_attribute == null) throw new InvalidOperationException (); CompleteSecurityAttribute (security_attribute, attribute); return security_attribute.CreatePermission (); }
private static IPermission CreatePermission(SecurityDeclaration declaration, Mono.Cecil.SecurityAttribute attribute) { Type type = Type.GetType(attribute.AttributeType.FullName); if (type == null) { throw new ArgumentException("attribute"); } System.Security.Permissions.SecurityAttribute securityAttribute = SecurityDeclarationRocks.CreateSecurityAttribute(type, declaration); if (securityAttribute == null) { throw new InvalidOperationException(); } SecurityDeclarationRocks.CompleteSecurityAttribute(securityAttribute, attribute); return(securityAttribute.CreatePermission()); }
public static SecurityDeclaration ToSecurityDeclaration(this PermissionSet self, SecurityAction action, ModuleDefinition module) { if (self == null) throw new ArgumentNullException ("self"); if (module == null) throw new ArgumentNullException ("module"); var declaration = new SecurityDeclaration (action); var attribute = new SecurityAttribute ( module.TypeSystem.LookupType ("System.Security.Permissions", "PermissionSetAttribute")); attribute.Properties.Add ( new CustomAttributeNamedArgument ( "XML", new CustomAttributeArgument ( module.TypeSystem.String, self.ToXml ().ToString ()))); declaration.SecurityAttributes.Add (attribute); return declaration; }
public static extern IntPtr CreateFile(string lpFileName, int dwDesAccess, int dwShareMode, SecurityAttribute lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);