Пример #1
0
        internal XmlElement ToXmlNode(XmlDocument doc)
        {
            XmlElement xmlElement = doc.CreateElement("modification", "urn:oasis:names:tc:DSML:2:0:core");

            base.ToXmlNodeCommon(xmlElement);
            XmlAttribute xmlAttribute             = doc.CreateAttribute("operation", null);
            DirectoryAttributeOperation operation = this.Operation;

            if (operation == DirectoryAttributeOperation.Add)
            {
                xmlAttribute.InnerText = "add";
            }
            else if (operation == DirectoryAttributeOperation.Delete)
            {
                xmlAttribute.InnerText = "delete";
            }
            else if (operation == DirectoryAttributeOperation.Replace)
            {
                xmlAttribute.InnerText = "replace";
            }
            else
            {
                throw new InvalidEnumArgumentException("Operation", (int)this.Operation, typeof(DirectoryAttributeOperation));
            }
            xmlElement.Attributes.Append(xmlAttribute);
            return(xmlElement);
        }
Пример #2
0
        public ModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, params object[] values) : this()
        {
            // Store off the distinguished name
            _dn = distinguishedName;

            // validate the attributeName
            if (attributeName == null)
            {
                throw new ArgumentNullException("attributeName");
            }

            DirectoryAttributeModification mod = new DirectoryAttributeModification();

            mod.Operation = operation;
            mod.Name      = attributeName;
            if (values != null)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    mod.Add(values[i]);
                }
            }

            _attributeModificationList.Add(mod);
        }
Пример #3
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);
        }
Пример #4
0
		static DirectoryAttributeModification ToAttr (DirectoryAttributeOperation operation, string attributeName, params object [] values)
		{
			var a = new DirectoryAttributeModification ();
			a.Name = attributeName;
			a.Operation = operation;
			a.AddRange (values);
			return a;
		}
 private DirectoryAttributeModification GetDirectoryAttributeModification(DirectoryAttributeOperation operation)
 {
     return(new DirectoryAttributeModification
     {
         Name = ExchangeConfigurationUnitHandler.supportedSharedConfigurationsAttributeName,
         Operation = operation
     });
 }
Пример #6
0
        static DirectoryAttributeModification ToAttr(DirectoryAttributeOperation operation, string attributeName, params object [] values)
        {
            var a = new DirectoryAttributeModification();

            a.Name      = attributeName;
            a.Operation = operation;
            a.AddRange(values);
            return(a);
        }
        public ModifyResponse MakeModifyRequest(
            string distinguishedName,
            DirectoryAttributeOperation operation,
            string attributeName,
            params object[] attributeValues)
        {
            using (var connection = _connectionService.OpenConnection())
            {
                var request = new ModifyRequest(distinguishedName, operation, attributeName, attributeValues);

                return((ModifyResponse)connection.SendRequest(request));
            }
        }
 private void PopulateModifyRequest(ModifyRequest request, string name, DirectoryAttributeOperation operation, IEnumerable <ADUser> members)
 {
     if (members != null)
     {
         DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification
         {
             Name      = name,
             Operation = operation
         };
         foreach (ADUser aduser in members)
         {
             directoryAttributeModification.Add(aduser.Id.ToGuidOrDNString());
         }
         if (directoryAttributeModification.Count > 0)
         {
             request.Modifications.Add(directoryAttributeModification);
         }
     }
 }
 public ModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, params object[] values) : this()
 {
     this.dn = distinguishedName;
     if (attributeName == null)
     {
         throw new ArgumentNullException("attributeName");
     }
     DirectoryAttributeModification attribute = new DirectoryAttributeModification {
         Operation = operation,
         Name = attributeName
     };
     if (values != null)
     {
         for (int i = 0; i < values.Length; i++)
         {
             attribute.Add(values[i]);
         }
     }
     this.attributeModificationList.Add(attribute);
 }
Пример #10
0
        //Not tested because i don't know how to test an ACTION
        public Action GetUserOperation(DirectoryAttributeOperation operationType, string attributeName,
                                       string attributeValue)
        {
            switch (operationType)
            {
            case DirectoryAttributeOperation.Add:
                return(() => InsertUserAttribute(attributeName, attributeValue));

            case DirectoryAttributeOperation.Delete:
                return(() => DeleteUserAttribute(attributeName, attributeValue));

            case DirectoryAttributeOperation.Replace:
                return(() => OverwriteUserAttribute(attributeName, attributeValue));

            default:
                throw new Exception(
                          "LdapUser GetUserOperation Method: Not valid DirectoryAttributeOperation specified - " +
                          operationType);
            }
        }
