示例#1
0
		public void ClearProperty(string path, Collection<string> propertyToClear)
		{
			this.Trace(DebugLogLevel.Verbose, "Entering ClearProperty");
			PSObject pSObject = new PSObject();
			if (!this.IsValidRootDSEPath(path))
			{
				path = this.ValidateAndNormalizePath(path);
				if (propertyToClear != null)
				{
					if (base.ShouldProcess(path, "Clear"))
					{
						ADProviderCommonParameters dynamicParameters = base.DynamicParameters as ADProviderCommonParameters;
						ADSessionInfo sessionInfo = this.GetSessionInfo(dynamicParameters, base.Credential, this.ExtendedDriveInfo);
						if (this.ValidateDynamicParameters(path, dynamicParameters, sessionInfo))
						{
							ADObject aDObject = new ADObject();
							aDObject.DistinguishedName = path;
							ADActiveObject aDActiveObject = new ADActiveObject(sessionInfo, aDObject);
							foreach (string str in propertyToClear)
							{
								aDObject.Add(str, null);
							}
							using (aDActiveObject)
							{
								try
								{
									aDActiveObject.Update();
									this.Trace(DebugLogLevel.Verbose, "ClearProperty: ADObject updated in store.");
									aDObject = this.GetValidatedADObject(path, propertyToClear, dynamicParameters, base.Credential, this.ExtendedDriveInfo);
								}
								catch (ADException aDException1)
								{
									ADException aDException = aDException1;
									base.WriteError(ADUtilities.GetErrorRecord(aDException, "ADProvider:ClearProperty:ADError", path));
									this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: ADException: AD error");
									return;
								}
								catch (UnauthorizedAccessException unauthorizedAccessException1)
								{
									UnauthorizedAccessException unauthorizedAccessException = unauthorizedAccessException1;
									base.WriteError(ADUtilities.GetErrorRecord(unauthorizedAccessException, "ADProvider:ClearProperty:AccessDenied", path));
									this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: ADException: access denied");
									return;
								}
								catch (AuthenticationException authenticationException1)
								{
									AuthenticationException authenticationException = authenticationException1;
									base.WriteError(ADUtilities.GetErrorRecord(authenticationException, "ADProvider:ClearProperty:InvalidCredentials", path));
									this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: ADException: invalid credentials");
									return;
								}
								catch (InvalidOperationException invalidOperationException1)
								{
									InvalidOperationException invalidOperationException = invalidOperationException1;
									base.WriteError(ADUtilities.GetErrorRecord(invalidOperationException, "ADProvider:ClearProperty:InvalidOperation", path));
									this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: ADException: invalid operation");
									return;
								}
								foreach (string str1 in propertyToClear)
								{
									if (!aDObject.Contains(str1))
									{
										continue;
									}
									pSObject.Properties.Add(new PSNoteProperty(str1, aDObject[str1].Value));
								}
								this.WriteADObjectProperties(aDObject, pSObject, dynamicParameters, this.ExtendedDriveInfo);
								this.Trace(DebugLogLevel.Verbose, "Leaving ClearProperty");
								return;
							}
							return;
						}
						else
						{
							this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: ValidateDynamicParameters: returned false");
							return;
						}
					}
					else
					{
						this.Trace(DebugLogLevel.Info, "Leaving ClearProperty: ShouldProcess returned false.");
						return;
					}
				}
				else
				{
					base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException(StringResources.ADProviderPropertiesToClearNotSpecified), "ADProvider:ClearProperty:propertyToClear", path));
					this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: ArgumentException:  propertyToClear is clear");
					return;
				}
			}
			else
			{
				base.WriteError(ADUtilities.GetErrorRecord(new NotSupportedException(StringResources.ADProviderOperationNotSupportedForRootDSE), "NotSupported", path));
				this.Trace(DebugLogLevel.Error, "Leaving ClearProperty: NotSupportedException: path is rootdse");
				return;
			}
		}
