Beispiel #1
0
        private ModifyRequest AddAttributeModifications(ExSearchResultEntry entry, SortedList <string, DirectoryAttribute> attributes, ModifyRequest modificationRequest)
        {
            DirectoryAttributeModification directoryAttributeModification = null;

            foreach (KeyValuePair <string, DirectoryAttribute> keyValuePair in attributes)
            {
                directoryAttributeModification           = new DirectoryAttributeModification();
                directoryAttributeModification.Name      = keyValuePair.Key;
                directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
                foreach (object obj in keyValuePair.Value)
                {
                    if (obj is byte[])
                    {
                        directoryAttributeModification.Add((byte[])obj);
                    }
                    else
                    {
                        directoryAttributeModification.Add((string)obj);
                    }
                    if (ExTraceGlobals.SynchronizationJobTracer.IsTraceEnabled(TraceType.DebugTrace))
                    {
                        this.TraceAttributeValue(keyValuePair.Value);
                    }
                }
                modificationRequest.Modifications.Add(directoryAttributeModification);
            }
            directoryAttributeModification           = new DirectoryAttributeModification();
            directoryAttributeModification.Name      = "msExchEdgeSyncSourceGuid";
            directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
            directoryAttributeModification.Add((byte[])entry.Attributes["objectGUID"][0]);
            modificationRequest.Modifications.Add(directoryAttributeModification);
            return(modificationRequest);
        }
Beispiel #2
0
        public virtual void SetAttributeValues(Guid objectGuid, IEnumerable <KeyValuePair <string, object> > attributes)
        {
            if (this.connection == null)
            {
                throw new InvalidOperationException("AD connection has not been initialized");
            }
            ModifyRequest modifyRequest = new ModifyRequest();

            modifyRequest.DistinguishedName = EhfADAdapter.CreateDNForObjectGuid(objectGuid);
            foreach (KeyValuePair <string, object> keyValuePair in attributes)
            {
                DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();
                directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
                directoryAttributeModification.Name      = keyValuePair.Key;
                if (keyValuePair.Value != null)
                {
                    string text = keyValuePair.Value as string;
                    if (text != null)
                    {
                        directoryAttributeModification.Add(text);
                    }
                    else
                    {
                        byte[] array = keyValuePair.Value as byte[];
                        if (array == null)
                        {
                            throw new ArgumentException("Value of the attribute should be of type String or Byte[]", "attributesAndValues");
                        }
                        directoryAttributeModification.Add(array);
                    }
                }
                modifyRequest.Modifications.Add(directoryAttributeModification);
            }
            this.connection.SendRequest(modifyRequest);
        }
 public override void UpdateModifyRequestForTarget(TenantRelocationSyncTranslator translator, DirectoryAttribute sourceValue, ref DirectoryAttributeModification mod)
 {
     object[] values = sourceValue.GetValues(typeof(T));
     foreach (object obj in values)
     {
         Guid guid = this.GetGuid(obj);
         if (guid.Equals(EmailAddressPolicy.PolicyGuid) || Guid.Empty.Equals(guid))
         {
             if (this.IsString)
             {
                 mod.Add((string)obj);
             }
             else
             {
                 mod.Add((byte[])obj);
             }
         }
         else
         {
             DistinguishedNameMapItem distinguishedNameMapItem = translator.Mappings.LookupByCorrelationGuid(guid);
             if (distinguishedNameMapItem == null)
             {
                 this.AddValue(mod, guid);
             }
             else
             {
                 this.AddValue(mod, distinguishedNameMapItem.TargetDN.ObjectGuid);
             }
         }
     }
     mod.Name      = sourceValue.Name;
     mod.Operation = DirectoryAttributeOperation.Replace;
 }
 private void AddValue(DirectoryAttributeModification mod, Guid v)
 {
     if (this.IsString)
     {
         mod.Add(v.ToString());
         return;
     }
     mod.Add(v.ToByteArray());
 }
        protected void SetAttribute(DirectoryAttributeModificationCollection modifications, string name, string property, string value)
        {
            if (!Changes.ContainsKey(property))
            {
                return;
            }

            DirectoryAttributeModification m = new DirectoryAttributeModification();

            m.Add(value);
            m.Name = name;
            switch (Changes[property])
            {
            case ChangeType.Add:
                m.Operation = DirectoryAttributeOperation.Add;
                break;

            case ChangeType.Remove:
                m.Operation = DirectoryAttributeOperation.Delete;
                break;

            case ChangeType.Modify:
                m.Operation = DirectoryAttributeOperation.Replace;
                break;
            }

            modifications.Add(m);
        }
        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);
            }
        }
