public void UpdateListAttribute(string key, string attributeName, string value, DirectoryAttributeOperation operation) { using (LdapConnection conn = GetConnection()) { SearchResultEntry entry = Load(key, conn); if (entry == null) { return; } DirectoryAttributeModification mod = new DirectoryAttributeModification(); mod.Name = attributeName; mod.Operation = DirectoryAttributeOperation.Replace; mod.AddRange(entry.Attributes[attributeName].GetValues(typeof(string))); if (operation == DirectoryAttributeOperation.Add) { mod.Add(value); } else { for (int i = 0; i < mod.Count; i++) { if (mod[i].ToString().Equals(value, StringComparison.InvariantCultureIgnoreCase)) { mod.RemoveAt(i); break; } } } ModifyRequest mr = new ModifyRequest(key, mod); conn.SendRequest(mr); } }
public static DirectoryAttributeModification CreateModification(this DirectoryAttribute item, DirectoryAttributeOperation operation, bool forceValue = false) { var result = new DirectoryAttributeModification { Name = item.Name, Operation = operation }; // Delete needs a value here!? if (operation != DirectoryAttributeOperation.Delete || forceValue) { result.AddRange(item.GetValues(typeof(byte[]))); } return(result); }