public MultiItemsGeneralEditPage(MPContainer parent) { this.pageID = "MultiItemsGeneralEditPage"; InitializeComponent(); SetPageTitle("General"); this.parentDlg = parent as MultiItemPropertiesDlg; }
public UserMultiselectGeneralEditPage(MPContainer parent) { this.pageID = "UserMultiSelectProperities"; InitializeComponent(); SetPageTitle("General"); this.parentDlg = parent as MultiItemPropertiesDlg; //InitializeComponent(); }
/// <summary> /// Event raises when we click on any contextmenu item /// And then performs the specified action /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void cm_OnMenuClick(object sender, EventArgs e) { // assure that the sender is a MenuItem MenuItem mi = sender as MenuItem; //Help if (mi != null && mi.Text.Equals("Help")) { ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = true; psi.FileName = CommonResources.GetString("LAC_Help"); psi.Verb = "open"; psi.WindowStyle = ProcessWindowStyle.Normal; Process.Start(psi); return; } ADUCDirectoryNode dirnode = mi.Tag as ADUCDirectoryNode; if (dirnode == null && lvChildNodes.SelectedItems.Count == 1) { return; } int ret = -1; if (dirnode != null) { string[] attrs = { null }; List<LdapEntry> ldapEntries = null; ret = dirnode.LdapContext.ListChildEntriesSynchronous( dirnode.DistinguishedName, Likewise.LMC.LDAP.Interop.LdapAPI.LDAPSCOPE.ONE_LEVEL, "(objectClass=*)", attrs, false, out ldapEntries); if (ret == (int)Likewise.LMC.Utilities.ErrorCodes.LDAPEnum.LDAP_NO_SUCH_OBJECT) { return; } } //Refresh the dirnode (redo a ldap query at the current dirnode) if (mi != null && mi.Text.Equals("Refresh")) { if (dirnode != null) { dirnode.Refresh(); if (dirnode.Nodes.Count == 0) { return; } dirnode.IsModified = true; base.treeNode = dirnode; } } //Add New User if (mi != null && mi.Text.Equals("User")) { if (dirnode != null) { AddNewUser(dirnode); } } //Add new computer if (mi != null && mi.Text.Equals("Computer")) { if (dirnode != null) { AddNewComputer(dirnode, null); } } //Add new group if (mi != null && mi.Text.Equals("Group")) { if (dirnode != null) { AddNewGroup(dirnode); } } //Add new OU if (mi != null && mi.Text.Equals("Organizational Unit")) { if (dirnode != null) { AddNewOU(dirnode); } } //Add a generic Object if (mi != null && mi.Text.Equals("Other")) { if (dirnode != null) { AddNewObject(dirnode); } } //Delete an object (user, computer, group and OU if (mi != null && mi.Text.Equals("Delete")) { LACTreeNode parentNode = null; ret = -1; DialogResult dlg = container.ShowMessage( "Are you sure you want to delete this object(s)?", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (dlg == DialogResult.Yes) { if (mi.Tag != null) { parentNode = dirnode.Parent == null ? treeNode as ADUCDirectoryNode : dirnode.Parent as ADUCDirectoryNode; ret = DODeleteADObjects(dirnode); } else { parentNode = (LACTreeNode)treeNode; foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { ret = DODeleteADObjects(dn); if (ret != 0) { break; } } } } if (ret == 0) { int length = CommonResources.GetString("Caption_Console").Length + 24; string msgToDisplay = "Object(s) is deleted!"; if (length > msgToDisplay.Length) { msgToDisplay = msgToDisplay.PadRight(length - msgToDisplay.Length, '�'); } container.ShowError(msgToDisplay); if ((parentNode != null) && (parentNode is ADUCDirectoryNode)) { ADUCPlugin plugin = treeNode.Plugin as ADUCPlugin; ADUCDirectoryNode parentdirnode = parentNode as ADUCDirectoryNode; parentdirnode.Refresh(); parentdirnode.IsModified = true; base.treeNode = parentdirnode; } } } } //Copy ... if (mi != null && mi.Text.Equals("Copy...")) { if (dirnode != null) { string obj_type = dirnode.ObjectClass; if (obj_type.Equals("top", StringComparison.InvariantCultureIgnoreCase) || obj_type.Equals("user", StringComparison.InvariantCultureIgnoreCase)) { string sText = "Copy Object - User"; DirectoryContext dirContext = dirnode.LdapContext; try { //first obtain the current userAccountControl value DirectoryEntry de = new DirectoryEntry(string.Format("LDAP://{0}/{1}", dirContext.DomainName, dirnode.DistinguishedName)); int userCtrlInt = Convert.ToInt32(de.Properties["userAccountControl"].Value.ToString()); long pwdLastSet = Convert.ToInt64(de.Properties["pwdLastSet"].Value.ToString()); string copyfrom = "Copy from: " + de.Properties["name"].Value.ToString(); bool bAcountDisable = false, bNeverExpiresPwd = false, bMustChangePwd = false, bUserCannotChange = false; string userCtrlBinStr = UserGroupUtils.DecimalToBase(userCtrlInt, 2); if (userCtrlBinStr.Length >= 10 && userCtrlBinStr[userCtrlBinStr.Length - 10] == '1' && pwdLastSet == 0) { bMustChangePwd = true; } if (userCtrlBinStr.Length >= 17 && userCtrlBinStr[userCtrlBinStr.Length - 17] == '1') { bNeverExpiresPwd = true; bMustChangePwd = false; } if (userCtrlBinStr.Length >= 10 && userCtrlBinStr[userCtrlBinStr.Length - 7] == '1' && pwdLastSet != 0) { bUserCannotChange = true; } if (userCtrlBinStr.Length >= 10 && userCtrlBinStr[userCtrlBinStr.Length - 2] == '1') { bAcountDisable = true; } ADUserAddDlg f = new ADUserAddDlg(base.container, this, sText, treeNode as ADUCDirectoryNode, bAcountDisable, bNeverExpiresPwd, bMustChangePwd, bUserCannotChange, copyfrom); f.ShowDialog(this); //the user information is gather in f.userInfo before "finish" button is clicked if (f.userInfo.commit == true) { Hashtable htUserInfo = new Hashtable(); if (f.userInfo.fName != "") { htUserInfo.Add("givenName", f.userInfo.fName); } if (f.userInfo.initials != "") { htUserInfo.Add("initials", f.userInfo.initials); } if (f.userInfo.lName != "") { htUserInfo.Add("sn", f.userInfo.lName); } if (f.userInfo.fullName != "") { htUserInfo.Add("cn", f.userInfo.fullName); htUserInfo.Add("displayName", f.userInfo.fullName); htUserInfo.Add("name", f.userInfo.fullName); } if (f.userInfo.logonName != "") { htUserInfo.Add("userPrincipalName", f.userInfo.logonName); } if (f.userInfo.userPrelogonname != "") { htUserInfo.Add("sAMAccountName", f.userInfo.userPrelogonname); } //use logon name to set "sAMAaccountname" AddNewObj_User(treeNode as ADUCDirectoryNode, htUserInfo, false, f.userInfo.passWord, f.userInfo.bAcountDisable, f.userInfo.bNeverExpiresPwd, f.userInfo.bMustChangePwd, f.userInfo.bCannotChangePwd); } } catch (Exception ex) { Logger.LogException("ADUCPage.cm_OnMenuClick", ex); } } } } //Move... if (mi != null && mi.Text.Equals("Move...")) { DoMoveObjectWork(dirnode); } //Rename if (mi != null && mi.Text.Equals("Rename")) { if (dirnode != null) { DirectoryContext dirContext = dirnode.LdapContext; string obj_type = dirnode.ObjectClass; if (obj_type.Equals("top", StringComparison.InvariantCultureIgnoreCase) || obj_type.Equals("user", StringComparison.InvariantCultureIgnoreCase)) { LACTreeNode parentnode = dirnode.Parent == null ? treeNode as LACTreeNode : dirnode.Parent as LACTreeNode; ADUCDirectoryNode parentdirnode = parentnode as ADUCDirectoryNode; ADRenameUserDlg f = new ADRenameUserDlg(dirnode, parentdirnode.DistinguishedName); f.ShowDialog(this); if (f.renameUserInfo.commit == true) { string basedn = dirnode.DistinguishedName; string newdn = f.renameUserInfo.fullName; newdn = string.Concat(CN_PREFIX, newdn); ret = dirContext.RenameSynchronous(basedn, newdn, null); if (ret == 0) { Hashtable htUserInfo = new Hashtable(); if (f.renameUserInfo.fName != "") { htUserInfo.Add("givenName", f.renameUserInfo.fName); } if (f.renameUserInfo.initials != "") { htUserInfo.Add("initials", f.renameUserInfo.initials); } if (f.renameUserInfo.lName != "") { htUserInfo.Add("sn", f.renameUserInfo.lName); } if (f.renameUserInfo.displayName != "") { htUserInfo.Add("displayName", f.renameUserInfo.displayName); } if (f.renameUserInfo.logonName != "") { htUserInfo.Add("userPrincipalName", f.renameUserInfo.logonName); } if (f.renameUserInfo.userPrelogonname != "") { htUserInfo.Add("sAMAccountName", f.renameUserInfo.userPrelogonname); } string cn = string.Empty; string smamAccount = string.Empty; List<LDAPMod> userinfo = new List<LDAPMod>(); foreach (string key in htUserInfo.Keys) { string[] objectClass_values = new string[] { htUserInfo[key].ToString(), null }; LDAPMod ldapMod_Info = new LDAPMod((int)LDAPMod.mod_ops.LDAP_MOD_REPLACE, key, objectClass_values); userinfo.Add(ldapMod_Info); } LDAPMod[] renameinfo = new LDAPMod[userinfo.Count]; userinfo.CopyTo(renameinfo); string dn = string.Concat(newdn, DN_SEPARATOR); string ou = parentdirnode.DistinguishedName; dn = string.Concat(dn, ou); ret = dirContext.ModifySynchronous(dn, renameinfo); if (ret == 0) { int length = CommonResources.GetString("Caption_Console").Length + 24; string msgToDisplay = "Object is renamed!"; if (length > msgToDisplay.Length) { msgToDisplay = msgToDisplay.PadRight(length - msgToDisplay.Length, '�'); } container.ShowMessage(msgToDisplay); } else { container.ShowError(ErrorCodes.LDAPString(ret)); return; } } else { container.ShowError(ErrorCodes.LDAPString(ret)); return; } if (parentdirnode != null) { parentdirnode.Refresh(); parentdirnode.IsModified = true; base.treeNode = parentdirnode; } } } else { ADRenameDlg f = new ADRenameDlg(base.container, this, dirnode.Text, dirnode.ObjectClass); f.ShowDialog(this); //OK clicked if (f.rename != null) { //the following portion of code uses openldap "ldap_rename_s" string basedn = dirnode.DistinguishedName; LACTreeNode parentnode = dirnode.Parent == null ? treeNode as LACTreeNode : dirnode.Parent as LACTreeNode; ADUCDirectoryNode parentdirnode = parentnode as ADUCDirectoryNode; string newdn = f.rename; //rename an object if (obj_type.Equals("organizationalUnit", StringComparison.InvariantCultureIgnoreCase)) { newdn = string.Concat(OU_PREFIX, newdn); } else { newdn = string.Concat(CN_PREFIX, newdn); //Renaming any object(user, group, computer, container etc...) } ret = dirContext.RenameSynchronous(basedn, newdn, null); if (ret == 0) { int length = CommonResources.GetString("Caption_Console").Length + 24; string msgToDisplay = "Object is renamed!"; if (length > msgToDisplay.Length) { msgToDisplay = msgToDisplay.PadRight(length - msgToDisplay.Length, '�'); } container.ShowMessage(msgToDisplay); } else { container.ShowError(ErrorCodes.LDAPString(ret)); return; } if (parentdirnode != null) { parentdirnode.Refresh(); parentdirnode.IsModified = true; base.treeNode = parentdirnode; } } }//if f.name == null, there is no rename performed } } //in Computer Or user if (mi != null && mi.Text.Equals("Disable Account")) { ret = -1; ADUCDirectoryNode parentNode = null; if (mi.Tag != null) { parentNode = dirnode.Parent == null ? treeNode as ADUCDirectoryNode : dirnode.Parent as ADUCDirectoryNode; string obj_type = dirnode.ObjectClass; DialogResult dlg = MessageBox.Show(this, "Are you sure you want to disable this account?", CommonResources.GetString("Caption_Console"), MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); if (dlg == DialogResult.Yes) { if (obj_type.Equals("user", StringComparison.InvariantCultureIgnoreCase)) { dlg = DialogResult.Yes; } if (obj_type.Equals("computer", StringComparison.InvariantCultureIgnoreCase)) { dlg = MessageBox.Show(this, "Disabling the computer account " + dirnode.Text + " prevents users on that computer from logging on to this domain\n " + "Do you want to disable this computer account?", CommonResources.GetString("Caption_Console"), MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); } if (dlg == DialogResult.Yes || dlg == DialogResult.OK) { ret = DoDisableADObjects(dirnode); } if (ret == 0) { MessageBox.Show(this, string.Format("Object {0} has been disabled.", dirnode.Text), CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Information); } } } else { bool bAlertMsg = true; parentNode = treeNode as ADUCDirectoryNode; foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { if (!dn.IsDisabled) { bAlertMsg = false; break; } } } if (bAlertMsg) { MessageBox.Show(this, "All of the selected objects are disabled", CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { ret = DoDisableADObjects(dn); if (ret != 0) { return; } } } if (ret == 0) { MessageBox.Show(this, string.Format("All of the selected objects have been disabled."), CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Information); } } if (ret == 0) { if (parentNode != null) { parentNode.Refresh(); parentNode.IsModified = true; base.treeNode = parentNode; } } else if (ret != -1) { string sMsg = ErrorCodes.LDAPString(ret); container.ShowMessage(sMsg); } } //Enable Account if (mi != null && mi.Text.Equals("Enable Account")) { ret = -1; ADUCDirectoryNode parentNode = null; if (mi.Tag != null) { parentNode = dirnode.Parent == null ? treeNode as ADUCDirectoryNode : dirnode.Parent as ADUCDirectoryNode; DialogResult dlg = MessageBox.Show(this, "Are you sure you want to enable this account?", CommonResources.GetString("Caption_Console"), MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); if (dlg == DialogResult.Yes) { ret = DoEnableAccount(dirnode); if (ret == 0) { MessageBox.Show(this, string.Format("Object {0} has been enabled.", dirnode.Text), CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Information); } } } else { bool bAlertMsg = true; parentNode = treeNode as ADUCDirectoryNode; foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { if (dn.IsDisabled) { bAlertMsg = false; break; } } } if (bAlertMsg) { MessageBox.Show(this, "All of the selected objects are enabled", CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { ret = DoEnableAccount(dn); if (ret != 0) { return; } } } if (ret == 0) { MessageBox.Show(this, string.Format("All of the selected objects have been enabled."), CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Information); } } if (ret == 0) { if (parentNode != null) { parentNode.Refresh(); parentNode.IsModified = true; base.treeNode = parentNode; } } else if (ret == -2) { string sMsg = string.Format("Windows cannot enable object {0} becuase\n" + "Unanle to update the password. The value provided for the new passoword does not meeth\n" + "length, complexity, or history requirement of the domain", dirnode.Text); MessageBox.Show(this, sMsg, CommonResources.GetString("Caption_Console"), MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (ret != -1) { string sMsg = ErrorCodes.LDAPString(ret); container.ShowMessage(sMsg); } } //in User only if (mi != null && mi.Text.Equals("Reset Password")) { if (dirnode != null) { DirectoryContext dirContext = dirnode.LdapContext; //first obtain the current userAccountControl value DirectoryEntry de = new DirectoryEntry(string.Format("LDAP://{0}/{1}", dirContext.DomainName, dirnode.DistinguishedName)); int userCtrlInt = int.Parse(de.Properties["userAccountControl"].Value.ToString()); int useraccountCtr_decimalVal = 512; bool bNeverExpiresPwd = false; ret = 0; string userCtrlBinStr = UserGroupUtils.DecimalToBase(userCtrlInt, 2); if ((userCtrlBinStr.Length >= 17 && userCtrlBinStr[userCtrlBinStr.Length - 17] == '1') || (userCtrlBinStr.Length >= 10 && userCtrlBinStr[userCtrlBinStr.Length - 7] == '1')) { bNeverExpiresPwd = true; } ResetPassword f = new ResetPassword(base.container, this, bNeverExpiresPwd, dirnode.Text); if (f.ShowDialog(this) == DialogResult.OK) { //first, change the password //first obtain the current userAccountControl value //DirectoryEntry de = new DirectoryEntry(string.Format("LDAP://{0}/{1}", dirContext.DomainName, dirnode.DistinguishedName)); string username = de.Properties["sAMAccountName"].Value.ToString(); if (String.IsNullOrEmpty(f.passwordinfo.password)) { return; } bool retValue = false; try { ADUCPlugin plugin = pi as ADUCPlugin; Hostinfo hn = ctx as Hostinfo; retValue = !Convert.ToBoolean(LUGAPI.NetChangePassword(hn.domainName, username, f.passwordinfo.password)); } catch (Exception) { retValue = false; } List<LDAPMod> attrlist = new List<LDAPMod>(); //second, we need to set up to make sure that user shall change his password next time he logs in. if (f.passwordinfo.MustChangePwNextLogon && !bNeverExpiresPwd && retValue) { //int userCtrlInt = (int)de.Properties["msDS-User-Account-Control-Computed"].Value; //userCtrlInt = Convert.ToInt32(de.Properties["userAccountControl"].Value.ToString()); if (userCtrlInt != 546) { string newUserCtrl_val = Convert.ToString(useraccountCtr_decimalVal + 8388608); string[] userControl_values = { newUserCtrl_val, null }; LDAPMod userControl_Info = new LDAPMod((int)LDAPMod.mod_ops.LDAP_MOD_REPLACE, "userAccountControl", userControl_values); attrlist.Add(userControl_Info); } string[] pwdLastSet_values = { "0", null }; LDAPMod pwdLastSet_attr = new LDAPMod((int)LDAPMod.mod_ops.LDAP_MOD_REPLACE, "pwdLastSet", pwdLastSet_values); attrlist.Add(pwdLastSet_attr); } if (attrlist.Count != 0) { LDAPMod[] attrinfo = new LDAPMod[attrlist.Count]; attrlist.CopyTo(attrinfo); ret = dirnode.LdapContext.ModifySynchronous(dirnode.DistinguishedName, attrinfo); } if (retValue && ret == 0) { int length = CommonResources.GetString("Caption_Console").Length + 28; string msgToDisplay = "Password has been reset successfully."; if (length > msgToDisplay.Length) { msgToDisplay = msgToDisplay.PadRight(length - msgToDisplay.Length, '�'); } container.ShowMessage(msgToDisplay); return; } else { container.ShowError("Failed to reset password."); return; } } else { return; } } } //Add to Group if (mi != null && mi.Text.Equals("Add to Group")) { if (dirnode == null) { dirnode = lvChildNodes.SelectedItems[0].Tag as ADUCDirectoryNode; } string sLdapPath = string.Format("LDAP://{0}/{1}", dirnode.LdapContext.DomainName, dirnode.DistinguishedName); string sProtocol; string sServer; string sCNs; string sDCs; System.DirectoryServices.SDSUtils.CrackPath(sLdapPath, out sProtocol, out sServer, out sCNs, out sDCs); System.DirectoryServices.Misc.DsPicker f = new System.DirectoryServices.Misc.DsPicker(); f.SetData(System.DirectoryServices.Misc.DsPicker.DialogType.SELECT_GROUPS, sProtocol, sServer, sDCs, false); if (f.waitForm != null && f.waitForm.bIsInterrupted) { return; } if (f.ShowDialog(this) == DialogResult.OK) { List<ListViewItem> itemlist = new List<ListViewItem>(); ADUCDirectoryNode parentNode = null; string sDN = f.ADobjectsArray[0].de.Properties["distinguishedName"].Value as string; if (mi.Tag != null) { parentNode = dirnode.Parent == null ? treeNode as ADUCDirectoryNode : dirnode.Parent as ADUCDirectoryNode; ret = DoAddtoGroup(dirnode, sDN, true, f.ADobjectsArray[0].Name, ref itemlist); if (ret == 0) { container.ShowMessage("The Add to Group operation was successfully completed"); } } else { parentNode = treeNode as ADUCDirectoryNode; foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { ret = DoAddtoGroup(dn, sDN, false,null, ref itemlist); } } if (itemlist != null && itemlist.Count != 0) { ADAddtoGroupErrorEditor errorDailog = new ADAddtoGroupErrorEditor(itemlist); errorDailog.ShowDialog(this); } else if (ret == 0) { container.ShowMessage("The Add to Group operation was successfully completed"); } } if (ret != 0 && ret != -1) { string sMsg = ErrorCodes.LDAPString(ret); container.ShowError(sMsg); return; } } } //Reset Computer Account if (mi != null && mi.Text.Equals("Reset Account")) { DirectoryContext dirContext = dirnode.LdapContext; DirectoryEntry de = new DirectoryEntry(string.Format("LDAP://{0}/{1}", dirContext.DomainName, dirnode.DistinguishedName)); int iPrimaryGroupID = Convert.ToInt32(de.Properties["primaryGroupID"].Value.ToString()); // string DCResetacc = de.Properties["cn"].Value.ToString() + "$"; if (iPrimaryGroupID == 516) { string sMsg = string.Format( "Server {0} is a domain controller.You cannot reset " + "the password on this object.", dirnode.Text); MessageBox.Show(sMsg); return; } if (dirnode != null) { DialogResult dlg = MessageBox.Show(this, "Are you sure you want to reset this computer account?", CommonResources.GetString("Caption_Console"), MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); if (dlg == DialogResult.Yes) { string computername = de.Properties["sAMAccountName"].Value.ToString(); //It will give the DistinguishedName for the computer is nothing but getting 'cn' attribute string compResetpawd = de.Properties["cn"].Value.ToString() + "$"; //dirnode.DistinguishedName.Split(',')[0].Substring(3) + "$"; try { ADUCPlugin plugin = pi as ADUCPlugin; Hostinfo hn = ctx as Hostinfo; bool retValue = !Convert.ToBoolean(LUGAPI.NetChangePassword(hn.domainName, computername, compResetpawd)); if (retValue) { string sMsg = string.Format( "Account {0} was successfully reset.", dirnode.Text); container.ShowMessage(sMsg); return; } else { string sMsg = string.Format( "Resetting account for {0} was unsuccessful.", dirnode.Text); container.ShowMessage(sMsg); return; } } catch (Exception ex) { string sMsg = string.Format( "Resetting account for {0} was unsuccessful. Becuase {1}", dirnode.Text, ex.Message); container.ShowError(sMsg); Logger.LogException("ADUCPage", ex); return; } } } } //Refreshing the Aduc page after performing any of the aduc functionalities RefreshPluginPage(); //Properties... if (mi != null && mi.Text.Equals("Properties")) { if (lvChildNodes.SelectedItems.Count > 1) { ADUCPlugin plugin = treeNode.Plugin as ADUCPlugin; ADUCDirectoryNode dnNode = treeNode as ADUCDirectoryNode; List<object> dirnodes = new List<object>(); bool bIsuserType = false; bool bIsgroupType = false; bool bIsOUType = false; bool bIsOthers = false; ADObjectType = string.Empty; foreach (ListViewItem item in lvChildNodes.SelectedItems) { ADUCDirectoryNode dn = item.Tag as ADUCDirectoryNode; if (dn != null) { if (dn.ObjectClass.Trim().Equals("user", StringComparison.InvariantCultureIgnoreCase)) { bIsuserType = true; } else if (dn.ObjectClass.Trim().Equals("group", StringComparison.InvariantCultureIgnoreCase)) { bIsgroupType = true; } else if (dn.ObjectClass.Trim().Equals("organizationalUnit", StringComparison.InvariantCultureIgnoreCase)) { bIsOUType = true; } else { bIsOthers = true; ADObjectType = string.Empty; } dirnodes.Add(dn); } } if (bIsgroupType && !bIsOthers && !bIsuserType && !bIsOUType) { ADObjectType = "group"; } else if (bIsuserType && !bIsOthers && !bIsgroupType && !bIsOUType) { ADObjectType = "user"; } else if (bIsOUType && !bIsOthers && !bIsuserType && !bIsgroupType) { ADObjectType = "organizationalUnit"; } MultiItemPropertiesDlg propertiesDlg = new MultiItemPropertiesDlg(base.container, this, base.pi as ADUCPlugin, dirnodes); propertiesDlg.SetData(plugin.HostInfo.creds, plugin.HostInfo.hostName, "", dnNode, dnNode.LdapContext.SchemaCache); propertiesDlg.Show(); } else { DoPropertyPagesWork(dirnode); } } }