Beispiel #7
0
        internal DirectoryResponse SetBacklinkAttribute(string linkedDN, string backLinkDN, string attributeName)
        {
            var linked = GetObjectByDn(linkedDN, attributeName);

            IEnumerable <string> values = new List <string>();

            if (linked.Properties.TryGetValue(attributeName, out var _values))
            {
                values = _values as IEnumerable <string>;
            }

            if (!values.Contains(backLinkDN))
            {
                var modifyMemebrOfRequest = new ModifyRequest();
                modifyMemebrOfRequest.DistinguishedName = linkedDN;
                var memberMod = new DirectoryAttributeModification();
                memberMod.Name      = attributeName;
                memberMod.Operation = DirectoryAttributeOperation.Add;
                memberMod.Add(backLinkDN);
                modifyMemebrOfRequest.Modifications.Add(memberMod);
                return(Connect().SendRequest(modifyMemebrOfRequest));
            }

            return(null);
        }
        public void ChangePassword(
            string userDN,
            string oldPassword,
            string newPassword
            )
        {
            DirectoryAttributeModification deleteMod =
                new DirectoryAttributeModification();

            deleteMod.Name = "unicodePwd";
            deleteMod.Add(GetPasswordData(oldPassword));
            deleteMod.Operation = DirectoryAttributeOperation.Delete;

            DirectoryAttributeModification addMod =
                new DirectoryAttributeModification();

            addMod.Name = "unicodePwd";
            addMod.Add(GetPasswordData(newPassword));
            addMod.Operation = DirectoryAttributeOperation.Add;

            ModifyRequest request = new ModifyRequest(
                userDN,
                deleteMod,
                addMod
                );

            DirectoryResponse response = _connection.SendRequest(request);
        }
Beispiel #9
0
        public virtual void SetAttributeValues(Guid objectGuid, IEnumerable <KeyValuePair <string, List <byte[]> > > attributes)
        {
            if (this.connection == null)
            {
                throw new InvalidOperationException("AD connection has not been initialized");
            }
            ModifyRequest modifyRequest = new ModifyRequest();

            modifyRequest.DistinguishedName = EhfADAdapter.CreateDNForObjectGuid(objectGuid);
            foreach (KeyValuePair <string, List <byte[]> > keyValuePair in attributes)
            {
                DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();
                directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
                directoryAttributeModification.Name      = keyValuePair.Key;
                if (keyValuePair.Value != null && keyValuePair.Value.Count > 0)
                {
                    foreach (byte[] value in keyValuePair.Value)
                    {
                        directoryAttributeModification.Add(value);
                    }
                }
                modifyRequest.Modifications.Add(directoryAttributeModification);
            }
            this.connection.SendRequest(modifyRequest);
        }
