Mega Code Archive

 
Categories / C# / Development Class
 

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