ADConnectionHelper.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 / fx / src / xsp / System / Web / DataAccess / ADConnectionHelper.cs / 1305376 / ADConnectionHelper.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.DataAccess 
{ 
    using  System.Net;
    using  System.Diagnostics; 
    using  System.Web.Hosting;
    using  System.Web.Security;
    using  System.DirectoryServices;
    using  System.DirectoryServices.Protocols; 

    internal static class ActiveDirectoryConnectionHelper 
    { 

        internal static DirectoryEntryHolder GetDirectoryEntry(DirectoryInformation directoryInfo, string objectDN, bool revertImpersonation) 
        {
            Debug.Assert ((objectDN != null) && (objectDN.Length != 0));

            // 
            // Get the adspath and create a directory entry holder
            // 
            DirectoryEntryHolder holder = new DirectoryEntryHolder(new DirectoryEntry ( 
                                                                                                        directoryInfo.GetADsPath(objectDN),
                                                                                                        directoryInfo.GetUsername(), 
                                                                                                        directoryInfo.GetPassword(),
                                                                                                        directoryInfo.AuthenticationTypes));
            //
            // If  revertImpersonation is true, we need to revert 
            //
            holder.Open(null,  revertImpersonation); 
            return holder; 
        }
    } 

    internal sealed class DirectoryEntryHolder
    {
        private ImpersonationContext ctx = null; 
        private bool opened;
        private DirectoryEntry entry; 
 
        internal DirectoryEntryHolder (DirectoryEntry entry)
        { 
            Debug.Assert (entry != null);
            this.entry = entry;
        }
 
        internal void Open (HttpContext context, bool revertImpersonate)
        { 
            if (opened) 
                return; // Already opened
 
            //
            // Revert client impersonation if required
            //
            if (revertImpersonate) 
            {
                ctx = new ApplicationImpersonationContext(); 
            } 
            else
            { 
                ctx = null;
            }

            opened = true; // Open worked! 
        }
 
        internal void Close () 
        {
            if (!opened) // Not open! 
                return;

            entry.Dispose();
            RestoreImpersonation(); 
            opened = false;
        } 
 
        internal void RestoreImpersonation() {
            // Restore impersonation 
            if (ctx != null)
            {
                ctx.Undo();
                ctx = null; 
            }
        } 
 
        internal DirectoryEntry DirectoryEntry
        { 
            get { return entry; }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

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