Beispiel #10
0
        public static void AddModificationIfDataChanged <T>(
            this ICollection <DirectoryAttributeModification> modifications,
            string attributeName,
            T updatedEntity,
            T oldEntity,
            Func <T, string> getValueFunc = null)
            where T : class
        {
            var updatedValue = GetValueAsNullIfEmpty(updatedEntity, getValueFunc);
            var oldValue     = GetValueAsNullIfEmpty(oldEntity, getValueFunc);

            if (updatedValue == oldValue)
            {
                return;
            }

            var hasOldValue     = !string.IsNullOrEmpty(oldValue);
            var hasUpdatedValue = !string.IsNullOrEmpty(updatedValue);

            var modification = new DirectoryAttributeModification {
                Name = attributeName
            };

            if (hasUpdatedValue)
            {
                modification.Operation = DirectoryAttributeOperation.Replace;
                modification.Add(updatedValue);
            }
            else if (hasOldValue)
            {
                modification.Operation = DirectoryAttributeOperation.Delete;
            }

            modifications.Add(modification);
        }
        private void SetPassword(string username, string newPassword)
        {
            var distinguishedName = string.Format(@"CN={0},{1}", username, _config.DistinguishedName);

            Logger.Info("Setting password for user: \"{0}\"", username);
            Logger.Info("Distinguished name: \"{0}\"", distinguishedName);

            // the 'unicodePWD' attribute is used to handle pwd handling requests
            const string attribute = "unicodePwd";

            if (!String.IsNullOrEmpty(newPassword))
            {
                // do we have a pwd to set -> set pwd
                var directoryAttributeModificationReplace = new DirectoryAttributeModification
                {
                    Name      = attribute,
                    Operation = DirectoryAttributeOperation.Replace
                };

                directoryAttributeModificationReplace.Add(BuildBytePwd(newPassword));

                var damList       = new[] { directoryAttributeModificationReplace };
                var modifyRequest = new ModifyRequest(distinguishedName, damList);

                // Should we utilize pwd history on the pwd reset?
                var value      = BerConverter.Encode("{i}", new object[] { 0x1 });
                var pwdHistory = new DirectoryControl(LdapServerPolicyHintsOid, value, false, true);

                modifyRequest.Controls.Add(pwdHistory);

                var response = _connection.SendRequest(modifyRequest);

                // TODO: handle bad response.
            }
        }
        private DirectoryAttributeModification CreateMod(AttributeInfo attribute, object value, DirectoryAttributeOperation operation)
        {
            var attributeMod = new DirectoryAttributeModification();

            attributeMod.Name      = attribute.Name;
            attributeMod.Operation = operation;

            if (value == null)
            {
                return(attributeMod);
            }
            value = new AttributeValueConverter().TryConvert(attribute, value); //NormalizeAttributeValue(attributeName, value);

            var isEnumerable = !(value is byte[]) && value.GetType().IsEnumerableType();

            if (isEnumerable)
            {
                var en = value as IEnumerable;
                foreach (var o in en)
                {
                    if (o is string strValue1)
                    {
                        attributeMod.Add(strValue1);
                    }
                    else if (o is byte[] strByte1)
                    {
                        attributeMod.Add(strByte1);
                    }
                }
            }
            else
            {
                if (value is string strValue)
                {
                    attributeMod.Add(strValue);
                }
                else if (value is byte[] strByte)
                {
                    attributeMod.Add(strByte);
                }
            }



            return(attributeMod);
        }
        /// <summary>
        /// Sets the value of the attribute.
        /// </summary>
        /// <param name="attribute">The name of the attribute.</param>
        /// <param name="value">The value.</param>
        /// <param name="format">The format of the <paramref name="value"/>.</param>
        public IDirectoryAttributes Set(string attribute, DateTime value, string format = ExtensionMethods.LdapFormat)
        {
            var modification = new DirectoryAttributeModification {
                Name = attribute, Operation = DirectoryAttributeOperation.Replace
            };

            modification.Add(format == null ? value.ToFileTime().ToString() : value.FormatLdapDateTime(format));
            return(AddModification(modification));
        }
        /// <summary>
        /// Sets the value of the attribute.
        /// </summary>
        /// <param name="attribute">The name of the attribute.</param>
        /// <param name="value">The value.</param>
        public IDirectoryAttributes Set(string attribute, bool value)
        {
            var modification = new DirectoryAttributeModification {
                Name = attribute, Operation = DirectoryAttributeOperation.Replace
            };

            modification.Add(value ? "TRUE" : "FALSE");
            return(AddModification(modification));
        }
        public override DirectoryAttributeModification GetDirectoryAttributeModification(object instance)
        {
            var modification = new DirectoryAttributeModification
            {
                Name      = AttributeName,
                Operation = DirectoryAttributeOperation.Replace
            };

#if NET35
            if (_isX5092)
            {
                var value = (IEnumerable <X509Certificate2>)GetValueForDirectory(instance);
                if (value != null)
                {
                    foreach (var b in value)
                    {
                        modification.Add(b.GetRawCertData());
                    }
                }
            }
            else
            {
                var value = (IEnumerable <X509Certificate>)GetValueForDirectory(instance);
                if (value != null)
                {
                    foreach (var b in value)
                    {
                        modification.Add(b.GetRawCertData());
                    }
                }
            }
#else
            var value = (IEnumerable <X509Certificate>)GetValueForDirectory(instance);
            if (value != null)
            {
                foreach (var b in value)
                {
                    modification.Add(b.GetRawCertData());
                }
            }
#endif

            return(modification);
        }
