コード例 #1
0
    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);
    }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }