diff --git a/source/ddc-core/pom.xml b/source/ddc-core/pom.xml
index 246af0b..be19226 100644
--- a/source/ddc-core/pom.xml
+++ b/source/ddc-core/pom.xml
@@ -6,7 +6,7 @@
com.imperva.ddc
domain-directory-controller
- 7.4.0.0.0.0
+ 7.4.1.0.0.0
ddc-core
@@ -15,7 +15,7 @@
org.apache.directory.api
api-all
- 1.0.0-RC2
+ 2.1.0
org.mockito
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/ApacheAPIConverter.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/ApacheAPIConverter.java
index ab579d2..aa0bce1 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/ApacheAPIConverter.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/ApacheAPIConverter.java
@@ -1,22 +1,34 @@
package com.imperva.ddc.core;
-import com.imperva.ddc.core.exceptions.ProtocolException;
-import com.imperva.ddc.core.query.*;
-import org.apache.directory.api.ldap.model.entry.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import org.apache.directory.api.ldap.model.entry.Attribute;
+import org.apache.directory.api.ldap.model.entry.DefaultModification;
+import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.entry.Modification;
+import org.apache.directory.api.ldap.model.entry.ModificationOperation;
+import org.apache.directory.api.ldap.model.entry.Value;
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.api.ldap.model.message.SearchRequest;
import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
import org.apache.directory.api.ldap.model.message.SearchScope;
import org.apache.directory.api.ldap.model.message.controls.PagedResults;
import org.apache.directory.api.ldap.model.message.controls.PagedResultsImpl;
-import org.apache.directory.api.ldap.model.message.controls.SortRequest;
-import org.apache.directory.api.ldap.model.message.controls.SortRequestControlImpl;
+import org.apache.directory.api.ldap.model.message.controls.SortRequestImpl;
import org.apache.directory.api.ldap.model.name.Dn;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+
+import com.imperva.ddc.core.exceptions.ProtocolException;
+import com.imperva.ddc.core.query.EntityResponse;
+import com.imperva.ddc.core.query.Field;
+import com.imperva.ddc.core.query.ModificationDetails;
+import com.imperva.ddc.core.query.Operation;
+import com.imperva.ddc.core.query.QueryRequest;
+import com.imperva.ddc.core.query.ReferralsHandling;
+import com.imperva.ddc.core.query.SortKey;
/**
* Created by gabi.beyo on 02/07/2015.
@@ -40,25 +52,37 @@ String[] toStringArray(List entities) {
}
public Modification toModification(ModificationDetails modificationDetails) {
- final String value = null == modificationDetails.getValue()
+ final Object value = null == modificationDetails.getValue()
? null
- : modificationDetails.getValue().toString();
+ : modificationDetails.getValue();
Operation operation = modificationDetails.getOperation();
String strAttribute = modificationDetails.getAttribute().getName();
switch (operation) {
case ADD:
- return new DefaultModification(ModificationOperation.ADD_ATTRIBUTE, strAttribute, value);
+ return new DefaultModification(ModificationOperation.ADD_ATTRIBUTE, strAttribute, convertToValue(value));
case REMOVE:
return null == value
? new DefaultModification(ModificationOperation.REMOVE_ATTRIBUTE, strAttribute)
- : new DefaultModification(ModificationOperation.REMOVE_ATTRIBUTE, strAttribute, value);
+ : new DefaultModification(ModificationOperation.REMOVE_ATTRIBUTE, strAttribute, convertToValue(value));
case REPLACE:
- return new DefaultModification(ModificationOperation.REPLACE_ATTRIBUTE, strAttribute, value);
+ return new DefaultModification(ModificationOperation.REPLACE_ATTRIBUTE, strAttribute, convertToValue(value));
default:
return null;
}
+ }
+ Value convertToValue(Object value) {
+ if (value instanceof String) {
+ return new Value((String) value);
+ }
+ if (value instanceof Number) {
+ return new Value(value.toString());
+ }
+ if (value instanceof byte[]) {
+ return new Value((byte[]) value);
+ }
+ return null;
}
List toEntityResponse(List entries, List requestedFields) {
@@ -70,7 +94,7 @@ List toEntityResponse(List entries, List requested
for (Field field : requestedFields) {
if (field.getName().equals("*") || field.getName().equalsIgnoreCase(att.getId())) {
att.iterator().forEachRemaining(value -> {
- entResponse.addValue(value.getValue(), att.getId(), field.getType());
+ entResponse.addValue(value, att.getId(), field.getType());
});
}
}
@@ -100,7 +124,7 @@ SearchRequest toSearchRequest(QueryRequest queryRequest, String baseSearchPath)
List sortKeys = queryRequest.getSortKeys();
if (!Objects.isNull(sortKeys) && !sortKeys.isEmpty()) {
- SortRequestControlImpl sortRequest = applySort(sortKeys);
+ SortRequestImpl sortRequest = applySort(sortKeys);
search.addControl(sortRequest);
}
return search;
@@ -130,11 +154,11 @@ SearchRequest toSearchRequest(QueryRequest queryRequest, String baseSearchPath,
// }
- SortRequestControlImpl applySort(List sortKeys) {
+ SortRequestImpl applySort(List sortKeys) {
if (Objects.isNull(sortKeys) && sortKeys.isEmpty()) {
throw new ProtocolException("Sorting keys can't be empty");
}
- SortRequestControlImpl sortRequest = new SortRequestControlImpl();
+ SortRequestImpl sortRequest = new SortRequestImpl();
sortRequest.setCritical(false);
for (SortKey sortKey : sortKeys) {
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/Driver.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/Driver.java
index f018855..a5dc37c 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/Driver.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/Driver.java
@@ -3,7 +3,7 @@
import com.imperva.ddc.core.commons.Utils;
import com.imperva.ddc.core.exceptions.*;
import com.imperva.ddc.core.query.*;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.directory.api.ldap.model.exception.LdapAuthenticationException;
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.api.ldap.model.exception.LdapProtocolErrorException;
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/QueryRequestPagedExecutor.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/QueryRequestPagedExecutor.java
index 3d62e7d..c0cea00 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/QueryRequestPagedExecutor.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/QueryRequestPagedExecutor.java
@@ -103,7 +103,10 @@ Object retrieveCookie(SearchCursor cursor) {
if (resultCodeEnum == ResultCodeEnum.UNWILLING_TO_PERFORM || resultCodeEnum == ResultCodeEnum.UNAVAILABLE_CRITICAL_EXTENSION || pagedSearchControl == null) {
throw new QueryFailedException("AD can't handle paging. pagedSearchControl null?: " + (pagedSearchControl == null) + ", result.getLdapResult().getResultCode(): " + result.getLdapResult().getResultCode().name());
}
- Object cookie = pagedSearchControl.getCookie();
+ byte[] cookie = pagedSearchControl.getCookie();
+ if (cookie != null && cookie.length == 0) {
+ cookie = null;
+ }
LOGGER.trace("Retrieving cookie. Cookie value: {}", cookie);
return cookie;
}
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/language/searchcriteria/SearchCriteriaFactory.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/language/searchcriteria/SearchCriteriaFactory.java
index d9f124c..d1f23e6 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/language/searchcriteria/SearchCriteriaFactory.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/language/searchcriteria/SearchCriteriaFactory.java
@@ -1,7 +1,7 @@
package com.imperva.ddc.core.language.searchcriteria;
import com.imperva.ddc.core.query.DirectoryType;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.NotImplementedException;
/**
@@ -16,7 +16,7 @@ public static SearchCriteriaBuilder create(DirectoryType directoryType){
searchCriteriaBuilder = new ActiveDirectorySearchCriteriaBuilderImpl();
break;
default:
- throw new NotImplementedException();
+ throw new NotImplementedException("Directory type not implemented");
}
return searchCriteriaBuilder;
}
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/query/AddRequestBuilderFactory.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/query/AddRequestBuilderFactory.java
index 96f1c8c..4a3011f 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/query/AddRequestBuilderFactory.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/query/AddRequestBuilderFactory.java
@@ -1,6 +1,6 @@
package com.imperva.ddc.core.query;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.NotImplementedException;
public class AddRequestBuilderFactory {
@@ -11,7 +11,7 @@ public static AddCriteriaBuilder create(DirectoryType directoryType){
addCriteriaBuilder = new AddCriteriaBuilder();
break;
default:
- throw new NotImplementedException();
+ throw new NotImplementedException("Directory type not implemented");
}
return addCriteriaBuilder;
}
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/query/ChangeRequestBuilderFactory.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/query/ChangeRequestBuilderFactory.java
index 9ab09d5..a1d7190 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/query/ChangeRequestBuilderFactory.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/query/ChangeRequestBuilderFactory.java
@@ -1,6 +1,6 @@
package com.imperva.ddc.core.query;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.NotImplementedException;
public class ChangeRequestBuilderFactory {
@@ -11,7 +11,7 @@ public static ChangeCriteriaBuilder create(DirectoryType directoryType){
changeCriteriaBuilder = new ChangeCriteriaBuilder();
break;
default:
- throw new NotImplementedException();
+ throw new NotImplementedException("Directory type not implemented");
}
return changeCriteriaBuilder;
}
diff --git a/source/ddc-core/src/main/java/com/imperva/ddc/core/query/RemoveRequestBuilderFactory.java b/source/ddc-core/src/main/java/com/imperva/ddc/core/query/RemoveRequestBuilderFactory.java
index f00c0e0..f7103b5 100644
--- a/source/ddc-core/src/main/java/com/imperva/ddc/core/query/RemoveRequestBuilderFactory.java
+++ b/source/ddc-core/src/main/java/com/imperva/ddc/core/query/RemoveRequestBuilderFactory.java
@@ -1,6 +1,6 @@
package com.imperva.ddc.core.query;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.NotImplementedException;
public class RemoveRequestBuilderFactory {
@@ -11,7 +11,7 @@ public static RemoveCriteriaBuilder create(DirectoryType directoryType){
removeCriteriaBuilder = new RemoveCriteriaBuilder();
break;
default:
- throw new NotImplementedException();
+ throw new NotImplementedException("Directory type not implemented");
}
return removeCriteriaBuilder;
}
diff --git a/source/ddc-service/pom.xml b/source/ddc-service/pom.xml
index efd2c4f..7ffe685 100644
--- a/source/ddc-service/pom.xml
+++ b/source/ddc-service/pom.xml
@@ -5,7 +5,7 @@
com.imperva.ddc
domain-directory-controller
- 7.4.0.0.0.0
+ 7.4.1.0.0.0
ddc-service
@@ -14,7 +14,7 @@
com.imperva.ddc
ddc-core
- 7.4.0.0.0.0
+ 7.4.1.0.0.0
diff --git a/source/pom.xml b/source/pom.xml
index e70753a..27cec74 100644
--- a/source/pom.xml
+++ b/source/pom.xml
@@ -6,7 +6,7 @@
pom
com.imperva.ddc
domain-directory-controller
- 7.4.0.0.0.0
+ 7.4.1.0.0.0
Domain Directory Controller
DDC is an Active Directory Java SDK designed to simplify AD interaction for small, medium and large projects.
diff --git a/startingkit/ddckit/pom.xml b/startingkit/ddckit/pom.xml
index beb89de..c58e013 100644
--- a/startingkit/ddckit/pom.xml
+++ b/startingkit/ddckit/pom.xml
@@ -54,7 +54,7 @@
com.imperva.ddc
ddc-service
- 7.3.7.0.0.0
+ 7.4.0.0.0.0