Beispiel #16
0
        public bool SetUserAttribute(string uname, string attribute, string value)
        {
            string userDN = this.GetUserDN(uname);

            try
            {
                DirectoryAttributeModification mod = new DirectoryAttributeModification
                {
                    Name      = attribute,
                    Operation = DirectoryAttributeOperation.Replace
                };
                mod.Add(value);
                ModifyRequest req = new ModifyRequest(userDN);
                req.Modifications.Add(mod);
                m_conn.SendRequest(req);
            }
            catch (Exception e)
            {
                m_logger.FatalFormat("can't add attribute:{0} because of error:{1}", attribute, e.Message);
                return(false);
            }

            if (attribute.ToLower().Equals("sambapwdlastset"))
            {
                Dictionary <string, List <string> > SearchResult = GetUserAttribValue(userDN, "(objectClass=*)", SearchScope.Subtree, new string[] { "shadowMax", "sambaPwdMustChange" });

                if (SearchResult.ContainsKey("shadowmax") && SearchResult.ContainsKey("sambapwdmustchange"))
                {
                    int shadowMax = 0;

                    try
                    {
                        shadowMax = Convert.ToInt32(SearchResult["shadowmax"].First());
                    }
                    catch (Exception e)
                    {
                        m_logger.FatalFormat("SetUserAttribute: Unable to convert return from GetUserAttribValue to int {0}", e.Message);
                        return(false);
                    }

                    if (shadowMax > 0)
                    {
                        TimeMethod time = TimeMethod.methods[Methods.Timestamps];
                        string     t    = time.time(new TimeSpan(shadowMax, 0, 0, 0));
                        if (!t.Equals("0"))
                        {
                            if (!SetUserAttribute(uname, "sambaPwdMustChange", t))
                            {
                                return(false);
                            }
                        }
                    }
                }
            }
            return(true);
        }
        public override DirectoryAttributeModification GetDirectoryAttributeModification(object instance)
        {
            var modification = new DirectoryAttributeModification
            {
                Name      = AttributeName,
                Operation = DirectoryAttributeOperation.Replace
            };
            var value = GetValueForDirectory(instance);

            if (value != null)
            {
                if (value is byte[])
                {
                    modification.Add(value as byte[]);
                }
                else if (value is string)
                {
                    modification.Add(value as string);
                }
                else if (value is IEnumerable <byte[]> )
                {
                    foreach (var o in value as IEnumerable <byte[]> )
                    {
                        modification.Add(o);
                    }
                }
                else if (value is IEnumerable <string> )
                {
                    foreach (var o in value as IEnumerable <string> )
                    {
                        modification.Add(o);
                    }
                }
                else
                {
                    throw new MappingException(string.Format("Unsupported value '{0}' for property '{1}' on '{2}'", value, PropertyName, typeof(T).FullName));
                }
            }

            return(modification);
        }
        public static ModifyRequest GetModifyPasswordRequest(ILdapUser user, string newPassword)
        {
            var modifyUserPassword = new DirectoryAttributeModification
            {
                Operation = DirectoryAttributeOperation.Replace,
                Name      = "userPassword"
            };

            modifyUserPassword.Add(newPassword);

            return(new ModifyRequest(user.GetUserDn(), modifyUserPassword));
        }
        private bool HandleSupportedSharedConfigurationsProperty(TenantRelocationSyncObject obj, ModifyRequest modRequest, UpdateData mData, TenantRelocationSyncData syncData, ITopologyConfigurationSession targetPartitionSession)
        {
            if (!TenantRelocationConfigImpl.GetConfig <bool>("TranslateSupportedSharedConfigurations"))
            {
                return(false);
            }
            DirectoryAttributeModification   directoryAttributeModification = null;
            MultiValuedProperty <ADObjectId> multiValuedProperty            = (MultiValuedProperty <ADObjectId>)obj[OrganizationSchema.SupportedSharedConfigurations];
            MultiValuedProperty <ADObjectId> multiValuedProperty2;

            if (multiValuedProperty != null && multiValuedProperty.Count > 0)
            {
                OrganizationId organizationId = syncData.Source.OrganizationId;
                Exception      ex;
                OrganizationId organizationId2 = SharedConfiguration.FindMostRecentSharedConfigurationInPartition(organizationId, syncData.Target.PartitionId, out ex);
                if (ex != null)
                {
                    throw ex;
                }
                directoryAttributeModification = this.GetDirectoryAttributeModification(DirectoryAttributeOperation.Add);
                directoryAttributeModification.Add(organizationId2.ConfigurationUnit.DistinguishedName);
                modRequest.Modifications.Add(directoryAttributeModification);
            }
            else if (this.TryGetSupportedSharedConfigurations(targetPartitionSession, modRequest.DistinguishedName, syncData, out multiValuedProperty2) && multiValuedProperty2 != null && multiValuedProperty2.Count > 0)
            {
                directoryAttributeModification = this.GetDirectoryAttributeModification(DirectoryAttributeOperation.Delete);
                foreach (ADObjectId adobjectId in multiValuedProperty2)
                {
                    directoryAttributeModification.Add(adobjectId.DistinguishedName);
                }
                modRequest.Modifications.Add(directoryAttributeModification);
            }
            if (directoryAttributeModification != null)
            {
                ExTraceGlobals.TenantRelocationTracer.TraceDebug <string, DirectoryAttributeOperation>((long)this.GetHashCode(), "GenerateModifyRequestLinkMetaDataHandler: add item: attribute {0}, op:{1}", directoryAttributeModification.Name, directoryAttributeModification.Operation);
                return(true);
            }
            return(false);
        }
