/// <summary> /// Constructs the modifications associated with this request. /// </summary> /// <returns> /// an array of LdapModification objects. /// </returns> public LdapModification[] GetModifications() { // Get the RFC request object for this request var req = (RfcModifyRequest)Asn1Object.GetRequest(); // get beginning sequenceOf modifications var seqof = req.Modifications; var mods = seqof.ToArray(); var modifications = new LdapModification[mods.Length]; // Process each modification for (var m = 0; m < mods.Length; m++) { // Each modification consists of a mod type and a sequence // containing the attr name and a set of values var opSeq = (Asn1Sequence)mods[m]; if (opSeq.Size() != 2) { throw new Exception("LdapModifyRequest: modification " + m + " is wrong size: " + opSeq.Size()); } // Contains operation and sequence for the attribute var opArray = opSeq.ToArray(); var asn1Op = (Asn1Enumerated)opArray[0]; // get the operation var op = asn1Op.IntValue(); var attrSeq = (Asn1Sequence)opArray[1]; var attrArray = attrSeq.ToArray(); var aname = (RfcAttributeDescription)attrArray[0]; var name = aname.StringValue(); var avalue = (Asn1SetOf)attrArray[1]; var valueArray = avalue.ToArray(); var attr = new LdapAttribute(name); for (var v = 0; v < valueArray.Length; v++) { var rfcV = (RfcAttributeValue)valueArray[v]; attr.AddValue(rfcV.ByteValue()); } modifications[m] = new LdapModification(op, attr); } return(modifications); }