public override bool IsEqual(object instance, object value, out DirectoryAttributeModification modification)
        {
            var propertyValue = GetValue(instance) as ICollection <byte[]>;
            var bytes         = value as ICollection <byte[]>;

            if ((propertyValue == null || propertyValue.Count == 0) && (bytes == null || bytes.Count == 0))
            {
                modification = null;
                return(true);
            }

            if (propertyValue == null || bytes == null || bytes.Count != propertyValue.Count)
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            var propertyEnum = propertyValue.GetEnumerator();
            var bytesEnum    = bytes.GetEnumerator();

            while (propertyEnum.MoveNext() && bytesEnum.MoveNext())
            {
                if (propertyEnum.Current.SequenceEqual(bytesEnum.Current))
                {
                    continue;
                }

                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            modification = null;
            return(true);
        }
Ejemplo n.º 2
0
        public override bool IsEqual(object instance, object value, out DirectoryAttributeModification modification)
        {
            var propertyValue = GetValue(instance) as string[];
            var strings       = value as string[];

            if ((propertyValue == null || propertyValue.Length == 0) && (strings == null || strings.Length == 0))
            {
                modification = null;
                return(true);
            }

            if (propertyValue == null || strings == null || strings.Length != propertyValue.Length)
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            if (!strings.SequenceEqual(propertyValue))
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            modification = null;
            return(true);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public static void Serialize(XmlDictionaryWriter writer, DirectoryAttributeModification attribute)
        {
            ChangeOperation             changeOperation = ChangeOperation.None;
            DirectoryAttributeOperation operation       = attribute.Operation;

            switch (operation)
            {
            case DirectoryAttributeOperation.Add:
            {
                changeOperation = ChangeOperation.Add;
                break;
            }

            case DirectoryAttributeOperation.Delete:
            {
                changeOperation = ChangeOperation.Delete;
                break;
            }

            case DirectoryAttributeOperation.Replace:
            {
                changeOperation = ChangeOperation.Replace;
                break;
            }
            }
            AttributeTypeAndValueSerializer.InternalSerialize(writer, changeOperation, AttributeNs.LookupNs(attribute.Name, SyntheticAttributeOperation.Write), attribute.Name, attribute);
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        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 override bool IsEqual(object instance, object value, out DirectoryAttributeModification modification)
        {
            var propertyValue = GetValue(instance) as ICollection <SecurityIdentifier>;
            var identifiers   = value as ICollection <SecurityIdentifier>;

            if ((propertyValue == null || propertyValue.Count == 0) && (identifiers == null || identifiers.Count == 0))
            {
                modification = null;
                return(true);
            }

            if (propertyValue == null || identifiers == null || identifiers.Count != propertyValue.Count)
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            if (!identifiers.SequenceEqual(propertyValue))
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            modification = null;
            return(true);
        }
        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);
        }
Ejemplo n.º 10
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);
        }
Ejemplo n.º 11
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);
        }
Ejemplo n.º 12
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);
        }
Ejemplo n.º 13
0
        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.
            }
        }
        public override bool IsEqual(object instance, object value, out DirectoryAttributeModification modification)
        {
            var propertyValue = GetValue(instance) as byte[][];
            var bytes         = value as byte[][];

            if ((propertyValue == null || propertyValue.Length == 0) && (bytes == null || bytes.Length == 0))
            {
                modification = null;
                return(true);
            }

            if (propertyValue == null || bytes == null || bytes.Length != propertyValue.Length)
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            if (bytes.Where((t, i) => !propertyValue[i].SequenceEqual(t)).Any())
            {
                modification = GetDirectoryAttributeModification(instance);
                return(false);
            }

            modification = null;
            return(true);
        }
Ejemplo n.º 15
0
        private void UpdateValueCollectionChanges(string attrName, ADPropertyValueCollection valueCollection, DirectoryAttributeModificationCollection mods)
        {
            DirectoryAttributeModification directoryAttributeModification;

            if (valueCollection != null)
            {
                if (!valueCollection.TrackChanges)
                {
                    directoryAttributeModification = this.CreateDirAttrModification(attrName, valueCollection, null);
                    mods.Add(directoryAttributeModification);
                }
                else
                {
                    if (!valueCollection.IsValuesCleared)
                    {
                        if (valueCollection.ReplacedValues.Count <= 0)
                        {
                            if (valueCollection.DeletedValues.Count > 0)
                            {
                                directoryAttributeModification           = this.CreateDirAttrModification(attrName, valueCollection.DeletedValues, null);
                                directoryAttributeModification.Operation = DirectoryAttributeOperation.Delete;
                                mods.Add(directoryAttributeModification);
                            }
                            if (valueCollection.AddedValues.Count > 0)
                            {
                                directoryAttributeModification           = new DirectoryAttributeModification();
                                directoryAttributeModification.Operation = DirectoryAttributeOperation.Add;
                                this.CreateDirAttrModification(attrName, valueCollection.AddedValues, directoryAttributeModification);
                                mods.Add(directoryAttributeModification);
                                return;
                            }
                        }
                        else
                        {
                            directoryAttributeModification = this.CreateDirAttrModification(attrName, valueCollection.ReplacedValues, null);
                            mods.Add(directoryAttributeModification);
                            return;
                        }
                    }
                    else
                    {
                        directoryAttributeModification           = new DirectoryAttributeModification();
                        directoryAttributeModification.Name      = attrName;
                        directoryAttributeModification.Operation = DirectoryAttributeOperation.Delete;
                        mods.Add(directoryAttributeModification);
                        return;
                    }
                }
                return;
            }
            else
            {
                directoryAttributeModification           = new DirectoryAttributeModification();
                directoryAttributeModification.Name      = attrName;
                directoryAttributeModification.Operation = DirectoryAttributeOperation.Delete;
                mods.Add(directoryAttributeModification);
                return;
            }
        }
        public void Operation_SetValid_GetReturnsExpected()
        {
            var modification = new DirectoryAttributeModification {
                Operation = DirectoryAttributeOperation.Delete
            };

            Assert.Equal(DirectoryAttributeOperation.Delete, modification.Operation);
        }
        public void AddRange_NullObjectInValues_ThrowsArgumentException()
        {
            DirectoryAttributeModification[] attributes = new DirectoryAttributeModification[] { new DirectoryAttributeModification(), null, new DirectoryAttributeModification() };
            var collection = new DirectoryAttributeModificationCollection();

            AssertExtensions.Throws <ArgumentException>(null, () => collection.AddRange(attributes));
            Assert.Equal(0, collection.Count);
        }
        public void Ctor_Default()
        {
            var modification = new DirectoryAttributeModification();

            Assert.Empty(modification.Name);
            Assert.Empty(modification);
            Assert.Equal(DirectoryAttributeOperation.Replace, modification.Operation);
        }