示例#2
0
		public void SetSecurityDescriptor(string path, ObjectSecurity securityDescriptor)
		{
			ADPropertyValueCollection aDPropertyValueCollection;
			this.Trace(DebugLogLevel.Verbose, "Entering SetSecurityDescriptor");
			Collection<string> strs = new Collection<string>();
			if (!this.IsValidRootDSEPath(path))
			{
				path = this.ValidateAndNormalizePath(path);
				if (securityDescriptor != null)
				{
					ActiveDirectorySecurity activeDirectorySecurity = securityDescriptor as ActiveDirectorySecurity;
					if (activeDirectorySecurity != null)
					{
						if (base.ShouldProcess(path, "Set"))
						{
							ADSessionInfo sessionInfo = this.GetSessionInfo(null, base.Credential, this.ExtendedDriveInfo);
							ADObject aDObject = new ADObject();
							aDObject.DistinguishedName = path;
							ADActiveObject aDActiveObject = new ADActiveObject(sessionInfo, aDObject);
							strs.Add("ntSecurityDescriptor");
							aDActiveObject.SecurityDescriptorFlags = SecurityMasks.None;
							using (aDActiveObject)
							{
								try
								{
									if (!aDObject.Contains("ntSecurityDescriptor"))
									{
										aDPropertyValueCollection = new ADPropertyValueCollection();
										aDObject.Add("ntSecurityDescriptor", aDPropertyValueCollection);
									}
									else
									{
										aDPropertyValueCollection = aDObject["ntSecurityDescriptor"];
									}
									aDObject["ntSecurityDescriptor"].Value = activeDirectorySecurity;
									aDActiveObject.Update();
									aDObject = this.GetValidatedADObject(path, strs, null, base.Credential, this.ExtendedDriveInfo);
								}
								catch (ADException aDException1)
								{
									ADException aDException = aDException1;
									base.WriteError(ADUtilities.GetErrorRecord(aDException, "ADProvider:SetSecurityDescriptor:ADError", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: ADException: AD error");
									return;
								}
								catch (UnauthorizedAccessException unauthorizedAccessException1)
								{
									UnauthorizedAccessException unauthorizedAccessException = unauthorizedAccessException1;
									base.WriteError(ADUtilities.GetErrorRecord(unauthorizedAccessException, "ADProvider:SetSecurityDescriptor:AccessDenied", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: ADException: access denied");
									return;
								}
								catch (AuthenticationException authenticationException1)
								{
									AuthenticationException authenticationException = authenticationException1;
									base.WriteError(ADUtilities.GetErrorRecord(authenticationException, "ADProvider:SetSecurityDescriptor:InvalidCredentials", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: ADException: invalid credentials");
									return;
								}
								catch (InvalidOperationException invalidOperationException1)
								{
									InvalidOperationException invalidOperationException = invalidOperationException1;
									base.WriteError(ADUtilities.GetErrorRecord(invalidOperationException, "ADProvider:SetSecurityDescriptor:InvalidOperation", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: ADException: invalid operation");
									return;
								}
								this.WriteADObjectSecurityDescriptor(aDObject, activeDirectorySecurity, null, this.ExtendedDriveInfo);
								this.Trace(DebugLogLevel.Verbose, "Leaving SetSecurityDescriptor");
								return;
							}
							return;
						}
						else
						{
							this.Trace(DebugLogLevel.Info, "Leaving SetSecurityDescriptor: ShouldProcess returned false.");
							return;
						}
					}
					else
					{
						base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException("securityDescriptor"), "ADProvider:SetSecurityDescriptor:InvalidSecurityDescriptor", path));
						this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: ArgumentException: securityDescriptor is of incorrect type");
						return;
					}
				}
				else
				{
					base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException("securityDescriptor"), "ADProvider:SetSecurityDescriptor:InvalidSecurityDescriptor", path));
					this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: ArgumentException: securityDescriptor is null");
					return;
				}
			}
			else
			{
				base.WriteError(ADUtilities.GetErrorRecord(new NotSupportedException(StringResources.ADProviderOperationNotSupportedForRootDSE), "NotSupported", path));
				this.Trace(DebugLogLevel.Error, "Leaving SetSecurityDescriptor: NotSupportedException: path is rootdse");
				return;
			}
		}
示例#3
0
		protected override void NewItem(string path, string itemTypeName, object newItemValue)
		{
			string root;
			this.Trace(DebugLogLevel.Verbose, "Entering NewItem");
			Collection<string> strs = new Collection<string>();
			if (this.IsValidPath(path))
			{
				string childName = this.GetChildName(path);
				ADProvider aDProvider = this;
				string str = path;
				if (this.ExtendedDriveInfo != null)
				{
					root = this.ExtendedDriveInfo.Root;
				}
				else
				{
					root = "";
				}
				string parentPath = aDProvider.GetParentPath(str, root);
				if (!this.IsValidRootDSEPath(parentPath))
				{
					parentPath = this.ValidateAndNormalizePath(parentPath);
					string str1 = ADPathModule.MakePath(parentPath, childName, ADPathFormat.X500);
					if (string.IsNullOrEmpty(itemTypeName))
					{
						base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException("itemTypeName"), "ADProvider:NewItem:InvalidItemTypeName", path));
						this.Trace(DebugLogLevel.Error, "Leaving NewItem: ArgumentException: itemType is invalid (null or empty)");
					}
					if (base.ShouldProcess(path, "New"))
					{
						ADProviderCommonParameters dynamicParameters = base.DynamicParameters as ADProviderCommonParameters;
						ADSessionInfo sessionInfo = this.GetSessionInfo(dynamicParameters, base.Credential, this.ExtendedDriveInfo);
						if (this.ValidateDynamicParameters(path, dynamicParameters, sessionInfo))
						{
							if (itemTypeName.Equals("directory", StringComparison.OrdinalIgnoreCase))
							{
								itemTypeName = "organizationalUnit";
							}
							ADObject aDObject = new ADObject(str1, itemTypeName);
							if (newItemValue != null)
							{
								Hashtable hashtables = newItemValue as Hashtable;
								if (hashtables == null)
								{
									base.WriteError(ADUtilities.GetErrorRecord(new ArgumentNullException("newItemValue"), "ADProvider:NewItem:InvalidNewItemValue", path));
									this.Trace(DebugLogLevel.Error, "Leaving NewItem: ArgumentNullException: newItemValue is null");
								}
								foreach (string key in hashtables.Keys)
								{
									object item = hashtables[key];
									if (item != null)
									{
										aDObject.Add(key, hashtables[key]);
										strs.Add(key);
									}
									else
									{
										base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException("newItemValue", "Property value to be added cannot be null."), "ADProvider: NewItem: InvalidArgument", path));
										this.Trace(DebugLogLevel.Error, "Leaving NewItem: ArgumentException: newItemValue has null value.");
										return;
									}
								}
							}
							ADActiveObject aDActiveObject = null;
							try
							{
								try
								{
									aDActiveObject = new ADActiveObject(sessionInfo, aDObject);
									aDActiveObject.Create();
									if (ProtectedFromDeletionUtil.ShouldProtectByDefault(aDObject.ObjectClass))
									{
										aDObject.TrackChanges = true;
										if (ProtectedFromDeletionUtil.ProtectFromAccidentalDeletion(aDObject, sessionInfo))
										{
											aDActiveObject.Update();
										}
									}
									aDObject = this.GetValidatedADObject(str1, strs, base.DynamicParameters as ADProviderCommonParameters, base.Credential, this.ExtendedDriveInfo);
									sessionInfo.ServerType = this.GetServerType(sessionInfo);
								}
								catch (ADException aDException1)
								{
									ADException aDException = aDException1;
									base.WriteError(ADUtilities.GetErrorRecord(aDException, "ADProvider:NewItem:ADError", path));
									this.Trace(DebugLogLevel.Error, "Leaving NewItem: ADException: AD error");
									return;
								}
								catch (UnauthorizedAccessException unauthorizedAccessException1)
								{
									UnauthorizedAccessException unauthorizedAccessException = unauthorizedAccessException1;
									base.WriteError(ADUtilities.GetErrorRecord(unauthorizedAccessException, "ADProvider:NewItem:AccessDenied", path));
									this.Trace(DebugLogLevel.Error, "Leaving NewItem: ADException: access denied");
									return;
								}
								catch (AuthenticationException authenticationException1)
								{
									AuthenticationException authenticationException = authenticationException1;
									base.WriteError(ADUtilities.GetErrorRecord(authenticationException, "ADProvider:NewItem:InvalidCredentials", path));
									this.Trace(DebugLogLevel.Error, "Leaving NewItem: ADException: invalid credentials");
									return;
								}
								catch (InvalidOperationException invalidOperationException1)
								{
									InvalidOperationException invalidOperationException = invalidOperationException1;
									base.WriteError(ADUtilities.GetErrorRecord(invalidOperationException, "ADProvider:NewItem:InvalidOperation", path));
									this.Trace(DebugLogLevel.Error, "Leaving NewItem: ADException: invalid operation");
									return;
								}
								this.WriteADObject(aDObject, sessionInfo, base.DynamicParameters as ADProviderCommonParameters, this.ExtendedDriveInfo);
								this.Trace(DebugLogLevel.Verbose, "Leaving NewItem");
								return;
							}
							finally
							{
								if (aDActiveObject != null)
								{
									this.Trace(DebugLogLevel.Verbose, "Leaving NewItem: Calling Dispose on ADActiveObject.");
									aDActiveObject.Dispose();
								}
							}
							return;
						}
						else
						{
							this.Trace(DebugLogLevel.Info, "Leaving NewItem: ValidateDynamicParameters returned false.");
							return;
						}
					}
					else
					{
						this.Trace(DebugLogLevel.Info, "Leaving NewItem: ShouldProcess returned false.");
						return;
					}
				}
				else
				{
					base.WriteError(ADUtilities.GetErrorRecord(new NotSupportedException(StringResources.ADProviderOperationNotSupportedForRootDSE), "NotSupported", path));
					this.Trace(DebugLogLevel.Error, "Leaving NewItem: NotSupportedException: path is rootdse");
					return;
				}
			}
			else
			{
				base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException(path), "InvalidPath", path));
				this.Trace(DebugLogLevel.Error, "Leaving NewItem: ArgumentException: path is invalid");
				return;
			}
		}