Beispiel #20
0
        public override void SetLease(LeaseToken newLeaseToken)
        {
            string        stringForm    = newLeaseToken.StringForm;
            ModifyRequest modifyRequest = new ModifyRequest();

            modifyRequest.DistinguishedName = this.serverDistinguishedName;
            DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();

            directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
            directoryAttributeModification.Name      = "msExchEdgeSyncLease";
            directoryAttributeModification.Add(stringForm);
            modifyRequest.Modifications.Add(directoryAttributeModification);
            this.SendRequest(modifyRequest);
        }
Beispiel #21
0
        public void WriteSourceGuid(string absolutePath, byte[] guidValue)
        {
            DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();

            directoryAttributeModification.Name      = "msExchEdgeSyncSourceGuid";
            directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
            directoryAttributeModification.Add(guidValue);
            ModifyRequest request = new ModifyRequest(absolutePath, new DirectoryAttributeModification[]
            {
                directoryAttributeModification
            });

            this.SendRequest(request);
        }
        public override DirectoryAttributeModification GetDirectoryAttributeModification(object instance)
        {
            var modification = new DirectoryAttributeModification
            {
                Name      = AttributeName,
                Operation = DirectoryAttributeOperation.Replace
            };
            var value = (byte[])GetValueForDirectory(instance);

            if (value != null)
            {
                modification.Add(value);
            }

            return(modification);
        }
        public override DirectoryAttributeModification GetDirectoryAttributeModification(object instance)
        {
            var modification = new DirectoryAttributeModification
            {
                Name      = AttributeName,
                Operation = DirectoryAttributeOperation.Replace
            };
            var value = (string)GetValueForDirectory(instance);

            if (!string.IsNullOrEmpty(value))
            {
                modification.Add(value);
            }

            return(modification);
        }
Beispiel #24
0
        public void ModifyPasswordRequest()
        {
            ModifyRequest req = LdapRequestBuilder.GetModifyPasswordRequest(_testUser, "new pwd");

            Assert.AreEqual(UserDn, req.DistinguishedName);

            var attributeModification = new DirectoryAttributeModification
            {
                Operation = DirectoryAttributeOperation.Replace,
                Name      = "userPassword",
            };

            attributeModification.Add("new pwd");

            CollectionAssert.AreEqual(req.Modifications[0], attributeModification);
        }
