InternalClientConnection.java revision ea1068c292e9b341af6d6b563cd8988a96be20a9
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
* Portions Copyright 2011-2015 ForgeRock AS
*/
/**
* This class defines a pseudo-connection object that can be used for
* performing internal operations.
*/
mayInstantiate=true,
mayExtend=false,
mayInvoke=true)
public final class InternalClientConnection
extends ClientConnection
{
/**
* The protocol version string that will be used for internal bind
* operations. Since this is modeled after LDAPv3 binds, it will
* use a version number string of "3".
*/
/** The message ID counter to use for internal connections. */
private static AtomicInteger nextMessageID;
/** The connection ID counter to use for internal connections. */
private static AtomicLong nextConnectionID;
/** The operation ID counter to use for operations on this connection. */
private static AtomicLong nextOperationID;
/** The static connection for root-based connections. */
private static InternalClientConnection rootConnection;
/** The connection ID for this client connection. */
private final long connectionID;
static
{
}
/**
* Creates a new internal client connection that will be
* authenticated as a root user for which access control will not be
* enforced.
*/
private InternalClientConnection()
{
super();
// This connection will be authenticated as a root user so that no
// access control will be enforced.
try
{
true);
true);
true);
ATTR_ROOTDN_ALTERNATE_BIND_DN, true);
commonName));
true);
{
}
this.authenticationInfo =
new AuthenticationInfo(internalUserEntry, true);
super.setSizeLimit(0);
super.setTimeLimit(0);
super.setIdleTimeLimit(0);
super.setLookthroughLimit(0);
}
catch (DirectoryException de)
{
}
}
/**
* Creates a new internal client connection that will be
* authenticated as the specified user.
*
* @param authInfo The authentication information to use for the
* connection.
*/
{
super();
// Don't call super.setAuthenticationInfo() since this will register this
// connection in the authenticated users table, which is unnecessary and
// will also cause the connection to be leaked since internal connections
// are never closed/disconnected.
{
this.authenticationInfo = new AuthenticationInfo();
updatePrivileges(null, false);
}
else
{
this.authenticationInfo = authInfo;
}
super.setSizeLimit(0);
super.setTimeLimit(0);
super.setIdleTimeLimit(0);
super.setLookthroughLimit(0);
}
/**
* Creates a new internal client connection that will be
* authenticated as the specified user.
*
* @param userDN The DN of the entry to use as the
* authentication and authorization identity.
*
* @throws DirectoryException If a problem occurs while trying to
* get the entry for the provided user
* DN.
*/
throws DirectoryException
{
this(getAuthInfoForDN(userDN));
}
/**
* Creates an authentication information object for the user with
* the specified DN.
*
* @param userDN The DN of the user for whom to create an
* authentication information object.
*
* @return The appropriate authentication information object.
*
* @throws DirectoryException If a problem occurs while trying to
* create the authentication
* information object, or there is no
* such user in the directory.
*/
throws DirectoryException
{
{
return new AuthenticationInfo();
}
if (rootUserDN != null)
{
userDN = rootUserDN;
}
{
}
}
/**
* Retrieves a shared internal client connection that is
* authenticated as a root user.
*
* @return A shared internal client connection that is
* authenticated as a root user.
*/
public static InternalClientConnection getRootConnection()
{
if (rootConnection == null)
{
rootConnection = new InternalClientConnection();
}
return rootConnection;
}
/**
* Retrieves the operation ID that should be used for the next
* internal operation.
*
* @return The operation ID that should be used for the next
* internal operation.
*/
public static long nextOperationID()
{
if (opID < 0)
{
synchronized (nextOperationID)
{
{
return 0;
}
else
{
return nextOperationID.getAndIncrement();
}
}
}
return opID;
}
/**
* Retrieves the message ID that should be used for the next
* internal operation.
*
* @return The message ID that should be used for the next internal
* operation.
*/
public static int nextMessageID()
{
if (msgID < 0)
{
synchronized (nextMessageID)
{
{
return 1;
}
else
{
return nextMessageID.getAndIncrement();
}
}
}
return msgID;
}
/**
* Retrieves the unique identifier that has been assigned to this
* connection.
*
* @return The unique identifier that has been assigned to this
* connection.
*/
public long getConnectionID()
{
return connectionID;
}
/**
* Retrieves the connection handler that accepted this client
* connection.
*
* @return The connection handler that accepted this client
* connection.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
public ConnectionHandler<?> getConnectionHandler()
{
return InternalConnectionHandler.getInstance();
}
/**
* Retrieves the protocol that the client is using to communicate
* with the Directory Server.
*
* @return The protocol that the client is using to communicate
* with the Directory Server.
*/
public String getProtocol()
{
return "internal";
}
/**
* Retrieves a string representation of the address of the client.
*
* @return A string representation of the address of the client.
*/
public String getClientAddress()
{
return "internal";
}
/**
* Retrieves the port number for this connection on the client
* system.
*
* @return The port number for this connection on the client system.
*/
public int getClientPort()
{
return -1;
}
/**
* Retrieves a string representation of the address on the server to
* which the client connected.
*
* @return A string representation of the address on the server to
* which the client connected.
*/
public String getServerAddress()
{
return "internal";
}
/**
* Retrieves the port number for this connection on the server
* system if available.
*
* @return The port number for this connection on the server system
* or -1 if there is no server port associated with this
* connection (e.g. internal client).
*/
public int getServerPort()
{
return -1;
}
/**
* Retrieves the <CODE>java.net.InetAddress</CODE> associated with
* the remote client system.
*
* @return The <CODE>java.net.InetAddress</CODE> associated with
* the remote client system. It may be <CODE>null</CODE>
* if the client is not connected over an IP-based
* connection.
*/
public InetAddress getRemoteAddress()
{
return null;
}
/**
* Retrieves the <CODE>java.net.InetAddress</CODE> for the Directory
* Server system to which the client has established the connection.
*
* @return The <CODE>java.net.InetAddress</CODE> for the Directory
* Server system to which the client has established the
* connection. It may be <CODE>null</CODE> if the client
* is not connected over an IP-based connection.
*/
public InetAddress getLocalAddress()
{
return null;
}
/**
* Specifies the size limit that will be enforced for searches
* performed using this client connection. This method does nothing
* because connection-level size limits will never be enforced for
* internal client connections.
*
* @param sizeLimit The size limit that will be enforced for
* searches performed using this client
* connection.
*/
public void setSizeLimit(int sizeLimit)
{
// No implementation required. We never want to set a nonzero
// size limit for internal client connections.
}
/**
* Specifies the default maximum number of entries that should
* be checked for matches during a search. This method does nothing
* because connection-level lookthrough limits will never be
* enforced for internal client connections
*
* @param lookthroughLimit The default maximum number of
* entries that should be check for
* matches during a search.
*/
public void setLookthroughLimit(int lookthroughLimit)
{
// No implementation required. We never want to set a nonzero
// lookthrough limit for internal client connections.
}
/**
* Specifies the maximum length of time in milliseconds that this
* client connection will be allowed to remain idle before it should
* be disconnected. This method does nothing because internal
* client connections will not be terminated due to an idle time
* limit.
*
* @param idleTimeLimit The maximum length of time in milliseconds
* that this client connection will be
* allowed to remain idle before it should be
* disconnected.
*/
public void setIdleTimeLimit(long idleTimeLimit)
{
// No implementation required. We never want to set a nonzero
// idle time limit for internal client connections.
}
/**
* Specifies the time limit that will be enforced for searches
* performed using this client connection. This method does nothing
* because connection-level time limits will never be enforced for
* internal client connections.
*
* @param timeLimit The time limit that will be enforced for
* searches performed using this client
* connection.
*/
public void setTimeLimit(int timeLimit)
{
// No implementation required. We never want to set a nonzero
// time limit for internal client connections.
}
/** {@inheritDoc} */
public boolean isConnectionValid()
{
// This connection is always valid
return true;
}
/**
* Indicates whether this client connection is currently using a
* secure mechanism to communicate with the server. Note that this
* may change over time based on operations performed by the client
* or server (e.g., it may go from <CODE>false</CODE> to
* <CODE>true</CODE> if the client uses the StartTLS extended
* operation).
*
* @return <CODE>true</CODE> if the client connection is currently
* using a secure mechanism to communicate with the server,
* or <CODE>false</CODE> if not.
*/
public boolean isSecure()
{
return true;
}
/**
* Sends a response to the client based on the information in the
* provided operation.
*
* @param operation The operation for which to send the response.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
{
// There will not be any response sent by this method, since there
// is not an actual connection.
}
/**
* This method has no effect, as the authentication info for
* internal client connections is set when the connection is created
* and cannot be changed after the fact.
*
* @param authenticationInfo Information about the authentication
* that has been performed for this
* connection. It should not be
* <CODE>null</CODE>.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
public void setAuthenticationInfo(AuthenticationInfo
{
// No implementation required.
}
/**
* This method has no effect, as the authentication info for
* internal client connections is set when the connection is created
* and cannot be changed after the fact.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
public void setUnauthenticated()
{
// No implementation required.
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param rawEntryDN The DN to use for the entry to add.
* @param rawAttributes The set of attributes to include in the
* entry to add.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param rawEntryDN The DN to use for the entry to add.
* @param rawAttributes The set of attributes to include in the
* entry to add.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param rawEntryDN The DN to use for the entry to add.
* @param rawAttributes The set of attributes to include in the
* entry to add.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
new AddOperationBasis(this, nextOperationID(),
addOperation.setInternalOperation(true);
addOperation.run();
return addOperation;
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param entryDN The entry DN for the add
* operation.
* @param objectClasses The set of object classes for the
* add operation.
* @param userAttributes The set of user attributes for the
* add operation.
* @param operationalAttributes The set of operational attributes
* for the add operation.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param entryDN The entry DN for the add
* operation.
* @param objectClasses The set of object classes for the
* add operation.
* @param userAttributes The set of user attributes for the
* add operation.
* @param operationalAttributes The set of operational attributes
* for the add operation.
* @param controls The set of controls to include in
* the request.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
new AddOperationBasis(this, nextOperationID(),
addOperation.setInternalOperation(true);
addOperation.run();
return addOperation;
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param entry The entry to be added.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal add operation with the provided
* information.
*
* @param entry The entry to be added.
* @param controls The set of controls to include in the request.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
controls);
}
/**
* Processes an internal add operation based on the provided add
* change record entry.
*
* @param addRecord The add change record entry to be processed.
*
* @return A reference to the add operation that was processed and
* contains information about the result of the processing.
*/
{
{
if (a.getAttributeType().isObjectClass())
{
for (ByteString v : a)
{
}
}
else
{
e.addAttribute(a, duplicateValues);
}
}
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param rawBindDN The bind DN for the operation.
* @param password The bind password for the operation.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param rawBindDN The bind DN for the operation.
* @param password The bind password for the operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param rawBindDN The bind DN for the operation.
* @param password The bind password for the operation.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param rawBindDN The bind DN for the operation.
* @param password The bind password for the operation.
* @param controls The set of controls to include in the request.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
new BindOperationBasis(this, nextOperationID(),
bindOperation.run();
return bindOperation;
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param bindDN The bind DN for the operation.
* @param password The bind password for the operation.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param bindDN The bind DN for the operation.
* @param password The bind password for the operation.
* @param controls The set of controls to include in the request.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
new BindOperationBasis(this, nextOperationID(),
bindOperation.run();
return bindOperation;
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param rawBindDN The bind DN for the operation.
* @param saslMechanism The SASL mechanism for the operation.
* @param saslCredentials The SASL credentials for the operation.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
null);
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param rawBindDN The bind DN for the operation.
* @param saslMechanism The SASL mechanism for the operation.
* @param saslCredentials The SASL credentials for the operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
new BindOperationBasis(this, nextOperationID(),
bindOperation.run();
return bindOperation;
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param bindDN The bind DN for the operation.
* @param saslMechanism The SASL mechanism for the operation.
* @param saslCredentials The SASL credentials for the operation.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
null);
}
/**
* Processes an internal bind operation with the provided
* information. Note that regardless of whether the bind is
* successful, the authentication state for this internal connection
* will not be altered in any way.
*
* @param bindDN The bind DN for the operation.
* @param saslMechanism The SASL mechanism for the operation.
* @param saslCredentials The SASL credentials for the operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the bind operation that was processed and
* contains information about the result of the processing.
*/
{
new BindOperationBasis(this, nextOperationID(),
bindOperation.run();
return bindOperation;
}
/**
* Processes an internal compare operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the compare operation.
* @param attributeType The attribute type for the compare
* operation.
* @param assertionValue The assertion value for the compare
* operation.
*
* @return A reference to the compare operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal compare operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the compare operation.
* @param attributeType The attribute type for the compare
* operation.
* @param assertionValue The assertion value for the compare
* operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the compare operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal compare operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the compare operation.
* @param attributeType The attribute type for the compare
* operation.
* @param assertionValue The assertion value for the compare
* operation.
*
* @return A reference to the compare operation that was processed
* and contains information about the result of the
* processing.
*/
{
null);
}
/**
* Processes an internal compare operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the compare operation.
* @param attributeType The attribute type for the compare
* operation.
* @param assertionValue The assertion value for the compare
* operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the compare operation that was processed
* and contains information about the result of the
* processing.
*/
{
new CompareOperationBasis(this, nextOperationID(),
return compareOperation;
}
/**
* Processes an internal compare operation with the provided
* information.
*
* @param entryDN The entry DN for the compare operation.
* @param attributeType The attribute type for the compare
* operation.
* @param assertionValue The assertion value for the compare
* operation.
*
* @return A reference to the compare operation that was processed
* and contains information about the result of the
* processing.
*/
{
null);
}
/**
* Processes an internal compare operation with the provided
* information.
*
* @param entryDN The entry DN for the compare operation.
* @param attributeType The attribute type for the compare
* operation.
* @param assertionValue The assertion value for the compare
* operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the compare operation that was processed
* and contains information about the result of the
* processing.
*/
{
new CompareOperationBasis(this, nextOperationID(),
return compareOperation;
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the delete operation.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the delete operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the delete operation.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param rawEntryDN The entry DN for the delete operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
{
new DeleteOperationBasis(this, nextOperationID(),
return deleteOperation;
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param entryDN The entry DN for the delete operation.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param entryDN The entry DN for the delete operation.
* @param controls The set of controls to include in the request.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
{
new DeleteOperationBasis(this, nextOperationID(),
return deleteOperation;
}
/**
* Processes an internal delete operation with the provided
* information.
*
* @param deleteRecord The delete change record entry to be
* processed.
*
* @return A reference to the delete operation that was processed
* and contains information about the result of the
* processing.
*/
public DeleteOperation processDelete(
{
}
/**
* Processes an internal extended operation with the provided
* information.
*
* @param requestOID The OID for the extended request.
* @param requestValue The encoded value for the extended
* operation, or <CODE>null</CODE> if there is
* no value.
*
* @return A reference to the extended operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal extended operation with the provided
* information.
*
* @param requestOID The OID for the extended request.
* @param requestValue The encoded value for the extended
* operation, or <CODE>null</CODE> if there is
* no value.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the extended operation that was processed
* and contains information about the result of the
* processing.
*/
{
new ExtendedOperationBasis(this, nextOperationID(),
return extendedOperation;
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param rawEntryDN The raw entry DN for this modify
* operation.
* @param rawModifications The set of modifications for this
* modify operation.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param rawEntryDN The raw entry DN for this modify
* operation.
* @param rawModifications The set of modifications for this
* modify operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param rawEntryDN The raw entry DN for this modify
* operation.
* @param rawModifications The set of modifications for this
* modify operation.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param rawEntryDN The raw entry DN for this modify
* operation.
* @param rawModifications The set of modifications for this
* modify operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
{
new ModifyOperationBasis(this, nextOperationID(),
return modifyOperation;
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param entryDN The entry DN for this modify operation.
* @param modifications The set of modifications for this modify
* operation.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
{
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param entryDN The entry DN for this modify operation.
* @param modifications The set of modifications for this modify
* operation.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
{
new ModifyOperationBasis(this, nextOperationID(),
return modifyOperation;
}
/**
* Processes an internal modify operation with the provided
* information.
*
* @param modifyRecord The modify change record entry with
* information about the changes to perform.
*
* @return A reference to the modify operation that was processed
* and contains information about the result of the
* processing.
*/
public ModifyOperation processModify(
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN)
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN)
{
null);
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param rawNewSuperior The new superior for the modify DN
* operation, or <CODE>null</CODE> if the
* entry will remain below the same parent.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param rawNewSuperior The new superior for the modify DN
* operation, or <CODE>null</CODE> if the
* entry will remain below the same parent.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param rawNewSuperior The new superior for the modify DN
* operation, or <CODE>null</CODE> if the
* entry will remain below the same parent.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param rawEntryDN The current DN of the entry to rename.
* @param rawNewRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param rawNewSuperior The new superior for the modify DN
* operation, or <CODE>null</CODE> if the
* entry will remain below the same parent.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
new ModifyDNOperationBasis(this, nextOperationID(),
return modifyDNOperation;
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param entryDN The current DN of the entry to rename.
* @param newRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN)
{
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param entryDN The current DN of the entry to rename.
* @param newRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param newSuperior The new superior for the modify DN
* operation, or <CODE>null</CODE> if the
* entry will remain below the same parent.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
null);
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param entryDN The current DN of the entry to rename.
* @param newRDN The new RDN to use for the entry.
* @param deleteOldRDN The flag indicating whether the old RDN
* value is to be removed from the entry.
* @param newSuperior The new superior for the modify DN
* operation, or <CODE>null</CODE> if the
* entry will remain below the same parent.
* @param controls The set of controls to include in the
* request.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
boolean deleteOldRDN,
{
new ModifyDNOperationBasis(this, nextOperationID(),
return modifyDNOperation;
}
/**
* Processes an internal modify DN operation with the provided
* information.
*
* @param modifyDNRecord The modify DN change record entry with
* information about the processing to
* perform.
*
* @return A reference to the modify DN operation that was
* processed and contains information about the result of
* the processing.
*/
public ModifyDNOperation processModifyDN(
{
}
/**
* Processes an internal search operation with the provided
* information.
*
* @param request The search request.
* @return A reference to the internal search operation that was
* processed and contains information about the result of
* the processing.
*/
{
}
/**
* Processes an internal search operation with the provided
* information.
*
* @param request The search request.
* @param searchListener The internal search listener that should
* be used to handle the matching entries
* and references.
* @return A reference to the internal search operation that was
* processed and contains information about the result of
* the processing.
*/
public InternalSearchOperation processSearch(final SearchRequest request, InternalSearchListener searchListener)
{
// FIXME uncomment this after we move to the SDK:
// if (Filter.objectClassPresent().equals(filter)) {
// filter = Filter.alwaysTrue();
// }
return searchOperation;
}
/**
* Sends the provided search result entry to the client.
*
* @param searchOperation The search operation with which the
* entry is associated.
* @param searchEntry The search result entry to be sent to
* the client.
*
* @throws DirectoryException If a problem occurs while processing
* the entry and the search should be
* terminated.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
throws DirectoryException
{
}
/**
* Sends the provided search result reference to the client.
*
* @param searchOperation The search operation with which the
* reference is associated.
* @param searchReference The search result reference to be sent
* to the client.
*
* @return <CODE>true</CODE> if the client is able to accept
* referrals, or <CODE>false</CODE> if the client cannot
* handle referrals and no more attempts should be made to
* send them for the associated search operation.
*
* @throws DirectoryException If a problem occurs while processing
* the entry and the search should be
* terminated.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
throws DirectoryException
{
return true;
}
/**
* Sends the provided intermediate response message to the client.
*
* @param intermediateResponse The intermediate response message
* to be sent.
*
* @return <CODE>true</CODE> if processing on the associated
* operation should continue, or <CODE>false</CODE> if not.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
protected boolean sendIntermediateResponseMessage(
{
// FIXME -- Do we need to support internal intermediate responses?
// If so, then implement this.
return false;
}
/**
* Closes the connection to the client, optionally sending it a
* message indicating the reason for the closure. Note that the
* ability to send a notice of disconnection may not be available
* for all protocols or under all circumstances.
*
* @param disconnectReason The disconnect reason that provides the
* generic cause for the disconnect.
* @param sendNotification Indicates whether to try to provide
* notification to the client that the
* connection will be closed.
* @param message The message to send to the client. It
* may be <CODE>null</CODE> if no
* notification is to be sent.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
boolean sendNotification,
{
// No implementation is required since there is nothing to
// disconnect. Further, since there is no real disconnect, we can
// wait to have the garbage collector call
// finalizeConnectionInternal whenever this internal connection is
// garbage collected.
}
/**
* Retrieves the set of operations in progress for this client
* connection. This list must not be altered by any caller.
*
* @return The set of operations in progress for this client
* connection.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
{
return Collections.emptyList();
}
/**
* Retrieves the operation in progress with the specified message
* ID.
*
* @param messageID The message ID of the operation to retrieve.
*
* @return The operation in progress with the specified message ID,
* or <CODE>null</CODE> if no such operation could be
* found.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
{
// Internal operations will not be tracked.
return null;
}
/**
* Removes the provided operation from the set of operations in
* progress for this client connection. Note that this does not
* make any attempt to cancel any processing that may already be in
* progress for the operation.
*
* @param messageID The message ID of the operation to remove from
* the set of operations in progress.
*
* @return <CODE>true</CODE> if the operation was found and removed
* from the set of operations in progress, or
* <CODE>false</CODE> if not.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
public boolean removeOperationInProgress(int messageID)
{
// No implementation is required, since internal operations will
// not be tracked.
return false;
}
/**
* Attempts to cancel the specified operation.
*
* @param messageID The message ID of the operation to cancel.
* @param cancelRequest An object providing additional information
* about how the cancel should be processed.
*
* @return A cancel result that either indicates that the cancel
* was successful or provides a reason that it was not.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
{
// Internal operations cannot be cancelled.
// TODO: i18n
}
/**
* Attempts to cancel all operations in progress on this connection.
*
* @param cancelRequest An object providing additional information
* about how the cancel should be processed.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
{
// No implementation is required since internal operations cannot
// be cancelled.
}
/**
* Attempts to cancel all operations in progress on this connection
* except the operation with the specified message ID.
*
* @param cancelRequest An object providing additional information
* about how the cancel should be processed.
* @param messageID The message ID of the operation that
* should not be canceled.
*/
mayInstantiate=false,
mayExtend=false,
mayInvoke=false)
int messageID)
{
// No implementation is required since internal operations cannot
// be cancelled.
}
/**
* Retrieves a one-line summary of this client connection in a form
* that is suitable for including in the monitor entry for the
* associated connection handler. It should be in a format that is
* both human readable and machine parseable (e.g., a
* space-delimited name-value list, with quotes around the values).
*
* @return A one-line summary of this client connection in a form
* that is suitable for including in the monitor entry for
* the associated connection handler.
*/
public String getMonitorSummary()
{
}
/**
* Appends a string representation of this client connection to the
* provided buffer.
*
* @param buffer The buffer to which the information should be
* appended.
*/
{
if (getAuthenticationInfo() != null)
{
}
}
/**
* Called near the end of server shutdown. This ensures that a new
* InternalClientConnection is created if the server is immediately
* restarted as part of an in-core restart.
*/
static void clearRootClientConnectionAtShutdown()
{
}
/**
* To be implemented.
*
* @return number of operations performed on this connection
*/
public long getNumberOfOperations() {
// Internal operations will not be limited.
return 0;
}
/**
* {@inheritDoc}
*/
public int getSSF() {
//Always return strongest value.
return 256;
}
}