From 0fccd261646cd99f953aea01bd5e1f36bf232d08 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 14 Nov 2016 15:38:45 +0000
Subject: [PATCH] LDAPClientConnection2.java: reduced code duplication
---
opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java | 199 ++++++++++++-------------------------------------
1 files changed, 49 insertions(+), 150 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java b/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java
index 6e95797..a89aef6 100644
--- a/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java
+++ b/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java
@@ -56,6 +56,7 @@
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LDAPClientContext;
import org.forgerock.opendj.ldap.LDAPClientContext.ConnectionEventListener;
+import org.forgerock.opendj.ldap.LdapException;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.requests.UnbindRequest;
import org.forgerock.opendj.ldap.responses.CompareResult;
@@ -540,7 +541,7 @@
}
private FlowableEmitter<Response> getAttachedEmitter(final Operation operation) {
- return ((FlowableEmitter<Response>) operation.getAttachment(REACTIVE_OUT));
+ return (FlowableEmitter<Response>) operation.getAttachment(REACTIVE_OUT);
}
private Response toResponse(final SearchResultEntry searchEntry) {
@@ -1161,12 +1162,7 @@
*/
private boolean processAddRequest(final QueueingStrategy queueingStrategy, final LDAPMessage message,
final List<Control> controls, final FlowableEmitter<Response> out) {
- if (ldapVersion == 2 && !controls.isEmpty()) {
- // LDAPv2 clients aren't allowed to send controls.
- out.onNext(Responses.newResult(ResultCode.PROTOCOL_ERROR)
- .setDiagnosticMessage(ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get().toString()));
- out.onComplete();
- disconnectControlsNotAllowed();
+ if (ldapV2HasControls(controls, out)) {
return false;
}
@@ -1182,21 +1178,7 @@
logger.traceException(de);
final Result result = Responses.newResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && addOp.getResponseControls() != null) {
- for (Control control : addOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
-
+ setDetails(result, de, addOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1204,10 +1186,6 @@
return connectionValid;
}
- private void disconnectControlsNotAllowed() {
- disconnect(DisconnectReason.PROTOCOL_ERROR, false, ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
- }
-
/**
* Processes the provided LDAP message as a bind request.
*
@@ -1292,20 +1270,7 @@
logger.traceException(de);
final Result result = Responses.newBindResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && bindOp.getResponseControls() != null) {
- for (Control control : bindOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
+ setDetails(result, de, bindOp.getResponseControls());
out.onNext(result);
out.onComplete();
@@ -1356,20 +1321,7 @@
logger.traceException(de);
final CompareResult result = Responses.newCompareResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && compareOp.getResponseControls() != null) {
- for (Control control : compareOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
+ setDetails(result, de, compareOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1391,12 +1343,7 @@
*/
private boolean processDeleteRequest(final QueueingStrategy queueingStrategy, final LDAPMessage message,
final List<Control> controls, final FlowableEmitter<Response> out) {
- if (ldapVersion == 2 && !controls.isEmpty()) {
- // LDAPv2 clients aren't allowed to send controls.
- out.onNext(Responses.newResult(ResultCode.PROTOCOL_ERROR)
- .setDiagnosticMessage(ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get().toString()));
- out.onComplete();
- disconnectControlsNotAllowed();
+ if (ldapV2HasControls(controls, out)) {
return false;
}
@@ -1412,21 +1359,7 @@
logger.traceException(de);
final Result result = Responses.newResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && deleteOp.getResponseControls() != null) {
- for (Control control : deleteOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
-
+ setDetails(result, de, deleteOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1480,20 +1413,7 @@
} catch (DirectoryException de) {
logger.traceException(de);
final Result result = Responses.newGenericExtendedResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && extendedOp.getResponseControls() != null) {
- for (Control control : extendedOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
+ setDetails(result, de, extendedOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1515,12 +1435,7 @@
*/
private boolean processModifyRequest(final QueueingStrategy queueingStrategy, final LDAPMessage message,
final List<Control> controls, final FlowableEmitter<Response> out) {
- if (ldapVersion == 2 && !controls.isEmpty()) {
- // LDAPv2 clients aren't allowed to send controls.
- out.onNext(Responses.newResult(ResultCode.PROTOCOL_ERROR)
- .setDiagnosticMessage(ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get().toString()));
- out.onComplete();
- disconnectControlsNotAllowed();
+ if (ldapV2HasControls(controls, out)) {
return false;
}
@@ -1535,20 +1450,7 @@
} catch (DirectoryException de) {
logger.traceException(de);
final Result result = Responses.newResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && modifyOp.getResponseControls() != null) {
- for (Control control : modifyOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
+ setDetails(result, de, modifyOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1570,12 +1472,7 @@
*/
private boolean processModifyDNRequest(final QueueingStrategy queueingStrategy, final LDAPMessage message,
final List<Control> controls, final FlowableEmitter<Response> out) {
- if (ldapVersion == 2 && !controls.isEmpty()) {
- // LDAPv2 clients aren't allowed to send controls.
- out.onNext(Responses.newResult(ResultCode.PROTOCOL_ERROR)
- .setDiagnosticMessage(ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get().toString()));
- out.onComplete();
- disconnectControlsNotAllowed();
+ if (ldapV2HasControls(controls, out)) {
return false;
}
@@ -1592,20 +1489,7 @@
logger.traceException(de);
final Result result = Responses.newResult(de.getResultCode());
- if (de.getLocalizedMessage() != null) {
- result.setDiagnosticMessage(de.getLocalizedMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && modifyDNOp.getResponseControls() != null) {
- for (Control control : modifyDNOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
+ setDetails(result, de, modifyDNOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1627,12 +1511,7 @@
*/
private boolean processSearchRequest(final QueueingStrategy queueingStrategy, final LDAPMessage message,
final List<Control> controls, final FlowableEmitter<Response> out) {
- if (ldapVersion == 2 && !controls.isEmpty()) {
- // LDAPv2 clients aren't allowed to send controls.
- out.onNext(Responses.newResult(ResultCode.PROTOCOL_ERROR)
- .setDiagnosticMessage(ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get().toString()));
- out.onComplete();
- disconnectControlsNotAllowed();
+ if (ldapV2HasControls(controls, out)) {
return false;
}
@@ -1650,20 +1529,7 @@
logger.traceException(de);
final Result result = Responses.newResult(de.getResultCode());
- if (de.getMessage() != null) {
- result.setDiagnosticMessage(de.getMessage());
- }
- if (de.getMatchedDN() != null) {
- result.setMatchedDN(de.getMatchedDN().toString());
- }
- if (de.getReferralURLs() != null) {
- result.getReferralURIs().addAll(de.getReferralURLs());
- }
- if (ldapVersion != 2 && searchOp.getResponseControls() != null) {
- for (Control control : searchOp.getResponseControls()) {
- result.addControl(Converters.from(control));
- }
- }
+ setDetails(result, de, searchOp.getResponseControls());
out.onNext(result);
out.onComplete();
}
@@ -1671,6 +1537,39 @@
return connectionValid;
}
+ private void setDetails(Result result, DirectoryException de, List<Control> responseControls) {
+ if (de.getLocalizedMessage() != null) {
+ result.setDiagnosticMessage(de.getLocalizedMessage());
+ }
+ if (de.getMatchedDN() != null) {
+ result.setMatchedDN(de.getMatchedDN().toString());
+ }
+ if (de.getReferralURLs() != null) {
+ result.getReferralURIs().addAll(de.getReferralURLs());
+ }
+ if (ldapVersion != 2 && responseControls != null) {
+ for (Control control : responseControls) {
+ result.addControl(Converters.from(control));
+ }
+ }
+ }
+
+ /** LDAPv2 clients aren't allowed to send controls. */
+ private boolean ldapV2HasControls(final List<Control> controls, final FlowableEmitter<Response> out) {
+ if (ldapVersion == 2 && !controls.isEmpty()) {
+ out.onNext(Responses.newResult(ResultCode.PROTOCOL_ERROR)
+ .setDiagnosticMessage(ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get().toString()));
+ out.onComplete();
+ disconnectControlsNotAllowed();
+ return true;
+ }
+ return false;
+ }
+
+ private void disconnectControlsNotAllowed() {
+ disconnect(DisconnectReason.PROTOCOL_ERROR, false, ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
+ }
+
/**
* Processes the provided LDAP message as an unbind request.
*
@@ -1820,7 +1719,7 @@
return clientContext.getSecurityStrengthFactor();
}
- /** Upstream -> BlockingBackpressureSubscription -> Downstream */
+ /** Upstream -> BlockingBackpressureSubscription -> Downstream. */
private final class BlockingBackpressureSubscription
implements Subscription, Publisher<Response>, Subscriber<Response> {
private long pendingRequests;
--
Gitblit v1.10.0