Beispiel #25
0
        public void SetUserAttribute(string uname, string attribute, string value)
        {
            string userDN = this.GetUserDN(uname);

            DirectoryAttributeModification mod = new DirectoryAttributeModification
            {
                Name      = attribute,
                Operation = DirectoryAttributeOperation.Replace
            };

            mod.Add(value);

            ModifyRequest req = new ModifyRequest(userDN);

            req.Modifications.Add(mod);

            m_conn.SendRequest(req);
        }
Beispiel #26
0
        public void ModifyRequest()
        {
            ModifyRequest req = LdapRequestBuilder.GetModifyRequest(_testUser, DirectoryAttributeOperation.Replace,
                                                                    "description",
                                                                    "Test Description 2");

            Assert.AreEqual(UserDn, req.DistinguishedName);

            var attributeModification = new DirectoryAttributeModification
            {
                Operation = DirectoryAttributeOperation.Replace,
                Name      = "description",
            };

            attributeModification.Add("Test Description 2");

            CollectionAssert.AreEqual(req.Modifications[0], attributeModification);
        }
Beispiel #27
0
        public void WriteSecurityDescriptorDacl(string absolutePath, ActiveDirectorySecurity acl)
        {
            DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();

            directoryAttributeModification.Name      = "nTSecurityDescriptor";
            directoryAttributeModification.Operation = DirectoryAttributeOperation.Replace;
            directoryAttributeModification.Add(acl.GetSecurityDescriptorBinaryForm());
            this.SendRequest(new ModifyRequest(absolutePath, new DirectoryAttributeModification[]
            {
                directoryAttributeModification
            })
            {
                Controls =
                {
                    new SecurityDescriptorFlagControl(System.DirectoryServices.Protocols.SecurityMasks.Dacl)
                }
            });
        }
Beispiel #28
0
        public void AppendAttrValue(string attrName, string value)
        {
            CheckForDeletion();

            string propName = attrName.ToLowerInvariant();

            DirectoryAttributeModification dam;

            if (_changes.ContainsKey(propName))
            {
                dam = _changes[propName];

                if (this.ConflictMode == ConflictModes.Error && dam.Operation != DirectoryAttributeOperation.Add)
                {
                    throw new IncompatibleMutationException(
                              String.Format("Can't process a request to {0} and append on attr {1} - indeterminate results",
                                            dam.Operation, propName));
                }
                else
                {
                    logger.Info("Request on attr {0} is {1}, but appending value {2} anyway",
                                propName, dam.Operation, value);

                    if (dam.Contains(""))
                    {
                        logger.Info("Removing empty-replacement value on {0}", propName);
                        dam.Remove("");
                    }

                    if (!dam.Contains(value))
                    {
                        dam.Add(value);
                    }
                }
            }
            else
            {
                dam           = new DirectoryAttributeModification();
                dam.Name      = propName;
                dam.Operation = DirectoryAttributeOperation.Add;
                dam.Add(value);
                _changes[propName] = dam;
            }
        }
Beispiel #29
0
        public override DirectoryAttributeModification GetDirectoryAttributeModification(object instance)
        {
            var modification = new DirectoryAttributeModification
            {
                Name      = AttributeName,
                Operation = DirectoryAttributeOperation.Replace
            };
            var value = (IEnumerable <X509Certificate>)GetValueForDirectory(instance);

            if (value != null)
            {
                foreach (var c in value)
                {
                    modification.Add(c.GetRawCertData());
                }
            }

            return(modification);
        }
        public override DirectoryAttributeModification GetDirectoryAttributeModification(object instance)
        {
            var modification = new DirectoryAttributeModification
            {
                Name      = AttributeName,
                Operation = DirectoryAttributeOperation.Replace
            };
            var value = (IEnumerable <byte[]>)GetValueForDirectory(instance);

            if (value != null)
            {
                foreach (var b in value)
                {
                    modification.Add(b);
                }
            }

            return(modification);
        }