using System; namespace Unosquare.Swan.Networking.Ldap { /// /// A single add, delete, or replace operation to an LdapAttribute. /// An LdapModification contains information on the type of modification /// being performed, the name of the attribute to be replaced, and the new /// value. Multiple modifications are expressed as an array of modifications, /// i.e., LdapModification[]. /// An LdapModification or an LdapModification array enable you to modify /// an attribute of an Ldap entry. The entire array of modifications must /// be performed by the server as a single atomic operation in the order they /// are listed. No changes are made to the directory unless all the operations /// succeed. If all succeed, a success result is returned to the application. /// It should be noted that if the connection fails during a modification, /// it is indeterminate whether the modification occurred or not. /// There are three types of modification operations: Add, Delete, /// and Replace. /// Add: Creates the attribute if it doesn't exist, and adds /// the specified values. This operation must contain at least one value, and /// all values of the attribute must be unique. /// Delete: Deletes specified values from the attribute. If no /// values are specified, or if all existing values of the attribute are /// specified, the attribute is removed. Mandatory attributes cannot be /// removed. /// Replace: Creates the attribute if necessary, and replaces /// all existing values of the attribute with the specified values. /// If you wish to keep any existing values of a multi-valued attribute, /// you must include these values in the replace operation. /// A replace operation with no value will remove the entire attribute if it /// exists, and is ignored if the attribute does not exist. /// Additional information on Ldap modifications is available in section 4.6 /// of. rfc2251.txt /// /// /// public sealed class LdapModification : LdapMessage { /// /// Initializes a new instance of the class. /// Specifies a modification to be made to an attribute. /// /// The op. /// The attribute to modify. public LdapModification(LdapModificationOp op, LdapAttribute attr) { this.Op = op; this.Attribute = attr; } /// /// Initializes a new instance of the class. /// /// The op. /// Name of the attribute. /// The attribute value. public LdapModification(LdapModificationOp op, String attrName, String attrValue) : this(op, new LdapAttribute(attrName, attrValue)) { // placeholder } /// /// Returns the attribute to modify, with any existing values. /// /// /// The attribute. /// public LdapAttribute Attribute { get; } /// /// Returns the type of modification specified by this object. /// /// /// The op. /// public LdapModificationOp Op { get; } } }