Пример #11
0
        /// <summary>
        ///     Modify an LDAPUser Attribute
        /// </summary>
        /// <param name="operationType">Operation to execute on the attribute</param>
        /// <param name="user">LDAPUser's Attribute</param>
        /// <param name="attributeName">Attribute name</param>
        /// <param name="attributeValue">Attribute Value</param>
        /// <returns>Success or Failed</returns>
        public LdapState ModifyUserAttribute(DirectoryAttributeOperation operationType, ILdapUser user,
            string attributeName,
            string attributeValue)
        {
            try
            {
                _ldapConnection.SendRequest(LdapRequestBuilder.GetModifyRequest(user, operationType, attributeName,
                    attributeValue));
            }
            catch (Exception e)
            {
                _logger.Write(_logger.BuildLogMessage(e.Message, LdapState.LdapModifyUserAttributeError));
                return LdapState.LdapModifyUserAttributeError;
            }

            user.GetUserOperation(operationType, attributeName, attributeValue)();

            _logger.Write(_logger.BuildLogMessage("Modify User Attribute Operation Success",
                LdapState.LdapUserManipulatorSuccess));
            return LdapState.LdapUserManipulatorSuccess;
        }
        public ModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, params object[] values) : this()
        {
            this.dn = distinguishedName;
            if (attributeName == null)
            {
                throw new ArgumentNullException("attributeName");
            }
            DirectoryAttributeModification attribute = new DirectoryAttributeModification {
                Operation = operation,
                Name      = attributeName
            };

            if (values != null)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    attribute.Add(values[i]);
                }
            }
            this.attributeModificationList.Add(attribute);
        }
Пример #13
0
        /// <summary>
        ///     Modify an LDAPUser Attribute
        /// </summary>
        /// <param name="operationType">Operation to execute on the attribute</param>
        /// <param name="user">LDAPUser's Attribute</param>
        /// <param name="attributeName">Attribute name</param>
        /// <param name="attributeValue">Attribute Value</param>
        /// <returns>Success or Failed</returns>
        public LdapState ModifyUserAttribute(DirectoryAttributeOperation operationType, ILdapUser user,
                                             string attributeName,
                                             string attributeValue)
        {
            try
            {
                _ldapConnection.SendRequest(LdapRequestBuilder.GetModifyRequest(user, operationType, attributeName,
                                                                                attributeValue));
            }
            catch (Exception e)
            {
                _logger.Write(_logger.BuildLogMessage(e.Message, LdapState.LdapModifyUserAttributeError));
                return(LdapState.LdapModifyUserAttributeError);
            }

            user.GetUserOperation(operationType, attributeName, attributeValue)();

            _logger.Write(_logger.BuildLogMessage("Modify User Attribute Operation Success",
                                                  LdapState.LdapUserManipulatorSuccess));
            return(LdapState.LdapUserManipulatorSuccess);
        }
Пример #14
0
		public ModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, object[] values) : this()
		{
			this.dn = distinguishedName;
			if (attributeName != null)
			{
				DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();
				directoryAttributeModification.Operation = operation;
				directoryAttributeModification.Name = attributeName;
				if (values != null)
				{
					for (int i = 0; i < (int)values.Length; i++)
					{
						directoryAttributeModification.Add(values[i]);
					}
				}
				this.attributeModificationList.Add(directoryAttributeModification);
				return;
			}
			else
			{
				throw new ArgumentNullException("attributeName");
			}
		}
Пример #15
0
 public ModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, object[] values) : this()
 {
     this.dn = distinguishedName;
     if (attributeName != null)
     {
         DirectoryAttributeModification directoryAttributeModification = new DirectoryAttributeModification();
         directoryAttributeModification.Operation = operation;
         directoryAttributeModification.Name      = attributeName;
         if (values != null)
         {
             for (int i = 0; i < (int)values.Length; i++)
             {
                 directoryAttributeModification.Add(values[i]);
             }
         }
         this.attributeModificationList.Add(directoryAttributeModification);
         return;
     }
     else
     {
         throw new ArgumentNullException("attributeName");
     }
 }
