DirectoryGroupQuery.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / Role / DirectoryGroupQuery.cs / 1305376 / DirectoryGroupQuery.cs

                            #region Using directives 

using System;
using System.Collections;
using System.Collections.Generic; 
using System.Text;
using System.Net; 
using System.DirectoryServices; 

#endregion 

namespace System.Workflow.Activities
{
    [Serializable] 
    sealed internal class DirectoryGroupQuery : IDirectoryOperation
    { 
        public DirectoryGroupQuery() 
        {
        } 

        public void GetResult(DirectoryEntry rootEntry, DirectoryEntry currentEntry, List response)
        {
            if (response == null) 
                throw new ArgumentNullException("response");
 
            Stack entries = new Stack(); 
            entries.Push(currentEntry);
 
            while (entries.Count != 0)
            {
                DirectoryEntry entry = entries.Pop();
 
                bool isGroup = false;
                if (Contains(entry.Properties.PropertyNames,"objectClass")) 
                { 
                    foreach (String value in entry.Properties["objectClass"])
                    { 
                        if (String.Compare(value, ActiveDirectoryRoleFactory.Configuration.Group, StringComparison.Ordinal) == 0)
                        {
                            isGroup = true;
                            break; 
                        }
                    } 
 
                    if (isGroup)
                    { 
                        if (Contains(entry.Properties.PropertyNames, ActiveDirectoryRoleFactory.Configuration.Member))
                        {
                            foreach (String propValue in entry.Properties[ActiveDirectoryRoleFactory.Configuration.Member])
                            { 
                                entries.Push(new DirectoryEntry(BuildUri(propValue)));
                            } 
                        } 
                    }
                    else 
                    {
                        response.Add(entry);
                    }
                } 
            }
        } 
 
        private static bool Contains(ICollection propertyNames, String testPropertyName)
        { 
            foreach (String propertyName in propertyNames)
            {
                if (String.Compare(propertyName, testPropertyName, StringComparison.Ordinal) == 0)
                    return true; 
            }
            return false; 
        } 

        private static String BuildUri(String propValue) 
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("LDAP://");
            for (int i = 0; i < propValue.Length; ++i) 
            {
                if (propValue[i] == '/') 
                    sb.Append("\\/"); 
                else
                    sb.Append(propValue[i]); 
            }
            return sb.ToString();
        }
    } 

} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK