From 663607ff7d0d0e884c4273b4f8a2b0ba488a1d47 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Sat, 06 Nov 2010 12:47:40 +0000
Subject: [PATCH] Fix potential race condition between handleClose and handleRead events in server filter that can lead to NPEs. (Sync from OpenDS, matthew_swift)
---
opendj-sdk/sdk/src/com/sun/opends/sdk/ldap/LDAPServerFilter.java | 131 +++++++++++++++++++++++++++++--------------
1 files changed, 88 insertions(+), 43 deletions(-)
diff --git a/opendj-sdk/sdk/src/com/sun/opends/sdk/ldap/LDAPServerFilter.java b/opendj-sdk/sdk/src/com/sun/opends/sdk/ldap/LDAPServerFilter.java
index 2dbe61b..2017775 100644
--- a/opendj-sdk/sdk/src/com/sun/opends/sdk/ldap/LDAPServerFilter.java
+++ b/opendj-sdk/sdk/src/com/sun/opends/sdk/ldap/LDAPServerFilter.java
@@ -844,9 +844,14 @@
final int messageID, final AbandonRequest request)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- conn.handleAbandon(messageID, request);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ conn.handleAbandon(messageID, request);
+ }
}
@@ -855,10 +860,16 @@
public void addRequest(final FilterChainContext ctx, final int messageID,
final AddRequest request) throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final AddHandler handler = new AddHandler(messageID, ctx.getConnection());
- conn.handleAdd(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final AddHandler handler = new AddHandler(messageID,
+ ctx.getConnection());
+ conn.handleAdd(messageID, request, handler, handler);
+ }
}
@@ -868,11 +879,16 @@
final int version, final GenericBindRequest bindContext)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final BindHandler handler = new BindHandler(messageID,
- ctx.getConnection());
- conn.handleBind(messageID, version, bindContext, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final BindHandler handler = new BindHandler(messageID,
+ ctx.getConnection());
+ conn.handleBind(messageID, version, bindContext, handler, handler);
+ }
}
@@ -882,11 +898,16 @@
final int messageID, final CompareRequest request)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final CompareHandler handler = new CompareHandler(messageID,
- ctx.getConnection());
- conn.handleCompare(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final CompareHandler handler = new CompareHandler(messageID,
+ ctx.getConnection());
+ conn.handleCompare(messageID, request, handler, handler);
+ }
}
@@ -896,11 +917,16 @@
final int messageID, final DeleteRequest request)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final DeleteHandler handler = new DeleteHandler(messageID,
- ctx.getConnection());
- conn.handleDelete(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final DeleteHandler handler = new DeleteHandler(messageID,
+ ctx.getConnection());
+ conn.handleDelete(messageID, request, handler, handler);
+ }
}
@@ -910,12 +936,16 @@
final FilterChainContext ctx, final int messageID,
final ExtendedRequest<R> request) throws UnexpectedRequestException
{
- final ExtendedHandler<R> handler = new ExtendedHandler<R>(messageID,
- ctx.getConnection());
-
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- conn.handleExtendedRequest(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final ExtendedHandler<R> handler = new ExtendedHandler<R>(messageID,
+ ctx.getConnection());
+ conn.handleExtendedRequest(messageID, request, handler, handler);
+ }
}
@@ -925,11 +955,16 @@
final int messageID, final ModifyDNRequest request)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final ModifyDNHandler handler = new ModifyDNHandler(messageID,
- ctx.getConnection());
- conn.handleModifyDN(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final ModifyDNHandler handler = new ModifyDNHandler(messageID,
+ ctx.getConnection());
+ conn.handleModifyDN(messageID, request, handler, handler);
+ }
}
@@ -939,11 +974,16 @@
final int messageID, final ModifyRequest request)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final ModifyHandler handler = new ModifyHandler(messageID,
- ctx.getConnection());
- conn.handleModify(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final ModifyHandler handler = new ModifyHandler(messageID,
+ ctx.getConnection());
+ conn.handleModify(messageID, request, handler, handler);
+ }
}
@@ -953,11 +993,16 @@
final int messageID, final SearchRequest request)
throws UnexpectedRequestException
{
- final ServerConnection<Integer> conn = LDAP_CONNECTION_ATTR.get(
- ctx.getConnection()).getServerConnection();
- final SearchHandler handler = new SearchHandler(messageID,
- ctx.getConnection());
- conn.handleSearch(messageID, request, handler, handler);
+ final ClientContextImpl clientContext = LDAP_CONNECTION_ATTR.get(ctx
+ .getConnection());
+ if (clientContext != null)
+ {
+ final ServerConnection<Integer> conn = clientContext
+ .getServerConnection();
+ final SearchHandler handler = new SearchHandler(messageID,
+ ctx.getConnection());
+ conn.handleSearch(messageID, request, handler, handler);
+ }
}
--
Gitblit v1.10.0