示例#4
0
		public void SetProperty(string path, PSObject propertyValue)
		{
			ADPropertyValueCollection aDPropertyValueCollection;
			ADPropertyValueCollection item;
			ADPropertyValueCollection aDPropertyValueCollection1;
			ADPropertyValueCollection item1;
			PSObject pSObject = new PSObject();
			Collection<string> strs = new Collection<string>();
			this.Trace(DebugLogLevel.Verbose, "Entering SetProperty");
			if (propertyValue != null)
			{
				if (!this.IsValidRootDSEPath(path))
				{
					path = this.ValidateAndNormalizePath(path);
					ADProviderSetPropertyParameters dynamicParameters = base.DynamicParameters as ADProviderSetPropertyParameters;
					ADSessionInfo sessionInfo = this.GetSessionInfo(dynamicParameters, base.Credential, this.ExtendedDriveInfo);
					if (this.ValidateDynamicParameters(path, dynamicParameters, sessionInfo))
					{
						ADObject aDObject = new ADObject();
						aDObject.DistinguishedName = path;
						ADActiveObject aDActiveObject = new ADActiveObject(sessionInfo, aDObject);
						if (dynamicParameters != null)
						{
							if (dynamicParameters.ReplacePropertyValue != null)
							{
								foreach (string key in dynamicParameters.ReplacePropertyValue.Keys)
								{
									object obj = dynamicParameters.ReplacePropertyValue[key];
									if (!aDObject.Contains(key))
									{
										aDPropertyValueCollection = new ADPropertyValueCollection();
										aDObject.Add(key, aDPropertyValueCollection);
									}
									else
									{
										aDPropertyValueCollection = aDObject[key];
										aDPropertyValueCollection.Clear();
									}
									if (obj.GetType() != typeof(object[]))
									{
										aDPropertyValueCollection.Add(obj);
									}
									else
									{
										object[] objArray = (object[])obj;
										for (int i = 0; i < (int)objArray.Length; i++)
										{
											object obj1 = objArray[i];
											aDPropertyValueCollection.Add(obj1);
										}
									}
									strs.Add(key);
								}
							}
							if (dynamicParameters.AddPropertyValue != null)
							{
								foreach (string str in dynamicParameters.AddPropertyValue.Keys)
								{
									object item2 = dynamicParameters.AddPropertyValue[str];
									if (item2 != null)
									{
										if (!aDObject.Contains(str))
										{
											item = new ADPropertyValueCollection();
											item.TrackChanges = true;
											aDObject.Add(str, item);
										}
										else
										{
											item = aDObject[str];
										}
										if (item2.GetType() != typeof(object[]))
										{
											item.Add(item2);
										}
										else
										{
											object[] objArray1 = (object[])item2;
											for (int j = 0; j < (int)objArray1.Length; j++)
											{
												object obj2 = objArray1[j];
												item.Add(obj2);
											}
										}
										strs.Add(str);
									}
									else
									{
										base.WriteError(ADUtilities.GetErrorRecord(new ArgumentException(StringResources.ADProviderPropertyValueCannotBeNull), "ADProvider: SetProperty: InvalidArgument", path));
										this.Trace(DebugLogLevel.Error, "Leaving SetProperty: ArgumentException: addPropertyValue has null value.");
										return;
									}
								}
							}
							if (dynamicParameters.RemovePropertyValue != null)
							{
								foreach (string key1 in dynamicParameters.RemovePropertyValue.Keys)
								{
									object item3 = dynamicParameters.RemovePropertyValue[key1];
									if (!aDObject.Contains(key1))
									{
										aDPropertyValueCollection1 = new ADPropertyValueCollection();
										aDPropertyValueCollection1.TrackChanges = true;
										aDObject.Add(key1, aDPropertyValueCollection1);
									}
									else
									{
										aDPropertyValueCollection1 = aDObject[key1];
									}
									if (item3.GetType() != typeof(object[]))
									{
										aDPropertyValueCollection1.Remove(item3);
									}
									else
									{
										object[] objArray2 = (object[])item3;
										for (int k = 0; k < (int)objArray2.Length; k++)
										{
											object obj3 = objArray2[k];
											aDPropertyValueCollection1.Remove(obj3);
										}
									}
									strs.Add(key1);
								}
							}
						}
						foreach (PSMemberInfo property in propertyValue.Properties)
						{
							string name = property.Name;
							object value = property.Value;
							if (!aDObject.Contains(name))
							{
								item1 = new ADPropertyValueCollection();
								item1.TrackChanges = true;
								aDObject.Add(name, item1);
							}
							else
							{
								item1 = aDObject[name];
							}
							if (value.GetType() != typeof(object[]))
							{
								item1.Value = value;
							}
							else
							{
								item1.Clear();
								object[] objArray3 = (object[])value;
								for (int l = 0; l < (int)objArray3.Length; l++)
								{
									object obj4 = objArray3[l];
									item1.Add(obj4);
								}
							}
							strs.Add(name);
						}
						if (base.ShouldProcess(path, "Set"))
						{
							using (aDActiveObject)
							{
								try
								{
									aDActiveObject.Update();
									aDObject = this.GetValidatedADObject(path, strs, dynamicParameters, base.Credential, this.ExtendedDriveInfo);
								}
								catch (ADException aDException1)
								{
									ADException aDException = aDException1;
									base.WriteError(ADUtilities.GetErrorRecord(aDException, "ADProvider:SetProperty:ADError", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetProperty: ADException: AD error");
									return;
								}
								catch (UnauthorizedAccessException unauthorizedAccessException1)
								{
									UnauthorizedAccessException unauthorizedAccessException = unauthorizedAccessException1;
									base.WriteError(ADUtilities.GetErrorRecord(unauthorizedAccessException, "ADProvider:SetProperty:AccessDenied", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetProperty: ADException: access denied");
									return;
								}
								catch (AuthenticationException authenticationException1)
								{
									AuthenticationException authenticationException = authenticationException1;
									base.WriteError(ADUtilities.GetErrorRecord(authenticationException, "ADProvider:SetProperty:InvalidCredentials", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetProperty: ADException: invalid credentials");
									return;
								}
								catch (InvalidOperationException invalidOperationException1)
								{
									InvalidOperationException invalidOperationException = invalidOperationException1;
									base.WriteError(ADUtilities.GetErrorRecord(invalidOperationException, "ADProvider:SetProperty:InvalidOperation", path));
									this.Trace(DebugLogLevel.Error, "Leaving SetProperty: ADException: invalid operation");
									return;
								}
							}
							foreach (string str1 in strs)
							{
								pSObject.Properties.Add(new PSNoteProperty(str1, aDObject[str1].Value));
							}
							this.WriteADObjectProperties(aDObject, pSObject, dynamicParameters, this.ExtendedDriveInfo);
							this.Trace(DebugLogLevel.Verbose, "Leaving SetProperty");
							return;
						}
						else
						{
							this.Trace(DebugLogLevel.Info, "Leaving SetProperty: ShouldProcess returned false.");
						}
						return;
					}
					else
					{
						this.Trace(DebugLogLevel.Error, "Leaving GetProperty: ValidateDynamicParameters: returned false");
						return;
					}
				}
				else
				{
					base.WriteError(ADUtilities.GetErrorRecord(new NotSupportedException(StringResources.ADProviderOperationNotSupportedForRootDSE), "NotSupported", path));
					this.Trace(DebugLogLevel.Error, "Leaving SetProperty: NotSupportedException: path is rootdse");
					return;
				}
			}
			else
			{
				base.WriteError(ADUtilities.GetErrorRecord(new ArgumentNullException("propertyValue"), "ADProvider:SetProperty:NullArgument", path));
				this.Trace(DebugLogLevel.Error, "Leaving SetProperty: ArgumentNullException: propertyValue is null");
				return;
			}
		}
		internal static bool ProtectFromAccidentalDeletion(ADObject directoryObj, CmdletSessionInfo cmdletSessionInfo)
		{
			ADObject cachedObject;
			string value = directoryObj["distinguishedName"].Value as string;
			if (!directoryObj.Contains("nTSecurityDescriptor") || !directoryObj.Contains("sdRightsEffective"))
			{
				cachedObject = ProtectedFromDeletionUtil.GetCachedObject(value, ProtectedFromDeletionUtil.AttributesToFetchOnObject, cmdletSessionInfo);
			}
			else
			{
				cachedObject = directoryObj;
				ProtectedFromDeletionUtil.AddObjectToCache(directoryObj, cmdletSessionInfo);
			}
			if (cachedObject == null || !cachedObject.Contains("nTSecurityDescriptor") || cachedObject["nTSecurityDescriptor"].Value == null)
			{
				object[] objArray = new object[1];
				objArray[0] = directoryObj["distinguishedName"].Value;
				throw new ADException(string.Format(CultureInfo.CurrentCulture, StringResources.InsufficientPermissionsToProtectObject, objArray));
			}
			else
			{
				if (ProtectedFromDeletionUtil.EveryoneDeniedDeleteAndDeleteTree(cachedObject) || Utils.HasFlagsSet((int)cachedObject["sdRightsEffective"].Value, 4))
				{
					if (!Utils.IsNamingContext(cachedObject) && !Utils.IsDeleted(cachedObject))
					{
						string parentPath = ADPathModule.GetParentPath(value, null, ADPathFormat.X500);
						ADObject aDObject = ProtectedFromDeletionUtil.GetCachedObject(parentPath, ProtectedFromDeletionUtil.AttributesToFetchOnParent, cmdletSessionInfo);
						if (aDObject != null && !ProtectedFromDeletionUtil.EveryoneDeniedDeleteChild(aDObject))
						{
							if (Utils.HasFlagsSet((int)aDObject["sdRightsEffective"].Value, 4))
							{
								ActiveDirectorySecurity activeDirectorySecurity = (ActiveDirectorySecurity)aDObject["nTSecurityDescriptor"].Value;
								activeDirectorySecurity.AddAccessRule(ProtectedFromDeletionUtil.ACEConstants.DeleteChildAccessRule);
								using (ADActiveObject aDActiveObject = new ADActiveObject(cmdletSessionInfo.ADSessionInfo, aDObject))
								{
									aDObject.TrackChanges = true;
									aDObject["nTSecurityDescriptor"].Value = activeDirectorySecurity;
									aDActiveObject.Update();
								}
							}
							else
							{
								object[] value1 = new object[2];
								value1[0] = directoryObj["distinguishedName"].Value;
								value1[1] = aDObject["distinguishedName"].Value;
								throw new ADException(string.Format(CultureInfo.CurrentCulture, StringResources.InsufficientPermissionsToProtectObjectParent, value1));
							}
						}
					}
					ActiveDirectorySecurity activeDirectorySecurity1 = (ActiveDirectorySecurity)cachedObject["nTSecurityDescriptor"].Value;
					if (ProtectedFromDeletionUtil.EveryoneDeniedDeleteAndDeleteTree(cachedObject))
					{
						return false;
					}
					else
					{
						activeDirectorySecurity1.AddAccessRule(ProtectedFromDeletionUtil.ACEConstants.DeleteAndDeleteTreeAccessRule);
						if (!directoryObj.Contains("nTSecurityDescriptor"))
						{
							directoryObj.Add("nTSecurityDescriptor", activeDirectorySecurity1);
						}
						else
						{
							directoryObj["nTSecurityDescriptor"].Value = activeDirectorySecurity1;
						}
						return true;
					}
				}
				else
				{
					object[] objArray1 = new object[1];
					objArray1[0] = directoryObj["distinguishedName"].Value;
					throw new ADException(string.Format(CultureInfo.CurrentCulture, StringResources.InsufficientPermissionsToProtectObject, objArray1));
				}
			}
		}