using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.DirectoryServices.ActiveDirectory;
using System.DirectoryServices;
namespace ChangePasswordWebpart
{
public static class LDAPUtils
{
public static string GetLdapDomainName(string friendlyDomainName)
{
string ldapPath = null;
try
{
DirectoryContext objContext = new DirectoryContext(DirectoryContextType.Domain, friendlyDomainName);
Domain objDomain = Domain.GetDomain(objContext);
ldapPath = objDomain.Name;
}
catch (DirectoryServicesCOMException)
{
ldapPath = string.Empty;
}
return ldapPath;
}
public static bool Authenticate(string userName, string password, string domain, out string error)
{
bool authentic = false;
error = string.Empty;
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
object nativeObject = entry.NativeObject;
authentic = true;
entry.Close();
}
catch (Exception ex)
{
error = String.Format("{0}({1})", ex.Message, domain);
}
return authentic;
}
public static bool ChangePassword(string userName, string password, string newPassword, string domain, out string error)
{
bool changed = false;
error = string.Empty;
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(SAMAccountName=" + userName + ")";
search.SearchScope = SearchScope.Subtree;
search.CacheResults = false;
SearchResultCollection results = search.FindAll();
if (results.Count == 0)
throw new ArgumentException("Unable to find user in directory.");
DirectoryEntry userEntry = results[0].GetDirectoryEntry();
userEntry.Invoke("ChangePassword", new object[] { password, newPassword });
userEntry.Close();
entry.Close();
changed = true;
}
catch (Exception ex)
{
if (ex.InnerException == null)
error = String.Format("{0}({1})", ex.Message, domain);
else
error = String.Format("{0}({1})", ex.InnerException.Message, domain);
}
return changed;
}
}
}