コード例 #1
0
        /// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.MessageQueuePermission3"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        public MessageQueuePermission(MessageQueuePermissionAccess permissionAccess, string machineName, string label, string category)
        {
            MessageQueuePermissionEntry entry = new MessageQueuePermissionEntry(permissionAccess, machineName, label, category);

            this.PermissionEntries.Add(entry);
        }
コード例 #2
0
        /// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.ToXml"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        public override SecurityElement ToXml()
        {
            SecurityElement root = new SecurityElement("IPermission");
            Type            type = this.GetType();

            root.AddAttribute("class", type.FullName + ", " + type.Module.Assembly.FullName.Replace('\"', '\''));
            root.AddAttribute("version", "1");

            if (this.isUnrestricted)
            {
                root.AddAttribute("Unrestricted", "true");
                return(root);
            }

            IEnumerator enumerator = this.PermissionEntries.GetEnumerator();

            while (enumerator.MoveNext())
            {
                SecurityElement             currentElement = null;
                MessageQueuePermissionEntry entry          = (MessageQueuePermissionEntry)enumerator.Current;
                if (entry.Path != null)
                {
                    currentElement = new SecurityElement("Path");
                    currentElement.AddAttribute("value", entry.Path);
                }
                else
                {
                    currentElement = new SecurityElement("Criteria");
                    if (entry.MachineName != null)
                    {
                        currentElement.AddAttribute("machine", entry.MachineName);
                    }

                    if (entry.Category != null)
                    {
                        currentElement.AddAttribute("category", entry.Category);
                    }

                    if (entry.Label != null)
                    {
                        currentElement.AddAttribute("label", entry.Label);
                    }
                }

                int currentAccess = (int)entry.PermissionAccess;
                if (currentAccess != 0)
                {
                    StringBuilder accessStringBuilder = null;
                    int[]         enumValues          = (int[])Enum.GetValues(typeof(MessageQueuePermissionAccess));
                    Array.Sort(enumValues);
                    for (int index = (enumValues.Length - 1); index >= 0; --index)
                    {
                        if (enumValues[index] != 0 && ((currentAccess & enumValues[index]) == enumValues[index]))
                        {
                            if (accessStringBuilder == null)
                            {
                                accessStringBuilder = new StringBuilder();
                            }
                            else
                            {
                                accessStringBuilder.Append("|");
                            }

                            accessStringBuilder.Append(Enum.GetName(typeof(MessageQueuePermissionAccess), enumValues[index]));
                            currentAccess = currentAccess & (enumValues[index] ^ enumValues[index]);
                        }
                    }

                    currentElement.AddAttribute("access", accessStringBuilder.ToString());
                }

                root.AddChild(currentElement);
            }

            return(root);
        }
コード例 #3
0
        /// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.MessageQueuePermission2"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        public MessageQueuePermission(MessageQueuePermissionAccess permissionAccess, string path)
        {
            MessageQueuePermissionEntry entry = new MessageQueuePermissionEntry(permissionAccess, path);

            this.PermissionEntries.Add(entry);
        }
コード例 #4
0
        /// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.FromXml"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        public override void FromXml(SecurityElement securityElement)
        {
            this.PermissionEntries.Clear();
            string unrestrictedValue = securityElement.Attribute("Unrestricted");

            if (unrestrictedValue != null && (string.Compare(unrestrictedValue, "true", true, CultureInfo.InvariantCulture) == 0))
            {
                this.isUnrestricted = true;
                return;
            }

            if (securityElement.Children != null)
            {
                for (int index = 0; index < securityElement.Children.Count; ++index)
                {
                    SecurityElement             currentElement = (SecurityElement)securityElement.Children[index];
                    MessageQueuePermissionEntry entry          = null;

                    string accessString     = currentElement.Attribute("access");
                    int    permissionAccess = 0;
                    if (accessString != null)
                    {
                        string[] accessArray = accessString.Split(new char[] { '|' });
                        for (int index2 = 0; index2 < accessArray.Length; ++index2)
                        {
                            string currentAccess = accessArray[index2].Trim();
                            if (Enum.IsDefined(typeof(MessageQueuePermissionAccess), currentAccess))
                            {
                                permissionAccess = permissionAccess | (int)Enum.Parse(typeof(MessageQueuePermissionAccess), currentAccess);
                            }
                        }
                    }

                    if (currentElement.Tag == "Path")
                    {
                        string path = currentElement.Attribute("value");
                        if (path == null)
                        {
                            throw new InvalidOperationException(Res.GetString(Res.InvalidXmlFormat));
                        }

                        entry = new MessageQueuePermissionEntry((MessageQueuePermissionAccess)permissionAccess, path);
                    }
                    else if (currentElement.Tag == "Criteria")
                    {
                        string label       = currentElement.Attribute("label");
                        string category    = currentElement.Attribute("category");
                        string machineName = currentElement.Attribute("machine");
                        if (machineName == null && label == null && category == null)
                        {
                            throw new InvalidOperationException(Res.GetString(Res.InvalidXmlFormat));
                        }

                        entry = new MessageQueuePermissionEntry((MessageQueuePermissionAccess)permissionAccess, machineName, label, category);
                    }
                    else
                    {
                        throw new InvalidOperationException(Res.GetString(Res.InvalidXmlFormat));
                    }

                    this.PermissionEntries.Add(entry);
                }
            }
        }
