using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Text; using System.DirectoryServices; public class UserSearchForm : Form { private string username; private string password; private string hostname; private string schemaNamingContext; private string defaultNamingContext; public UserSearchForm() { InitializeComponent(); } protected void SetLogonInformation() { username = (textBoxUsername.Text == "" ? null : textBoxUsername.Text); password = (textBoxPassword.Text == "" ? null : textBoxPassword.Text); hostname = textBoxHostname.Text; if (hostname != "") hostname += "/"; } protected void SetNamingContext() { using (DirectoryEntry de = new DirectoryEntry()) { string path = "LDAP://" + hostname + "root"; de.Username = username; de.Password = password; de.Path = path; schemaNamingContext = de.Properties["schemaNamingContext"][0].ToString(); defaultNamingContext = de.Properties["defaultNamingContext"][0].ToString(); } } protected void SetUserProperties(string schemaNamingContext) { List<string> properties = new List<string>(); string[] data = GetSchemaProperties(schemaNamingContext, "User"); properties.AddRange(GetSchemaProperties(schemaNamingContext, "Organizational-Person")); listBoxProperties.Items.Clear(); foreach (string s in properties) { listBoxProperties.Items.Add(s); } } protected string[] GetSchemaProperties(string schemaNamingContext, string objectType) { string[] data; using (DirectoryEntry de = new DirectoryEntry()) { de.Username = username; de.Password = password; de.Path = "LDAP://" + hostname + "CN=" + objectType + "," + schemaNamingContext; PropertyCollection properties = de.Properties; PropertyValueCollection values = properties["systemMayContain"]; data = new String[values.Count]; values.CopyTo(data, 0); } return data; } private void OnLoadProperties(object sender, EventArgs e) { SetLogonInformation(); SetNamingContext(); SetUserProperties(schemaNamingContext); } private void OnSearch(object sender, EventArgs e) { FillResult(); } protected string[] GetProperties() { string[] properties = new string[listBoxProperties.SelectedItems.Count]; int i = 0; foreach (string s in listBoxProperties.SelectedItems) { properties[i++] = s; } return properties; } protected void FillResult() { using (DirectoryEntry root = new DirectoryEntry()) { root.Username = username; root.Password = password; root.Path = "LDAP://" + hostname + defaultNamingContext; using (DirectorySearcher searcher = new DirectorySearcher()) { searcher.SearchRoot = root; searcher.SearchScope = SearchScope.Subtree; searcher.Filter = textBoxFilter.Text; searcher.PropertiesToLoad.AddRange(GetProperties()); SearchResultCollection results = searcher.FindAll(); StringBuilder summary = new StringBuilder(); foreach (SearchResult result in results) { foreach (string propName in result.Properties.PropertyNames) { foreach (string s in result.Properties[propName]) { summary.Append(" " + propName + ": " + s + " "); } } summary.Append(" "); } textBoxResults.Text = summary.ToString(); } } } private void InitializeComponent() { this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.buttonSearch = new System.Windows.Forms.Button(); this.label9 = new System.Windows.Forms.Label(); this.textBoxFilter = new System.Windows.Forms.TextBox(); this.label8 = new System.Windows.Forms.Label(); this.label7 = new System.Windows.Forms.Label(); this.listBoxProperties = new System.Windows.Forms.ListBox(); this.label6 = new System.Windows.Forms.Label(); this.buttonLoadProperties = new System.Windows.Forms.Button(); this.label5 = new System.Windows.Forms.Label(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.textBoxPassword = new System.Windows.Forms.TextBox(); this.textBoxUsername = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.textBoxHostname = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.textBoxResults = new System.Windows.Forms.TextBox(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.Location = new System.Drawing.Point(0, 0); this.splitContainer1.Name = "splitContainer1"; // // Panel1 // this.splitContainer1.Panel1.Controls.Add(this.buttonSearch); this.splitContainer1.Panel1.Controls.Add(this.label9); this.splitContainer1.Panel1.Controls.Add(this.textBoxFilter); this.splitContainer1.Panel1.Controls.Add(this.label8); this.splitContainer1.Panel1.Controls.Add(this.label7); this.splitContainer1.Panel1.Controls.Add(this.listBoxProperties); this.splitContainer1.Panel1.Controls.Add(this.label6); this.splitContainer1.Panel1.Controls.Add(this.buttonLoadProperties); this.splitContainer1.Panel1.Controls.Add(this.label5); this.splitContainer1.Panel1.Controls.Add(this.groupBox1); this.splitContainer1.Panel1.Controls.Add(this.textBoxHostname); this.splitContainer1.Panel1.Controls.Add(this.label2); this.splitContainer1.Panel1.Controls.Add(this.label1); // // Panel2 // this.splitContainer1.Panel2.Controls.Add(this.textBoxResults); this.splitContainer1.Size = new System.Drawing.Size(721, 550); this.splitContainer1.SplitterDistance = 370; this.splitContainer1.TabIndex = 0; this.splitContainer1.Text = "splitContainer1"; // // buttonSearch // this.buttonSearch.Location = new System.Drawing.Point(190, 489); this.buttonSearch.Name = "buttonSearch"; this.buttonSearch.TabIndex = 12; this.buttonSearch.Text = "Search"; this.buttonSearch.Click += new System.EventHandler(this.OnSearch); // // label9 // this.label9.AutoSize = true; this.label9.Location = new System.Drawing.Point(22, 489); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(98, 14); this.label9.TabIndex = 11; this.label9.Text = "5. Start the Search"; // // textBoxFilter // this.textBoxFilter.Location = new System.Drawing.Point(190, 445); this.textBoxFilter.Name = "textBoxFilter"; this.textBoxFilter.TabIndex = 10; this.textBoxFilter.Text = "(objectClass=user)"; // // label8 // this.label8.AutoSize = true; this.label8.Location = new System.Drawing.Point(22, 452); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(33, 14); this.label8.TabIndex = 9; this.label8.Text = "Filter:"; // // label7 // this.label7.AutoSize = true; this.label7.Location = new System.Drawing.Point(22, 420); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(127, 14); this.label7.TabIndex = 8; this.label7.Text = "4. Enter the LDAP Filter:"; // // listBoxProperties // this.listBoxProperties.FormattingEnabled = true; this.listBoxProperties.Location = new System.Drawing.Point(190, 289); this.listBoxProperties.Name = "listBoxProperties"; this.listBoxProperties.Size = new System.Drawing.Size(120, 95); this.listBoxProperties.TabIndex = 7; // // label6 // this.label6.AutoSize = true; this.label6.Location = new System.Drawing.Point(22, 289); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(129, 27); this.label6.TabIndex = 6; this.label6.Text = "3. Choose the Properties to Display"; // // buttonLoadProperties // this.buttonLoadProperties.Location = new System.Drawing.Point(190, 238); this.buttonLoadProperties.Name = "buttonLoadProperties"; this.buttonLoadProperties.Size = new System.Drawing.Size(116, 23); this.buttonLoadProperties.TabIndex = 5; this.buttonLoadProperties.Text = "Load Properties"; this.buttonLoadProperties.Click += new System.EventHandler(this.OnLoadProperties); // // label5 // this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(29, 238); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(118, 14); this.label5.TabIndex = 4; this.label5.Text = "2. Load the Properties:"; // // groupBox1 // this.groupBox1.Controls.Add(this.textBoxPassword); this.groupBox1.Controls.Add(this.textBoxUsername); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.label3); this.groupBox1.Location = new System.Drawing.Point(22, 115); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(304, 100); this.groupBox1.TabIndex = 3; this.groupBox1.TabStop = false; this.groupBox1.Text = "Logon [optional]"; // // textBoxPassword // this.textBoxPassword.Location = new System.Drawing.Point(168, 60); this.textBoxPassword.Name = "textBoxPassword"; this.textBoxPassword.PasswordChar = '*'; this.textBoxPassword.Size = new System.Drawing.Size(116, 20); this.textBoxPassword.TabIndex = 3; // // textBoxUsername // this.textBoxUsername.Location = new System.Drawing.Point(168, 23); this.textBoxUsername.Name = "textBoxUsername"; this.textBoxUsername.Size = new System.Drawing.Size(116, 20); this.textBoxUsername.TabIndex = 2; // // label4 // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(7, 60); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(57, 14); this.label4.TabIndex = 1; this.label4.Text = "Password:"; // // label3 // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(7, 29); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(60, 14); this.label3.TabIndex = 0; this.label3.Text = "Username:"; // // textBoxHostname // this.textBoxHostname.Location = new System.Drawing.Point(190, 70); this.textBoxHostname.Name = "textBoxHostname"; this.textBoxHostname.Size = new System.Drawing.Size(136, 20); this.textBoxHostname.TabIndex = 2; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(22, 70); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(145, 14); this.label2.TabIndex = 1; this.label2.Text = "Domain Controller [optional]"; // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(22, 31); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(254, 14); this.label1.TabIndex = 0; this.label1.Text = "1. Enter Domain Controller and Logon Information"; // // textBoxResults // this.textBoxResults.Dock = System.Windows.Forms.DockStyle.Fill; this.textBoxResults.Location = new System.Drawing.Point(0, 0); this.textBoxResults.Multiline = true; this.textBoxResults.Name = "textBoxResults"; this.textBoxResults.Size = new System.Drawing.Size(347, 550); this.textBoxResults.TabIndex = 0; // // UserSearchForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(721, 550); this.Controls.Add(this.splitContainer1); this.Name = "UserSearchForm"; this.Text = "User Search"; this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel1.PerformLayout(); this.splitContainer1.Panel2.ResumeLayout(false); this.splitContainer1.Panel2.PerformLayout(); this.splitContainer1.ResumeLayout(false); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.ResumeLayout(false); } private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.TextBox textBoxHostname; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.TextBox textBoxUsername; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox textBoxPassword; private System.Windows.Forms.Button buttonLoadProperties; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label6; private System.Windows.Forms.ListBox listBoxProperties; private System.Windows.Forms.TextBox textBoxFilter; private System.Windows.Forms.Label label8; private System.Windows.Forms.Label label7; private System.Windows.Forms.Button buttonSearch; private System.Windows.Forms.Label label9; private System.Windows.Forms.TextBox textBoxResults; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new UserSearchForm()); } }