From 067a169bbdbe738f4bdd6dafe3eef133aee078c9 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 31 Oct 2016 14:00:38 +0000
Subject: [PATCH] OPENDJ-2830 Fix ldifsearch size limit
---
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFSearch.java | 14 ++++++++------
opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIF.java | 22 ++++++++++++----------
2 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIF.java b/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIF.java
index da1aa21..d095c89 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIF.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldif/LDIF.java
@@ -16,6 +16,7 @@
package org.forgerock.opendj.ldif;
import static com.forgerock.opendj.ldap.CoreMessages.*;
+import static org.forgerock.opendj.ldap.LdapException.newLdapException;
import java.io.IOException;
import java.io.StringWriter;
@@ -48,6 +49,7 @@
import org.forgerock.opendj.ldap.Modification;
import org.forgerock.opendj.ldap.ModificationType;
import org.forgerock.opendj.ldap.RDN;
+import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.controls.SubtreeDeleteRequestControl;
import org.forgerock.opendj.ldap.requests.AddRequest;
@@ -699,16 +701,16 @@
public boolean hasNext() throws IOException {
if (nextEntry == null) {
final int sizeLimit = search.getSizeLimit();
- if (sizeLimit == 0 || entryCount < sizeLimit) {
- final DN baseDN = search.getName();
- final SearchScope scope = search.getScope();
- while (input.hasNext()) {
- final Entry entry = input.readEntry();
- if (entry.getName().isInScopeOf(baseDN, scope)
- && matcher.matches(entry).toBoolean()) {
- nextEntry = filterEntry(entry);
- break;
- }
+ if (sizeLimit != 0 && entryCount >= sizeLimit) {
+ throw newLdapException(ResultCode.SIZE_LIMIT_EXCEEDED);
+ }
+ final DN baseDN = search.getName();
+ final SearchScope scope = search.getScope();
+ while (input.hasNext()) {
+ final Entry entry = input.readEntry();
+ if (entry.getName().isInScopeOf(baseDN, scope) && matcher.matches(entry).toBoolean()) {
+ nextEntry = filterEntry(entry);
+ break;
}
}
}
diff --git a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFSearch.java b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFSearch.java
index 950aadc..a68f079 100644
--- a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFSearch.java
+++ b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFSearch.java
@@ -17,6 +17,7 @@
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.ToolVersionHandler.newSdkVersionHandler;
+import static com.forgerock.opendj.ldap.tools.LDAPToolException.newToolException;
import static com.forgerock.opendj.ldap.tools.LDAPToolException.newToolParamException;
import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
import static com.forgerock.opendj.cli.Utils.filterExitCode;
@@ -38,6 +39,7 @@
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.LdapException;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.requests.Requests;
@@ -195,13 +197,13 @@
final LDIFEntryWriter outputWriter = new LDIFEntryWriter(getLDIFToolOutputStream(this, outputFilename))) {
outputWriter.setWrapColumn(computeWrapColumn(wrapColumn));
LDIF.copyTo(LDIF.search(sourceReader, search), outputWriter);
+ } catch (final LdapException e) {
+ throw newToolException(
+ e, e.getResult().getResultCode(), ERR_LDIFSEARCH_FAILED.get(e.getLocalizedMessage()));
} catch (final IOException e) {
- if (e instanceof LocalizableException) {
- errPrintln(ERR_LDIFSEARCH_FAILED.get(((LocalizableException) e).getMessageObject()));
- } else {
- errPrintln(ERR_LDIFSEARCH_FAILED.get(e.getLocalizedMessage()));
- }
- return ResultCode.CLIENT_SIDE_LOCAL_ERROR.intValue();
+ throw newToolException(e, ResultCode.CLIENT_SIDE_LOCAL_ERROR, ERR_LDIFSEARCH_FAILED.get(
+ e instanceof LocalizableException ? ((LocalizableException) e).getMessageObject()
+ : e.getLocalizedMessage()));
} catch (final ArgumentException ae) {
throw newToolParamException(ae, ae.getMessageObject());
}
--
Gitblit v1.10.0