Пример #16
0
 //Not tested because i don't know how to test an ACTION
 public Action GetUserOperation(DirectoryAttributeOperation operationType, string attributeName,
     string attributeValue)
 {
     switch (operationType)
     {
         case DirectoryAttributeOperation.Add:
             return (() => InsertUserAttribute(attributeName, attributeValue));
         case DirectoryAttributeOperation.Delete:
             return (() => DeleteUserAttribute(attributeName, attributeValue));
         case DirectoryAttributeOperation.Replace:
             return (() => OverwriteUserAttribute(attributeName, attributeValue));
         default:
             throw new Exception(
                 "LdapUser GetUserOperation Method: Not valid DirectoryAttributeOperation specified - " +
                 operationType);
     }
 }
Пример #17
0
 public bool ModifyUserAttribute(DirectoryAttributeOperation operationType, ILdapUser user, string attributeName,
                                 string attributeValue)
 {
     _ldapCurrentState = _manageLdapUser.ModifyUserAttribute(operationType, user, attributeName, attributeValue);
     return(LdapStateUtils.ToBoolean(_ldapCurrentState));
 }
Пример #18
0
        /// <summary>
        /// Attempts to convert the object from a .Net type to an LDAP string or byte[].
        /// If <paramref name="obj"/> is null or <see cref="String.Empty"/> then no value is added to the <see cref="DirectoryAttributeModification"/>.
        /// </summary>
        /// <param name="obj">The value to convert.</param>
        /// <param name="attributeName">The name of the attribute.</param>
        /// <param name="operation">The type of <see cref="DirectoryAttributeOperation"/>.</param>
        /// <returns></returns>
        public static DirectoryAttributeModification ToDirectoryModification(this object obj, string attributeName, DirectoryAttributeOperation operation)
        {
            var modification = new DirectoryAttributeModification {
                Name = attributeName, Operation = operation
            };

            if (obj == null || string.Empty.Equals(obj))
            {
                return(modification);
            }

            if (obj is string)
            {
                modification.Add(obj as string);
                return(modification);
            }

            if (obj is IEnumerable <string> )
            {
                foreach (var s in obj as IEnumerable <string> )
                {
                    modification.Add(s);
                }

                return(modification);
            }
            if (obj is byte[])
            {
                modification.Add(obj as byte[]);
                return(modification);
            }
            if (obj is X509Certificate)
            {
                modification.Add((obj as X509Certificate).GetRawCertData());
                return(modification);
            }
            if (obj is IEnumerable <byte> )
            {
                modification.Add((obj as IEnumerable <byte>).ToArray());
                return(modification);
            }
            if (obj is SecurityIdentifier)
            {
                var sid   = obj as SecurityIdentifier;
                var bytes = new byte[sid.BinaryLength];
                sid.GetBinaryForm(bytes, 0);
                modification.Add(bytes);
                return(modification);
            }
            if (obj is IEnumerable <byte[]> )
            {
                foreach (var b in (obj as IEnumerable <byte[]>).Where(b => b != null))
                {
                    modification.Add(b);
                }
                return(modification);
            }
            if (obj is IEnumerable <X509Certificate> )
            {
                foreach (var b in (obj as IEnumerable <X509Certificate>).Where(c => c != null))
                {
                    modification.Add(b.GetRawCertData());
                }
                return(modification);
            }
            if (obj is IEnumerable)
            {
                foreach (var s in (from object item in (obj as IEnumerable) select item.ToString()))
                {
                    modification.Add(s);
                }
                return(modification);
            }
            if (obj is Guid)
            {
                modification.Add(((Guid)obj).ToByteArray());
                return(modification);
            }
            if (obj is bool boolean)
            {
                modification.Add(boolean ? "TRUE" : "FALSE");

                return(modification);
            }

            modification.Add(obj.ToString());

            return(modification);
        }
Пример #19
0
		public ModifyRequest (string distinguishedName, DirectoryAttributeOperation operation, string attributeName, params object [] values)
			: this (distinguishedName, new DirectoryAttributeModification [] {ToAttr (operation, attributeName, values)})
		{
		}
Пример #20
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 void Operation_SetInvalid_InvalidEnumArgumentException(DirectoryAttributeOperation operation)
        {
            var modification = new DirectoryAttributeModification();

            AssertExtensions.Throws <InvalidEnumArgumentException>("value", () => modification.Operation = operation);
        }