Ejemplo n.º 19
0
        /// <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));
        }
Ejemplo n.º 20
0
 private void AddValue(DirectoryAttributeModification mod, Guid v)
 {
     if (this.IsString)
     {
         mod.Add(v.ToString());
         return;
     }
     mod.Add(v.ToByteArray());
 }
Ejemplo n.º 21
0
        /// <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));
        }
Ejemplo n.º 22
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 void AddRange_ValidAttributes_AddsToCollection()
        {
            DirectoryAttributeModification[] attributes = new DirectoryAttributeModification[] { new DirectoryAttributeModification(), new DirectoryAttributeModification() };

            var collection = new DirectoryAttributeModificationCollection();

            collection.AddRange(attributes);

            Assert.Equal(attributes, collection.Cast <DirectoryAttributeModification>());
        }
Ejemplo n.º 24
0
 public virtual bool IsEqual(object instance, object value, out DirectoryAttributeModification modification)
 {
     if (!Equals(GetValue(instance), value))
     {
         modification = GetDirectoryAttributeModification(instance);
         return(false);
     }
     modification = null;
     return(true);
 }
        public void Indexer_Set_GetReturnsExpected()
        {
            var attribute = new DirectoryAttributeModification {
                "value"
            };
            var collection = new DirectoryAttributeModificationCollection {
                new DirectoryAttributeModification()
            };

            collection[0] = attribute;
            Assert.Equal(attribute, collection[0]);
        }
        public void Remove_Valid_Success()
        {
            var attribute = new DirectoryAttributeModification {
                "value"
            };
            var collection = new DirectoryAttributeModificationCollection {
                attribute
            };

            collection.Remove(attribute);
            Assert.Empty(collection);
        }
Ejemplo n.º 27
0
        public override bool IsEqual(object instance, object value, out DirectoryAttributeModification modification)
        {
            if (_isNullable)
            {
                var propertyValue = GetValue(instance) as DateTime?[];
                var dates         = value as DateTime?[];
                if ((propertyValue == null || propertyValue.Length == 0) && (dates == null || dates.Length == 0))
                {
                    modification = null;
                    return(true);
                }

                if (propertyValue == null || dates == null || dates.Length != propertyValue.Length)
                {
                    modification = GetDirectoryAttributeModification(instance);
                    return(false);
                }

                if (!dates.SequenceEqual(propertyValue))
                {
                    modification = GetDirectoryAttributeModification(instance);
                    return(false);
                }

                modification = null;
                return(true);
            }
            else
            {
                var propertyValue = GetValue(instance) as DateTime[];
                var dates         = value as DateTime[];
                if ((propertyValue == null || propertyValue.Length == 0) && (dates == null || dates.Length == 0))
                {
                    modification = null;
                    return(true);
                }

                if (propertyValue == null || dates == null || dates.Length != propertyValue.Length)
                {
                    modification = GetDirectoryAttributeModification(instance);
                    return(false);
                }

                if (!dates.SequenceEqual(propertyValue))
                {
                    modification = GetDirectoryAttributeModification(instance);
                    return(false);
                }

                modification = null;
                return(true);
            }
        }
        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));
        }
        public void IndexOf_Valid_ReturnsExpected()
        {
            var attribute = new DirectoryAttributeModification {
                "value"
            };
            var collection = new DirectoryAttributeModificationCollection {
                attribute
            };

            Assert.Equal(0, collection.IndexOf(attribute));
            Assert.Equal(-1, collection.IndexOf(new DirectoryAttributeModification()));
            Assert.Equal(-1, collection.IndexOf(null));
        }
        public void Contains_Valid_ReturnsExpected()
        {
            var attribute = new DirectoryAttributeModification {
                "value"
            };
            var collection = new DirectoryAttributeModificationCollection {
                attribute
            };

            Assert.True(collection.Contains(attribute));
            Assert.False(collection.Contains(new DirectoryAttributeModification()));
            Assert.False(collection.Contains(null));
        }
	public int IndexOf(DirectoryAttributeModification value) {}
	public bool Contains(DirectoryAttributeModification value) {}
	public void CopyTo(DirectoryAttributeModification[] array, int index) {}
	public ModifyRequest(string distinguishedName, DirectoryAttributeModification[] modifications) {}
	public void Insert(int index, DirectoryAttributeModification value) {}
	public void Remove(DirectoryAttributeModification value) {}
	public void AddRange(DirectoryAttributeModification[] attributes) {}
	// Methods
	public int Add(DirectoryAttributeModification attribute) {}