public static string GetDefaultNamingContext(string domain, string username, string password) { string dnc = null; if (!string.IsNullOrEmpty(domain)) { //DirectoryEntry ent = GetDirectoryEntry("LDAP://" + domain + "/RootDSE"); DirectoryEntry ent = AD.GetDirectoryEntry("LDAP://" + domain + "/RootDSE", username, password); if (ent.Properties.Contains("defaultNamingContext")) { dnc = ent.Properties["defaultNamingContext"][0].ToString(); } } return(dnc); }
private List <ActiveDirectorySite> GetSites() { List <ActiveDirectorySite> sites = new List <ActiveDirectorySite>(); string strDomain = comboBoxDomain.Text; string strLoginID = textBoxUsername.Text; string strLoginPassword = textBoxPassword.Text; string strConfigurationNamingContext; string strSite = comboBoxSite.Text; if (!string.IsNullOrEmpty(strDomain)) { DirectoryEntry ent = AD.GetDirectoryEntry("LDAP://" + strDomain + "/RootDSE", strLoginID, strLoginPassword); if (ent == null) { return(sites); } try { if (ent.Properties.Contains("configurationNamingContext")) { strConfigurationNamingContext = ent.Properties["configurationNamingContext"][0].ToString(); string strSitesContainer = "LDAP://" + strDomain + "/cn=Sites," + strConfigurationNamingContext; Forest x = AD.GetForest(strDomain, strLoginID, strLoginPassword); foreach (ActiveDirectorySite site in x.Sites) { sites.Add(site); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Get sites - Exception", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(sites); } } return(sites); }
private LockoutData GetLockoutData(string server) { //string strDomain = comboBoxDomain.Text; string strLoginID = textBoxUsername.Text; string strLoginPassword = textBoxPassword.Text; string user_id = textBoxUserIDSearch.Text; LockoutData ld = new LockoutData(); if (string.IsNullOrEmpty(user_id)) { return(ld); } //DirectoryEntry root = AD.GetDirectoryEntry("LDAP://" + server,strLoginID,strLoginPassword); //DirectorySearcher searcher = new DirectorySearcher(root); //string strFilter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + user_id + "))"; //searcher.PageSize = 1000; //searcher.Filter = strFilter; //searcher.PropertiesToLoad.Add("userAccountControl"); //searcher.PropertiesToLoad.Add("pwdLastSet"); //searcher.PropertiesToLoad.Add("msDS-ReplAttributeMetaData"); //SearchResult result; //try //{ // result = searcher.FindOne(); //} //catch (Exception ex) //{ // Console.WriteLine(ex.Message); // return ld; //} string strFilter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + user_id + "))"; string[] props = { "userAccountControl", "pwdLastSet", "msDS-ReplAttributeMetaData" }; SearchResultCollection results = AD.GetSearchResults(server, strFilter, props, strLoginID, strLoginPassword); if (results != null) { if (results.Count == 0) { //MessageBox.Show("Not found: " + user_id, "Not found", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { SearchResult result = results[0]; ld.user_id = user_id; if (result.Properties.Contains("userAccountControl")) { int userAccountControlValue = (int)result.Properties["userAccountControl"][0]; AD.ADS_USER_FLAG_ENUM userAccountControl = (AD.ADS_USER_FLAG_ENUM)userAccountControlValue; ld.user_state = (userAccountControlValue & (int)AD.ADS_USER_FLAG_ENUM.ADS_UF_LOCKOUT) == (int)AD.ADS_USER_FLAG_ENUM.ADS_UF_LOCKOUT ? "Locked" : "Not Locked"; } if (result.Properties.Contains("pwdLastSet")) { long lngPasswordChanged = (long)result.Properties["pwdLastSet"][0]; DateTime dtmLastSet = DateTime.FromFileTime(lngPasswordChanged); ld.pwd_last_set = dtmLastSet.ToString(); int intDaysOld = (int)(DateTime.Now - dtmLastSet).TotalDays; string suffix = intDaysOld > 1 ? " days" : " day"; ld.password_age = intDaysOld.ToString() + suffix; } //Console.WriteLine(xml); PrincipalContext principalContext = AD.GetPrincipalContext(server, strLoginID, strLoginPassword); UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext, textBoxUserIDSearch.Text); if (userPrincipal.IsAccountLockedOut()) { ld.user_state = "Locked"; ld.bad_pwd_count = userPrincipal.BadLogonCount; //userPrincipal.UnlockAccount() //userPrincipal.SetPassword() //userPrincipal.Save() //userPrincipal.RefreshExpiredPassword() //userPrincipal.LastBadPasswordAttempt foreach (string property in result.Properties["msDS-ReplAttributeMetaData"]) { if (property.ToLower().Contains("lockouttime") && property.ToLower().Contains("pszlastoriginatingdsadn")) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(property); Console.WriteLine("*****************"); Console.WriteLine(xmlDoc.SelectSingleNode("DS_REPL_ATTR_META_DATA/pszLastOriginatingDsaDN").InnerText); Console.WriteLine(xmlDoc.SelectSingleNode("DS_REPL_ATTR_META_DATA/pszLastOriginatingDsaDN").Value); Console.WriteLine("*****************"); string strPattern = "CN=NTDS Settings,CN=(?<servername>[^,]+),"; Regex objRegEx = new Regex(strPattern, RegexOptions.IgnoreCase); MatchCollection colMatches = objRegEx.Matches(property); if (colMatches.Count > 0) { ld.orig_lock = colMatches[0].Groups["servername"].Value; } } } } else { ld.user_state = "Not Locked"; ld.orig_lock = "N/A"; //ld.lockout_time = "N/A"; //long lngLockoutTime = (long)result.Properties["lockouttime"][0]; //ld.lockout_time = DateTime.FromFileTime(lngLockoutTime).ToLocalTime().ToString(); } ld.lockout_time = userPrincipal.AccountLockoutTime == null ? "N/A" : ((DateTime)userPrincipal.AccountLockoutTime).ToLocalTime().ToString(); ld.last_bad_pwd = userPrincipal.LastBadPasswordAttempt == null ? "None" : ((DateTime)userPrincipal.LastBadPasswordAttempt).ToLocalTime().ToString(); DirectoryEntry blah = AD.GetDirectoryEntry("LDAP://" + server + "/" + userPrincipal.DistinguishedName, strLoginID, strLoginPassword); Console.WriteLine(blah.Properties.Contains("msDS-ReplAttributeMetaData")); //Console.WriteLine(blah.Properties["msDS-ReplAttributeMetaData"][0]); //msDS-ReplAttributeMetaData foreach (var name in result.Properties.PropertyNames) { Console.WriteLine(name.ToString()); } } } return(ld); }