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