You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="ADConnectionHelper.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
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; }
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user