public class SearchRequestHandler extends LdapRequestHandler<org.apache.directory.api.ldap.model.message.SearchRequest>
| Modifier and Type | Field and Description |
|---|---|
private static boolean |
IS_DEBUG
Speedup for logs
|
private static org.slf4j.Logger |
LOG
The logger
|
protected ReplicationRequestHandler |
replicationReqHandler
The replication handler
|
private static org.slf4j.Logger |
SEARCH_TIME_LOG |
ldapServer| Constructor and Description |
|---|
SearchRequestHandler() |
| Modifier and Type | Method and Description |
|---|---|
private org.apache.directory.api.ldap.model.message.SearchResultDone |
abandonPagedSearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Manage the abandoned Paged Search (when paged size = 0).
|
private org.apache.directory.api.ldap.model.message.SearchResultDone |
doPagedSearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator control)
Handle a Paged Search request.
|
private org.apache.directory.api.ldap.model.message.SearchResultDone |
doSimpleSearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Conducts a simple search across the result set returning each entry
back except for the search response done.
|
private org.apache.directory.api.ldap.model.message.Response |
generateResponse(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.entry.Entry entry)
Generates a response for an entry retrieved from the server core based
on the nature of the request with respect to referral handling.
|
static org.apache.directory.api.ldap.model.entry.Entry |
getFarthestReferralAncestor(LdapSession session,
org.apache.directory.api.ldap.model.name.Dn target)
Searches up the ancestry of a Dn searching for the farthest referral
ancestor.
|
org.apache.directory.api.ldap.model.message.Referral |
getReferralOnAncestor(LdapSession session,
org.apache.directory.api.ldap.model.name.Dn reqTargetDn,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.entry.Entry referralAncestor)
Handles processing with referrals without ManageDsaIT decorator and with
an ancestor that is a referral.
|
org.apache.directory.api.ldap.model.message.Referral |
getReferralOnAncestorForSearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.entry.Entry referralAncestor)
Handles processing with referrals without ManageDsaIT decorator and with
an ancestor that is a referral.
|
private long |
getServerSizeLimit(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest request)
Return the server size limit
|
void |
handle(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Handle a Ldap message associated with a session
|
void |
handleException(LdapSession session,
org.apache.directory.api.ldap.model.message.ResultResponseRequest req,
java.lang.Exception e)
Handles processing with referrals without ManageDsaIT decorator.
|
private void |
handleIgnoringReferrals(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Main message handing method for search requests.
|
private void |
handleLookup(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Handles a simple lookup, or a RootDSE lookup.
|
private boolean |
handleLookupAndRootDse(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Handles the RootDSE and lookups searches
|
private void |
handlePersistentSearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.message.controls.PersistentSearch psearch)
Handles search requests containing the persistent search decorator but
delegates to doSimpleSearch() if the changesOnly parameter of the
decorator is set to false.
|
private void |
handleReferralEntryForSearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.entry.Entry entry)
Handles processing a referral response on a target entry which is a
referral.
|
private void |
handleReplication(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest searchRequest)
Handle the replication request.
|
private void |
handleWithReferrals(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Handles processing with referrals without ManageDsaIT decorator.
|
private boolean |
isSubSchemaSubEntrySearch(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Determines if a search request is a subSchemaSubEntry search.
|
private void |
modifyFilter(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req)
Alters the filter expression based on the presence of the
ManageDsaIT decorator.
|
private org.apache.directory.api.ldap.model.filter.EqualityNode<java.lang.String> |
newIsReferralEqualityNode(LdapSession session)
Constructs a new filter EqualityNode asserting that a candidate
objectClass is a referral.
|
private void |
readPagedResults(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.message.LdapResult ldapResult,
org.apache.directory.api.ldap.model.cursor.Cursor<org.apache.directory.api.ldap.model.entry.Entry> cursor,
long sizeLimit,
int pagedLimit,
PagedSearchContext pagedContext,
org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator pagedResultsControl) |
private PagedSearchContext |
removeContext(LdapSession session,
PagedSearchContext cookieInstance)
Remove a cookie instance from the session, if it exists.
|
void |
setReplicationReqHandler(ReplicationRequestHandler replicationReqHandler)
Install the replication handler when it's allowed by this server
|
private void |
setTimeLimitsOnCursor(org.apache.directory.api.ldap.model.message.SearchRequest req,
LdapSession session,
org.apache.directory.api.ldap.model.cursor.Cursor<org.apache.directory.api.ldap.model.entry.Entry> cursor)
Based on the server maximum time limits configured for search and the
requested time limits this method determines if at all to replace the
default ClosureMonitor of the result set Cursor with one that closes
the Cursor when either server mandated or request mandated time limits
are reached.
|
private void |
writeResults(LdapSession session,
org.apache.directory.api.ldap.model.message.SearchRequest req,
org.apache.directory.api.ldap.model.message.LdapResult ldapResult,
org.apache.directory.api.ldap.model.cursor.Cursor<org.apache.directory.api.ldap.model.entry.Entry> cursor,
long sizeLimit) |
getLdapServer, handleMessage, isConfidentialityRequirementSatisfied, rejectWithoutConfidentiality, setLdapServerprivate static final org.slf4j.Logger LOG
private static final org.slf4j.Logger SEARCH_TIME_LOG
private static final boolean IS_DEBUG
protected ReplicationRequestHandler replicationReqHandler
private org.apache.directory.api.ldap.model.filter.EqualityNode<java.lang.String> newIsReferralEqualityNode(LdapSession session) throws java.lang.Exception
session - the LdapSession to construct the node forEqualityNode (objectClass=referral) non-normalizedjava.lang.Exception - in the highly unlikely event of schema related failuresprivate void handlePersistentSearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.message.controls.PersistentSearch psearch) throws java.lang.Exception
session - the LdapSession for which this search is conductedreq - the search request containing the persistent search decoratorpsearchDecorator - the persistent search decorator extractedjava.lang.Exception - if failures are encountered while searchingpublic final void handle(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
handle in class LdapRequestHandler<org.apache.directory.api.ldap.model.message.SearchRequest>session - The associated sessionreq - The message we have to handlejava.lang.Exception - If there is an error during the processing of this messageprivate void handleReplication(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest searchRequest) throws org.apache.directory.api.ldap.model.exception.LdapException
org.apache.directory.api.ldap.model.exception.LdapExceptionprivate void handleLookup(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
session - the LdapSession for which this search is conductedreq - the search request on the RootDSEjava.lang.Exception - if failures are encountered while searchingprivate void setTimeLimitsOnCursor(org.apache.directory.api.ldap.model.message.SearchRequest req,
LdapSession session,
org.apache.directory.api.ldap.model.cursor.Cursor<org.apache.directory.api.ldap.model.entry.Entry> cursor)
req - the SearchRequest issuedsession - the LdapSession on which search was requestedcursor - the EntryFilteringCursor over the search resultsprivate long getServerSizeLimit(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest request)
private void writeResults(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.message.LdapResult ldapResult, org.apache.directory.api.ldap.model.cursor.Cursor<org.apache.directory.api.ldap.model.entry.Entry> cursor, long sizeLimit) throws java.lang.Exception
java.lang.Exceptionprivate void readPagedResults(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.message.LdapResult ldapResult, org.apache.directory.api.ldap.model.cursor.Cursor<org.apache.directory.api.ldap.model.entry.Entry> cursor, long sizeLimit, int pagedLimit, PagedSearchContext pagedContext, org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator pagedResultsControl) throws java.lang.Exception
java.lang.Exceptionprivate org.apache.directory.api.ldap.model.message.SearchResultDone abandonPagedSearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
java.lang.Exceptionprivate PagedSearchContext removeContext(LdapSession session, PagedSearchContext cookieInstance)
private org.apache.directory.api.ldap.model.message.SearchResultDone doPagedSearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsDecorator control) throws java.lang.Exception
java.lang.Exceptionprivate org.apache.directory.api.ldap.model.message.SearchResultDone doSimpleSearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
session - the LDAP session object for this requestreq - the search requestjava.lang.Exception - if there are failures while processing the requestprivate org.apache.directory.api.ldap.model.message.Response generateResponse(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.entry.Entry entry) throws java.lang.Exception
req - the search requestentry - the entry to be handledjava.lang.Exception - if there are problems in generating the responseprivate void modifyFilter(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
session - the session to use to construct the filter (schema access)req - the request to get the original filter fromjava.lang.Exception - if there are schema access problemsprivate boolean handleLookupAndRootDse(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
java.lang.Exceptionprivate void handleIgnoringReferrals(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req)
session - the associated sessionreq - the received SearchRequestprivate void handleWithReferrals(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws org.apache.directory.api.ldap.model.exception.LdapException
org.apache.directory.api.ldap.model.exception.LdapExceptionprivate void handleReferralEntryForSearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.entry.Entry entry) throws java.lang.Exception
session - the session to use for processingreq - the requestentry - the entry associated with the requestjava.lang.Exceptionprivate boolean isSubSchemaSubEntrySearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req) throws java.lang.Exception
Determines if a search request is a subSchemaSubEntry search.
It is a schema search if: - the base Dn is the Dn of the subSchemaSubEntry of the root DSE - and the scope is BASE OBJECT - and the filter is (objectClass=subschema) (RFC 4512, 4.4,)
However in this method we only check the first condition to avoid performance issues.
session - the LDAP sessionreq - the request issuedjava.lang.Exception - the exceptionpublic org.apache.directory.api.ldap.model.message.Referral getReferralOnAncestorForSearch(LdapSession session, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.entry.Entry referralAncestor) throws java.lang.Exception
referralAncestor - the farthest referral ancestor of the missing
entryjava.lang.Exceptionpublic org.apache.directory.api.ldap.model.message.Referral getReferralOnAncestor(LdapSession session, org.apache.directory.api.ldap.model.name.Dn reqTargetDn, org.apache.directory.api.ldap.model.message.SearchRequest req, org.apache.directory.api.ldap.model.entry.Entry referralAncestor) throws java.lang.Exception
referralAncestor - the farthest referral ancestor of the missing
entryjava.lang.Exceptionpublic void handleException(LdapSession session, org.apache.directory.api.ldap.model.message.ResultResponseRequest req, java.lang.Exception e)
handleException in class LdapRequestHandler<org.apache.directory.api.ldap.model.message.SearchRequest>public static final org.apache.directory.api.ldap.model.entry.Entry getFarthestReferralAncestor(LdapSession session, org.apache.directory.api.ldap.model.name.Dn target) throws java.lang.Exception
java.lang.Exception - if there are problems during this searchpublic void setReplicationReqHandler(ReplicationRequestHandler replicationReqHandler)
replicationReqHandler - The replication handler provider