コード例 #5
0
        internal void ResolveFormatNames()
        {
            if (this.resolvedFormatNames == null)
            {
                this.resolvedFormatNames = new Hashtable(GetComparer());
                IEnumerator enumerator = this.PermissionEntries.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    MessageQueuePermissionEntry entry = (MessageQueuePermissionEntry)enumerator.Current;
                    if (entry.Path != null)
                    {
                        if (entry.Path == Any)
                        {
                            this.resolvedFormatNames.Add(Any, entry.PermissionAccess);
                        }
                        else
                        {
                            try
                            {
                                MessageQueue queue = new MessageQueue(entry.Path);
                                this.resolvedFormatNames.Add(queue.FormatName, entry.PermissionAccess);
                            }
                            catch
                            {
                                //if the format name cannot be resolved, it won't be added to the list
                                //permissions won't be granted.
                            }
                        }
                    }
                    else
                    {
                        try
                        {
                            MessageQueueCriteria criteria = new MessageQueueCriteria();
                            if (entry.MachineName != null)
                            {
                                criteria.MachineName = entry.MachineName;
                            }

                            if (entry.Category != null)
                            {
                                criteria.Category = new Guid(entry.Category);
                            }

                            if (entry.Label != null)
                            {
                                criteria.Label = entry.Label;
                            }

                            IEnumerator messageQueues = MessageQueue.GetMessageQueueEnumerator(criteria, false);
                            while (messageQueues.MoveNext())
                            {
                                MessageQueue queue = (MessageQueue)messageQueues.Current;
                                this.resolvedFormatNames.Add(queue.FormatName, entry.PermissionAccess);
                            }
                        }
                        catch
                        {
                            //if the criteria cannot be resolved, nothing will be added to the list
                            //permissions won't be granted.
                        }
                    }
                }
            }
        }
コード例 #6
0
 /// <include file='doc\MessageQueuePermissionEntryCollection.uex' path='docs/doc[@for="MessageQueuePermissionEntryCollection.Remove"]/*' />
 public void Remove(MessageQueuePermissionEntry value)
 {
     List.Remove(value);
 }
コード例 #7
0
 /// <include file='doc\MessageQueuePermissionEntryCollection.uex' path='docs/doc[@for="MessageQueuePermissionEntryCollection.Insert"]/*' />
 public void Insert(int index, MessageQueuePermissionEntry value)
 {
     List.Insert(index, value);
 }
コード例 #8
0
 /// <include file='doc\MessageQueuePermissionEntryCollection.uex' path='docs/doc[@for="MessageQueuePermissionEntryCollection.IndexOf"]/*' />
 public int IndexOf(MessageQueuePermissionEntry value)
 {
     return(List.IndexOf(value));
 }
コード例 #9
0
 /// <include file='doc\MessageQueuePermissionEntryCollection.uex' path='docs/doc[@for="MessageQueuePermissionEntryCollection.Contains"]/*' />
 public bool Contains(MessageQueuePermissionEntry value)
 {
     return(List.Contains(value));
 }
コード例 #10
0
 /// <include file='doc\MessageQueuePermissionEntryCollection.uex' path='docs/doc[@for="MessageQueuePermissionEntryCollection.Add"]/*' />
 public int Add(MessageQueuePermissionEntry value)
 {
     return(List.Add(value));
 }