From 9f443811d6c86db26eb474a61df7021f98c32c78 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 07 Jun 2010 08:59:50 +0000
Subject: [PATCH] Add support for MS AD Permissive Modify Control (Issue/Enhancement #4238)
---
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java | 30 +++++++++++++++++++++---------
1 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
index b8e1d38..c011803 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -120,6 +120,11 @@
protected boolean noOp;
/**
+ * Indicates whether the request included the Permissive Modify control.
+ */
+ protected boolean permissiveModify = false;
+
+ /**
* Indicates whether this modify operation includees a password change.
*/
protected boolean passwordChanged;
@@ -287,7 +292,7 @@
public void addModification(Modification modification)
throws DirectoryException
{
- modifiedEntry.applyModification(modification);
+ modifiedEntry.applyModification(modification, permissiveModify);
super.addModification(modification);
}
@@ -839,6 +844,10 @@
{
noOp = true;
}
+ else if (oid.equals(OID_PERMISSIVE_MODIFY_CONTROL))
+ {
+ permissiveModify = true;
+ }
else if (oid.equals(OID_LDAP_READENTRY_PREREAD))
{
preReadRequest =
@@ -1496,7 +1505,7 @@
LinkedList<AttributeValue> duplicateValues =
new LinkedList<AttributeValue>();
modifiedEntry.addAttribute(attr, duplicateValues);
- if (!duplicateValues.isEmpty())
+ if (!duplicateValues.isEmpty() && !permissiveModify)
{
StringBuilder buffer = new StringBuilder();
Iterator<AttributeValue> iterator = duplicateValues.iterator();
@@ -1604,18 +1613,21 @@
}
else
{
- StringBuilder buffer = new StringBuilder();
- Iterator<AttributeValue> iterator = missingValues.iterator();
- buffer.append(iterator.next().getValue().toString());
- while (iterator.hasNext())
+ if (! permissiveModify)
{
- buffer.append(", ");
+ StringBuilder buffer = new StringBuilder();
+ Iterator<AttributeValue> iterator = missingValues.iterator();
buffer.append(iterator.next().getValue().toString());
- }
+ while (iterator.hasNext())
+ {
+ buffer.append(", ");
+ buffer.append(iterator.next().getValue().toString());
+ }
- throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE,
+ throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE,
ERR_MODIFY_DELETE_MISSING_VALUES.get(
String.valueOf(entryDN), attr.getName(), buffer));
+ }
}
}
else
--
Gitblit v1.10.0