Пример #22
0
 public ADModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, object[] values) : base(distinguishedName, operation, attributeName, values)
 {
 }
Пример #23
0
 public DirectoryAttributeModification()
 {
     this.attributeOperation = DirectoryAttributeOperation.Replace;
 }
Пример #24
0
 public ModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, params object [] values)
     : this(distinguishedName, new DirectoryAttributeModification [] { ToAttr(operation, attributeName, values) })
 {
 }
Пример #25
0
        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);
        }
		public DirectoryAttributeModification()
		{
			this.attributeOperation = DirectoryAttributeOperation.Replace;
		}
        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);
        }
Пример #28
0
		public ADModifyRequest(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, object[] values) : base(distinguishedName, operation, attributeName, values)
		{
		}
Пример #29
0
 public Action GetUserOperation(DirectoryAttributeOperation operationType, string attributeName, string attributeValue)
 {
     return () => { };
 }
Пример #30
0
 public static ModifyRequest GetModifyRequest(ILdapUser user, DirectoryAttributeOperation attributeOperation,string attributeName, string attributeValue)
 {
     return new ModifyRequest(user.GetUserDn(), attributeOperation, attributeName, attributeValue);
 }
Пример #31
0
        private ResultCode ModifyUserInGroup(string userName, string groupName, DirectoryAttributeOperation operation)
        {
            if (!this.UserExist(userName))
                return ResultCode.NoSuchObject;
            AdamUser user = this.GetUser(userName);

            if ((user.Groups.Contains(groupName) && operation == DirectoryAttributeOperation.Add))
                return ResultCode.EntryAlreadyExists;
            else if ((!user.Groups.Contains(groupName) && operation == DirectoryAttributeOperation.Delete))
                return ResultCode.NoSuchAttribute;

            string filter = string.Format("(&(objectClass=Group)(distinguishedName=CN={0},{1}))", groupName, this.GroupsDistinguishedName);
            this.OpenConnection();
            SearchRequest srchRequestGroup = new SearchRequest(this.GroupsDistinguishedName, filter, SearchScope.Subtree);
            SearchResponse srchResponseGroup = (SearchResponse)this._adamConnection.SendRequest(srchRequestGroup);
            this.CloseConnection();

            SearchResultEntry srchEntryGrp = srchResponseGroup.Entries[0];
            string groupDN = srchEntryGrp.DistinguishedName;

            DirectoryAttributeModification addMod = new DirectoryAttributeModification();
            addMod.Name = "member";
            addMod.Add(user.DistinguishedName);
            addMod.Operation = operation;
            ModifyRequest modRequestAddUser = new ModifyRequest(groupDN, addMod);
            this.OpenConnection();
            DirectoryResponse modResponseAdduser = this._adamConnection.SendRequest(modRequestAddUser);
            this.CloseConnection();

            return modResponseAdduser.ResultCode;
        }
Пример #32
0
 public Action GetUserOperation(DirectoryAttributeOperation operationType, string attributeName, string attributeValue)
 {
     return(() => { });
 }
Пример #33
0
 public bool ModifyUserAttribute(DirectoryAttributeOperation operationType, ILdapUser user, string attributeName,
     string attributeValue)
 {
     _ldapCurrentState = _manageLdapUser.ModifyUserAttribute(operationType, user, attributeName, attributeValue);
     return LdapStateUtils.ToBoolean(_ldapCurrentState);
 }
Пример #34
0
        public void Ctor_DistinguishedName_Operation_AttributeName_Values(string distinguishedName, DirectoryAttributeOperation operation, string attributeName, object[] values)
        {
            var request = new ModifyRequest(distinguishedName, operation, attributeName, values);

            Assert.Empty(request.Controls);
            DirectoryAttributeModification modification = (DirectoryAttributeModification)Assert.Single(request.Modifications);

            Assert.Equal(attributeName, modification.Name);
            Assert.Equal(operation, modification.Operation);
            Assert.Equal(values ?? Enumerable.Empty <object>(), modification.Cast <object>());

            Assert.Equal(distinguishedName, request.DistinguishedName);
            Assert.Null(request.RequestId);
        }
 public static ModifyRequest GetModifyRequest(ILdapUser user, DirectoryAttributeOperation attributeOperation, string attributeName, string attributeValue)
 {
     return(new ModifyRequest(user.GetUserDn(), attributeOperation, attributeName, attributeValue));
 }