LDAP Utils
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; } } }