001    /*
002     * CDDL HEADER START
003     *
004     * The contents of this file are subject to the terms of the
005     * Common Development and Distribution License, Version 1.0 only
006     * (the "License").  You may not use this file except in compliance
007     * with the License.
008     *
009     * You can obtain a copy of the license at
010     * docs/licenses/cddl.txt
011     * or http://www.opensource.org/licenses/cddl1.php.
012     * See the License for the specific language governing permissions
013     * and limitations under the License.
014     *
015     * When distributing Covered Code, include this CDDL HEADER in each
016     * file and include the License file at
017     * docs/licenses/cddl.txt.  If applicable,
018     * add the following below this CDDL HEADER, with the fields enclosed
019     * by brackets "[]" replaced with your own identifying information:
020     *      Portions Copyright [yyyy] [name of copyright owner]
021     *
022     * CDDL HEADER END
023     *
024     *
025     *      Copyright 2010-2014 UnboundID Corp.
026     */
027    package com.unboundid.directory.sdk.common.scripting;
028    
029    
030    
031    import java.security.cert.Certificate;
032    import java.util.List;
033    import java.util.Map;
034    
035    import com.unboundid.directory.sdk.broker.internal.IdentityBrokerExtension;
036    import com.unboundid.directory.sdk.common.config.AccessLoggerConfig;
037    import com.unboundid.directory.sdk.common.internal.Reconfigurable;
038    import com.unboundid.directory.sdk.common.operation.AbandonRequest;
039    import com.unboundid.directory.sdk.common.operation.AddRequest;
040    import com.unboundid.directory.sdk.common.operation.AddResult;
041    import com.unboundid.directory.sdk.common.operation.BindResult;
042    import com.unboundid.directory.sdk.common.operation.CompareRequest;
043    import com.unboundid.directory.sdk.common.operation.CompareResult;
044    import com.unboundid.directory.sdk.common.operation.DeleteRequest;
045    import com.unboundid.directory.sdk.common.operation.DeleteResult;
046    import com.unboundid.directory.sdk.common.operation.ExtendedRequest;
047    import com.unboundid.directory.sdk.common.operation.ExtendedResult;
048    import com.unboundid.directory.sdk.common.operation.GenericResult;
049    import com.unboundid.directory.sdk.common.operation.ModifyRequest;
050    import com.unboundid.directory.sdk.common.operation.ModifyResult;
051    import com.unboundid.directory.sdk.common.operation.ModifyDNRequest;
052    import com.unboundid.directory.sdk.common.operation.ModifyDNResult;
053    import com.unboundid.directory.sdk.common.operation.SASLBindRequest;
054    import com.unboundid.directory.sdk.common.operation.SearchRequest;
055    import com.unboundid.directory.sdk.common.operation.SearchResult;
056    import com.unboundid.directory.sdk.common.operation.SimpleBindRequest;
057    import com.unboundid.directory.sdk.common.operation.UnbindRequest;
058    import com.unboundid.directory.sdk.common.types.AssuredReplicationResult;
059    import com.unboundid.directory.sdk.common.types.ClientContext;
060    import com.unboundid.directory.sdk.common.types.CompletedOperationContext;
061    import com.unboundid.directory.sdk.common.types.CompletedSearchOperationContext;
062    import com.unboundid.directory.sdk.common.types.DisconnectReason;
063    import com.unboundid.directory.sdk.common.types.Entry;
064    import com.unboundid.directory.sdk.common.types.ForwardTarget;
065    import com.unboundid.directory.sdk.common.types.OperationContext;
066    import com.unboundid.directory.sdk.common.types.ServerContext;
067    import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension;
068    import com.unboundid.directory.sdk.metrics.internal.MetricsEngineExtension;
069    import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension;
070    import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension;
071    import com.unboundid.ldap.sdk.Control;
072    import com.unboundid.ldap.sdk.IntermediateResponse;
073    import com.unboundid.ldap.sdk.LDAPException;
074    import com.unboundid.ldap.sdk.ResultCode;
075    import com.unboundid.ldap.sdk.unboundidds.MoveSubtreeResult;
076    import com.unboundid.util.Extensible;
077    import com.unboundid.util.ThreadSafety;
078    import com.unboundid.util.ThreadSafetyLevel;
079    import com.unboundid.util.args.ArgumentException;
080    import com.unboundid.util.args.ArgumentParser;
081    
082    
083    
084    /**
085     * This class defines an API that must be implemented by scripted extensions
086     * which record information about interaction with clients, including
087     * connections established and received and operations requested and completed.
088     * <BR><BR>
089     * Access loggers will be invoked for the following events:
090     * <UL>
091     *   <LI>Whenever a new connection is established.</LI>
092     *   <LI>Whenever an existing connection is closed or terminated.</LI>
093     *   <LI>Whenever an abandon, add, bind, compare, delete, extended, modify,
094     *       modify DN, search, or unbind request is received.</LI>
095     *   <LI>Whenever an abandon, add, bind, compare, delete, extended, modify,
096     *       modify DN, or search request is forwarded to another server for
097     *       processing.</LI>
098     *   <LI>If a forwarded add, bind, compare, delete, extended, modify, modify DN,
099     *       or search operation fails.</LI>
100     *   <LI>After sending the result for an add, bind, compare, delete, extended,
101     *       modify, modify DN, or search operation.</LI>
102     *   <LI>After completing processing for an abandon operation.</LI>
103     *   <LI>After sending a search result entry, search result reference, or
104     *       intermediate response message to the client.</LI>
105     * </UL>
106     * <BR><BR>
107     * Each access logger may configured to indicate whether to include or exclude
108     * internal and/or replicated operations, and criteria may be used to provide
109     * filtered logging.  This is handled automatically by the server, so individual
110     * access logger implementations do not need to attempt to perform that
111     * filtering on their own.  However, they may perform additional processing if
112     * desired to further narrow the set of messages that should be logged.
113     * <BR>
114     * <H2>Configuring Groovy-Scripted Access Loggers</H2>
115     * In order to configure a scripted access logger based on this API and written
116     * in the Groovy scripting language, use a command
117     * like:
118     * <PRE>
119     *      dsconfig create-log-publisher \
120     *           --publisher-name "<I>{logger-name}</I>" \
121     *           --type groovy-scripted-access \
122     *           --set enabled:true \
123     *           --set "script-class:<I>{class-name}</I>" \
124     *           --set "script-argument:<I>{name=value}</I>"
125     * </PRE>
126     * where "<I>{logger-name}</I>" is the name to use for the access logger
127     * instance, "<I>{class-name}</I>" is the fully-qualified name of the Groovy
128     * class written using this API, and "<I>{name=value}</I>" represents name-value
129     * pairs for any arguments to provide to the logger.  If multiple arguments
130     * should be provided to the logger, then the
131     * "<CODE>--set script-argument:<I>{name=value}</I></CODE>" option should be
132     * provided multiple times.
133     *
134     * @see  com.unboundid.directory.sdk.common.api.AccessLogger
135     * @see  com.unboundid.directory.sdk.common.api.FileBasedAccessLogger
136     * @see  ScriptedFileBasedAccessLogger
137     */
138    @Extensible()
139    @DirectoryServerExtension()
140    @DirectoryProxyServerExtension(appliesToLocalContent=true,
141         appliesToRemoteContent=false)
142    @SynchronizationServerExtension(appliesToLocalContent=true,
143         appliesToSynchronizedContent=false)
144    @MetricsEngineExtension()
145    @IdentityBrokerExtension()
146    @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
147    public abstract class ScriptedAccessLogger
148           implements Reconfigurable<AccessLoggerConfig>
149    {
150      /**
151       * Creates a new instance of this access logger.  All access logger
152       * implementations must include a default constructor, but any initialization
153       * should generally be done in the {@code initializeAccessLogger} method.
154       */
155      public ScriptedAccessLogger()
156      {
157        // No implementation is required.
158      }
159    
160    
161    
162      /**
163       * {@inheritDoc}
164       */
165      public void defineConfigArguments(final ArgumentParser parser)
166             throws ArgumentException
167      {
168        // No arguments will be allowed by default.
169      }
170    
171    
172    
173      /**
174       * Initializes this access logger.
175       *
176       * @param  serverContext  A handle to the server context for the server in
177       *                        which this extension is running.
178       * @param  config         The general configuration for this access logger.
179       * @param  parser         The argument parser which has been initialized from
180       *                        the configuration for this access logger.
181       *
182       * @throws  LDAPException  If a problem occurs while initializing this
183       *                         access logger.
184       */
185      public void initializeAccessLogger(final ServerContext serverContext,
186                                         final AccessLoggerConfig config,
187                                         final ArgumentParser parser)
188             throws LDAPException
189      {
190        // No initialization will be performed by default.
191      }
192    
193    
194    
195      /**
196       * Performs any cleanup which may be necessary when this access logger is to
197       * be taken out of service.
198       */
199      public void finalizeAccessLogger()
200      {
201        // No implementation is required.
202      }
203    
204    
205    
206      /**
207       * {@inheritDoc}
208       */
209      public boolean isConfigurationAcceptable(final AccessLoggerConfig config,
210                          final ArgumentParser parser,
211                          final List<String> unacceptableReasons)
212      {
213        // No extended validation will be performed.
214        return true;
215      }
216    
217    
218    
219      /**
220       * {@inheritDoc}
221       */
222      public ResultCode applyConfiguration(final AccessLoggerConfig config,
223                                           final ArgumentParser parser,
224                                           final List<String> adminActionsRequired,
225                                           final List<String> messages)
226      {
227        // By default, no configuration changes will be applied.  If there are any
228        // arguments, then add an admin action message indicating that the extension
229        // needs to be restarted for any changes to take effect.
230        if (! parser.getNamedArguments().isEmpty())
231        {
232          adminActionsRequired.add(
233               "No configuration change has actually been applied.  The new " +
234                    "configuration will not take effect until this access logger " +
235                    "is disabled and re-enabled or until the server is restarted.");
236        }
237    
238        return ResultCode.SUCCESS;
239      }
240    
241    
242    
243      /**
244       * Logs a message indicating that a new connection has been established.
245       *
246       * @param  clientContext  Information about the client connection that has
247       *                        been accepted.
248       */
249      public void logConnect(final ClientContext clientContext)
250      {
251        // No action will be taken by default.
252      }
253    
254    
255    
256      /**
257       * Logs a message indicating that a connection has been closed.
258       *
259       * @param  clientContext     Information about the client connection that has
260       *                           been closed.
261       * @param  disconnectReason  A general reason that the connection has been
262       *                           closed.
263       * @param  message           A message with additional information about the
264       *                           closure.  It may be {@code null} if none is
265       *                           available.
266       */
267      public void logDisconnect(final ClientContext clientContext,
268                                final DisconnectReason disconnectReason,
269                                final String message)
270      {
271        // No action will be taken by default.
272      }
273    
274    
275    
276      /**
277       * Logs a message about security negotiation performed by a client.
278       *
279       * @param  clientContext  Information about the client connection on which
280       *                        the negotiation was completed.
281       * @param  protocol       The security protocol selected by the negotiation.
282       *                        It may be {@code null} if no protocol is available.
283       * @param  cipher         The cipher suite selected by the negotiation.  It
284       *                        may be {@code null} if no cipher is available.
285       * @param  properties     A set of additional properties that may be included
286       *                        in the log message.  It may be {@code null} or empty
287       *                        if no additional properties are needed.
288       */
289      public void logSecurityNegotiation(final ClientContext clientContext,
290                                         final String protocol, final String cipher,
291                                         final Map<String,String> properties)
292      {
293        // No action will be taken by default.
294      }
295    
296    
297    
298      /**
299       * Logs a message about a certificate chain presented by a client.
300       *
301       * @param  clientContext  Information about the client that presented the
302       *                        certificate chain.
303       * @param  certChain      The certificate chain presented by the client.
304       * @param  authDN         The DN of the user as whom the client was
305       *                        automatically authenticated, or {@code null} if the
306       *                        client was not automatically authenticated.
307       */
308      public void logClientCertificateChain(final ClientContext clientContext,
309                                            final Certificate[] certChain,
310                                            final String authDN)
311      {
312        // No action will be taken by default.
313      }
314    
315    
316    
317      /**
318       * Logs a message about an abandon request received from a client.
319       *
320       * @param  opContext  The operation context for the abandon operation.
321       * @param  request    The abandon request that was received.
322       */
323      public void logAbandonRequest(final OperationContext opContext,
324                                    final AbandonRequest request)
325      {
326        // No action will be taken by default.
327      }
328    
329    
330    
331      /**
332       * Logs a message about an abandon request that will be forwarded to another
333       * server.
334       *
335       * @param  opContext  The operation context for the abandon operation.
336       * @param  request    The abandon request that was received.
337       * @param  target     Information about the server to which the request will
338       *                    be forwarded.
339       */
340      public void logAbandonForward(final OperationContext opContext,
341                                    final AbandonRequest request,
342                                    final ForwardTarget target)
343      {
344        // No action will be taken by default.
345      }
346    
347    
348    
349      /**
350       * Logs a message about the result of processing an abandon request.
351       *
352       * @param  opContext  The operation context for the abandon operation.
353       * @param  request    The abandon request that was received.
354       * @param  result     The result of processing the abandon request.
355       */
356      public void logAbandonResult(final CompletedOperationContext opContext,
357                                   final AbandonRequest request,
358                                   final GenericResult result)
359      {
360        // No action will be taken by default.
361      }
362    
363    
364    
365      /**
366       * Logs a message about an add request received from a client.
367       *
368       * @param  opContext  The operation context for the add operation.
369       * @param  request    The add request that was received.
370       */
371      public void logAddRequest(final OperationContext opContext,
372                                final AddRequest request)
373      {
374        // No action will be taken by default.
375      }
376    
377    
378    
379      /**
380       * Logs a message about an add request that will be forwarded to another
381       * server.
382       *
383       * @param  opContext  The operation context for the add operation.
384       * @param  request    The add request that was received.
385       * @param  target     Information about the server to which the request will
386       *                    be forwarded.
387       */
388      public void logAddForward(final OperationContext opContext,
389                                final AddRequest request,
390                                final ForwardTarget target)
391      {
392        // No action will be taken by default.
393      }
394    
395    
396    
397      /**
398       * Logs a message about a failure encountered while attempting to forward an
399       * add request to another server.
400       *
401       * @param  opContext  The operation context for the add operation.
402       * @param  request    The add request that was received.
403       * @param  target     Information about the server to which the request was
404       *                    forwarded.
405       * @param  failure    The exception that was received when attempting to
406       *                    forward the request.
407       */
408      public void logAddForwardFailure(final OperationContext opContext,
409                                       final AddRequest request,
410                                       final ForwardTarget target,
411                                       final LDAPException failure)
412      {
413        // No action will be taken by default.
414      }
415    
416    
417    
418      /**
419       * Logs a message about the result of processing an add request.
420       *
421       * @param  opContext  The operation context for the add operation.
422       * @param  request    The add request that was received.
423       * @param  result     The result of processing the add request.
424       */
425      public void logAddResponse(final CompletedOperationContext opContext,
426                                 final AddRequest request,
427                                 final AddResult result)
428      {
429        // No action will be taken by default.
430      }
431    
432    
433    
434      /**
435       * Logs a message about the result of replication assurance processing for an
436       * add operation.
437       *
438       * @param  opContext        The operation context for the add operation.
439       * @param  request          The add request that was received.
440       * @param  result           The result of processing the add request.
441       * @param  assuranceResult  The replication assurance processing result.
442       */
443      public void logAddAssuranceCompleted(
444                       final CompletedOperationContext opContext,
445                       final AddRequest request, final AddResult result,
446                       final AssuredReplicationResult assuranceResult)
447      {
448        // No action will be taken by default.
449      }
450    
451    
452    
453      /**
454       * Logs a message about a simple bind request received from a client.
455       *
456       * @param  opContext  The operation context for the bind operation.
457       * @param  request    The bind request that was received.
458       */
459      public void logBindRequest(final OperationContext opContext,
460                                 final SimpleBindRequest request)
461      {
462        // No action will be taken by default.
463      }
464    
465    
466    
467      /**
468       * Logs a message about a simple bind request that will be forwarded to
469       * another server.
470       *
471       * @param  opContext  The operation context for the bind operation.
472       * @param  request    The bind request that was received.
473       * @param  target     Information about the server to which the request will
474       *                    be forwarded.
475       */
476      public void logBindForward(final OperationContext opContext,
477                                    final SimpleBindRequest request,
478                                    final ForwardTarget target)
479      {
480        // No action will be taken by default.
481      }
482    
483    
484    
485      /**
486       * Logs a message about a failure encountered while attempting to forward a
487       * simple bind request to another server.
488       *
489       * @param  opContext  The operation context for the bind operation.
490       * @param  request    The bind request that was received.
491       * @param  target     Information about the server to which the request was
492       *                    forwarded.
493       * @param  failure    The exception that was received when attempting to
494       *                    forward the request.
495       */
496      public void logBindForwardFailure(final OperationContext opContext,
497                                        final SimpleBindRequest request,
498                                        final ForwardTarget target,
499                                        final LDAPException failure)
500      {
501        // No action will be taken by default.
502      }
503    
504    
505    
506      /**
507       * Logs a message about the result of processing a simple bind request.
508       *
509       * @param  opContext  The operation context for the bind operation.
510       * @param  request    The bind request that was received.
511       * @param  result     The result of processing the bind request.
512       */
513      public void logBindResponse(final CompletedOperationContext opContext,
514                                  final SimpleBindRequest request,
515                                  final BindResult result)
516      {
517        // No action will be taken by default.
518      }
519    
520    
521    
522      /**
523       * Logs a message about a SASL bind request received from a client.
524       *
525       * @param  opContext  The operation context for the bind operation.
526       * @param  request    The bind request that was received.
527       */
528      public void logBindRequest(final OperationContext opContext,
529                                 final SASLBindRequest request)
530      {
531        // No action will be taken by default.
532      }
533    
534    
535    
536      /**
537       * Logs a message about a SASL bind request that will be forwarded to
538       * another server.
539       *
540       * @param  opContext  The operation context for the bind operation.
541       * @param  request    The bind request that was received.
542       * @param  target     Information about the server to which the request will
543       *                    be forwarded.
544       */
545      public void logBindForward(final OperationContext opContext,
546                                    final SASLBindRequest request,
547                                    final ForwardTarget target)
548      {
549        // No action will be taken by default.
550      }
551    
552    
553    
554      /**
555       * Logs a message about a failure encountered while attempting to forward a
556       * SASL bind request to another server.
557       *
558       * @param  opContext  The operation context for the bind operation.
559       * @param  request    The bind request that was received.
560       * @param  target     Information about the server to which the request was
561       *                    forwarded.
562       * @param  failure    The exception that was received when attempting to
563       *                    forward the request.
564       */
565      public void logBindForwardFailure(final OperationContext opContext,
566                                        final SASLBindRequest request,
567                                        final ForwardTarget target,
568                                        final LDAPException failure)
569      {
570        // No action will be taken by default.
571      }
572    
573    
574    
575      /**
576       * Logs a message about the result of processing a SASL bind request.
577       *
578       * @param  opContext  The operation context for the bind operation.
579       * @param  request    The bind request that was received.
580       * @param  result     The result of processing the bind request.
581       */
582      public void logBindResponse(final CompletedOperationContext opContext,
583                                  final SASLBindRequest request,
584                                  final BindResult result)
585      {
586        // No action will be taken by default.
587      }
588    
589    
590    
591      /**
592       * Logs a message about a compare request received from a client.
593       *
594       * @param  opContext  The operation context for the compare operation.
595       * @param  request    The compare request that was received.
596       */
597      public void logCompareRequest(final OperationContext opContext,
598                                    final CompareRequest request)
599      {
600        // No action will be taken by default.
601      }
602    
603    
604    
605      /**
606       * Logs a message about a compare request that will be forwarded to another
607       * server.
608       *
609       * @param  opContext  The operation context for the compare operation.
610       * @param  request    The compare request that was received.
611       * @param  target     Information about the server to which the request will
612       *                    be forwarded.
613       */
614      public void logCompareForward(final OperationContext opContext,
615                                    final CompareRequest request,
616                                    final ForwardTarget target)
617      {
618        // No action will be taken by default.
619      }
620    
621    
622    
623      /**
624       * Logs a message about a failure encountered while attempting to forward a
625       * compare request to another server.
626       *
627       * @param  opContext  The operation context for the compare operation.
628       * @param  request    The compare request that was received.
629       * @param  target     Information about the server to which the request was
630       *                    forwarded.
631       * @param  failure    The exception that was received when attempting to
632       *                    forward the request.
633       */
634      public void logCompareForwardFailure(final OperationContext opContext,
635                                           final CompareRequest request,
636                                           final ForwardTarget target,
637                                           final LDAPException failure)
638      {
639        // No action will be taken by default.
640      }
641    
642    
643    
644      /**
645       * Logs a message about the result of processing a compare request.
646       *
647       * @param  opContext  The operation context for the compare operation.
648       * @param  request    The compare request that was received.
649       * @param  result     The result of processing the compare request.
650       */
651      public void logCompareResponse(final CompletedOperationContext opContext,
652                                     final CompareRequest request,
653                                     final CompareResult result)
654      {
655        // No action will be taken by default.
656      }
657    
658    
659    
660      /**
661       * Logs a message about a delete request received from a client.
662       *
663       * @param  opContext  The operation context for the delete operation.
664       * @param  request    The delete request that was received.
665       */
666      public void logDeleteRequest(final OperationContext opContext,
667                                   final DeleteRequest request)
668      {
669        // No action will be taken by default.
670      }
671    
672    
673    
674      /**
675       * Logs a message about a delete request that will be forwarded to another
676       * server.
677       *
678       * @param  opContext  The operation context for the delete operation.
679       * @param  request    The delete request that was received.
680       * @param  target     Information about the server to which the request will
681       *                    be forwarded.
682       */
683      public void logDeleteForward(final OperationContext opContext,
684                                   final DeleteRequest request,
685                                   final ForwardTarget target)
686      {
687        // No action will be taken by default.
688      }
689    
690    
691    
692      /**
693       * Logs a message about a failure encountered while attempting to forward a
694       * delete request to another server.
695       *
696       * @param  opContext  The operation context for the delete operation.
697       * @param  request    The delete request that was received.
698       * @param  target     Information about the server to which the request was
699       *                    forwarded.
700       * @param  failure    The exception that was received when attempting to
701       *                    forward the request.
702       */
703      public void logDeleteForwardFailure(final OperationContext opContext,
704                                          final DeleteRequest request,
705                                          final ForwardTarget target,
706                                          final LDAPException failure)
707      {
708        // No action will be taken by default.
709      }
710    
711    
712    
713      /**
714       * Logs a message about the result of processing a delete request.
715       *
716       * @param  opContext  The operation context for the delete operation.
717       * @param  request    The delete request that was received.
718       * @param  result     The result of processing the delete request.
719       */
720      public void logDeleteResponse(final CompletedOperationContext opContext,
721                                    final DeleteRequest request,
722                                    final DeleteResult result)
723      {
724        // No action will be taken by default.
725      }
726    
727    
728    
729      /**
730       * Logs a message about the result of replication assurance processing for a
731       * delete operation.
732       *
733       * @param  opContext        The operation context for the delete operation.
734       * @param  request          The delete request that was received.
735       * @param  result           The result of processing the delete request.
736       * @param  assuranceResult  The replication assurance processing result.
737       */
738      public void logDeleteAssuranceCompleted(
739                       final CompletedOperationContext opContext,
740                       final DeleteRequest request, final DeleteResult result,
741                       final AssuredReplicationResult assuranceResult)
742      {
743        // No action will be taken by default.
744      }
745    
746    
747    
748      /**
749       * Logs a message about an extended request received from a client.
750       *
751       * @param  opContext  The operation context for the extended operation.
752       * @param  request    The extended request that was received.
753       */
754      public void logExtendedRequest(final OperationContext opContext,
755                                     final ExtendedRequest request)
756      {
757        // No action will be taken by default.
758      }
759    
760    
761    
762      /**
763       * Logs a message about an extended request that will be forwarded to another
764       * server.
765       *
766       * @param  opContext  The operation context for the extended operation.
767       * @param  request    The extended request that was received.
768       * @param  target     Information about the server to which the request will
769       *                    be forwarded.
770       */
771      public void logExtendedForward(final OperationContext opContext,
772                                     final ExtendedRequest request,
773                                     final ForwardTarget target)
774      {
775        // No action will be taken by default.
776      }
777    
778    
779    
780      /**
781       * Logs a message about a failure encountered while attempting to forward an
782       * extended request to another server.
783       *
784       * @param  opContext  The operation context for the extended operation.
785       * @param  request    The extended request that was received.
786       * @param  target     Information about the server to which the request was
787       *                    forwarded.
788       * @param  failure    The exception that was received when attempting to
789       *                    forward the request.
790       */
791      public void logExtendedForwardFailure(final OperationContext opContext,
792                                            final ExtendedRequest request,
793                                            final ForwardTarget target,
794                                            final LDAPException failure)
795      {
796        // No action will be taken by default.
797      }
798    
799    
800    
801      /**
802       * Logs a message about the result of processing an extended request.
803       *
804       * @param  opContext  The operation context for the extended operation.
805       * @param  request    The extended request that was received.
806       * @param  result     The result of processing the extended request.
807       */
808      public void logExtendedResponse(final CompletedOperationContext opContext,
809                                      final ExtendedRequest request,
810                                      final ExtendedResult result)
811      {
812        // No action will be taken by default.
813      }
814    
815    
816    
817      /**
818       * Logs a message about a modify request received from a client.
819       *
820       * @param  opContext  The operation context for the modify operation.
821       * @param  request    The modify request that was received.
822       */
823      public void logModifyRequest(final OperationContext opContext,
824                                   final ModifyRequest request)
825      {
826        // No action will be taken by default.
827      }
828    
829    
830    
831      /**
832       * Logs a message about a modify request that will be forwarded to another
833       * server.
834       *
835       * @param  opContext  The operation context for the modify operation.
836       * @param  request    The modify request that was received.
837       * @param  target     Information about the server to which the request will
838       *                    be forwarded.
839       */
840      public void logModifyForward(final OperationContext opContext,
841                                   final ModifyRequest request,
842                                   final ForwardTarget target)
843      {
844        // No action will be taken by default.
845      }
846    
847    
848    
849      /**
850       * Logs a message about a failure encountered while attempting to forward a
851       * modify request to another server.
852       *
853       * @param  opContext  The operation context for the modify operation.
854       * @param  request    The modify request that was received.
855       * @param  target     Information about the server to which the request was
856       *                    forwarded.
857       * @param  failure    The exception that was received when attempting to
858       *                    forward the request.
859       */
860      public void logModifyForwardFailure(final OperationContext opContext,
861                                          final ModifyRequest request,
862                                          final ForwardTarget target,
863                                          final LDAPException failure)
864      {
865        // No action will be taken by default.
866      }
867    
868    
869    
870      /**
871       * Logs a message about the result of processing a modify request.
872       *
873       * @param  opContext  The operation context for the modify operation.
874       * @param  request    The modify request that was received.
875       * @param  result     The result of processing the modify request.
876       */
877      public void logModifyResponse(final CompletedOperationContext opContext,
878                                    final ModifyRequest request,
879                                    final ModifyResult result)
880      {
881        // No action will be taken by default.
882      }
883    
884    
885    
886      /**
887       * Logs a message about the result of replication assurance processing for a
888       * modify operation.
889       *
890       * @param  opContext        The operation context for the modify operation.
891       * @param  request          The modify request that was received.
892       * @param  result           The result of processing the modify request.
893       * @param  assuranceResult  The replication assurance processing result.
894       */
895      public void logModifyAssuranceCompleted(
896                       final CompletedOperationContext opContext,
897                       final ModifyRequest request, final ModifyResult result,
898                       final AssuredReplicationResult assuranceResult)
899      {
900        // No action will be taken by default.
901      }
902    
903    
904    
905      /**
906       * Logs a message about a modify DN request received from a client.
907       *
908       * @param  opContext  The operation context for the modify DN operation.
909       * @param  request    The modify DN request that was received.
910       */
911      public void logModifyDNRequest(final OperationContext opContext,
912                                     final ModifyDNRequest request)
913      {
914        // No action will be taken by default.
915      }
916    
917    
918    
919      /**
920       * Logs a message about a modify DN request that will be forwarded to another
921       * server.
922       *
923       * @param  opContext  The operation context for the modify DN operation.
924       * @param  request    The modify DN request that was received.
925       * @param  target     Information about the server to which the request will
926       *                    be forwarded.
927       */
928      public void logModifyDNForward(final OperationContext opContext,
929                                     final ModifyDNRequest request,
930                                     final ForwardTarget target)
931      {
932        // No action will be taken by default.
933      }
934    
935    
936    
937      /**
938       * Logs a message about a failure encountered while attempting to forward a
939       * modify DN request to another server.
940       *
941       * @param  opContext  The operation context for the modify DN operation.
942       * @param  request    The modify DN request that was received.
943       * @param  target     Information about the server to which the request was
944       *                    forwarded.
945       * @param  failure    The exception that was received when attempting to
946       *                    forward the request.
947       */
948      public void logModifyDNForwardFailure(final OperationContext opContext,
949                                            final ModifyDNRequest request,
950                                            final ForwardTarget target,
951                                            final LDAPException failure)
952      {
953        // No action will be taken by default.
954      }
955    
956    
957    
958      /**
959       * Logs a message about the result of processing a modify DN request.
960       *
961       * @param  opContext  The operation context for the modify DN operation.
962       * @param  request    The modify DN request that was received.
963       * @param  result     The result of processing the modify DN request.
964       */
965      public void logModifyDNResponse(final CompletedOperationContext opContext,
966                                      final ModifyDNRequest request,
967                                      final ModifyDNResult result)
968      {
969        // No action will be taken by default.
970      }
971    
972    
973    
974      /**
975       * Logs a message about the result of replication assurance processing for a
976       * modify DN operation.
977       *
978       * @param  opContext        The operation context for the modify DN operation.
979       * @param  request          The modify DN request that was received.
980       * @param  result           The result of processing the modify DN request.
981       * @param  assuranceResult  The replication assurance processing result.
982       */
983      public void logModifyDNAssuranceCompleted(
984                       final CompletedOperationContext opContext,
985                       final ModifyDNRequest request, final ModifyDNResult result,
986                       final AssuredReplicationResult assuranceResult)
987      {
988        // No action will be taken by default.
989      }
990    
991    
992    
993      /**
994       * Logs a message about a search request received from a client.
995       *
996       * @param  opContext  The operation context for the search operation.
997       * @param  request    The search request that was received.
998       */
999      public void logSearchRequest(final OperationContext opContext,
1000                                   final SearchRequest request)
1001      {
1002        // No action will be taken by default.
1003      }
1004    
1005    
1006    
1007      /**
1008       * Logs a message about a search request that will be forwarded to another
1009       * server.
1010       *
1011       * @param  opContext  The operation context for the search operation.
1012       * @param  request    The search request that was received.
1013       * @param  target     Information about the server to which the request will
1014       *                    be forwarded.
1015       */
1016      public void logSearchForward(final OperationContext opContext,
1017                                   final SearchRequest request,
1018                                   final ForwardTarget target)
1019      {
1020        // No action will be taken by default.
1021      }
1022    
1023    
1024    
1025      /**
1026       * Logs a message about a failure encountered while attempting to forward a
1027       * search request to another server.
1028       *
1029       * @param  opContext  The operation context for the search operation.
1030       * @param  request    The search request that was received.
1031       * @param  target     Information about the server to which the request was
1032       *                    forwarded.
1033       * @param  failure    The exception that was received when attempting to
1034       *                    forward the request.
1035       */
1036      public void logSearchForwardFailure(final OperationContext opContext,
1037                                          final SearchRequest request,
1038                                          final ForwardTarget target,
1039                                          final LDAPException failure)
1040      {
1041        // No action will be taken by default.
1042      }
1043    
1044    
1045    
1046      /**
1047       * Logs a message about a search result entry that was returned to the client.
1048       *
1049       * @param  opContext  The operation context for the search operation.
1050       * @param  request    The search request that was received.
1051       * @param  entry      The entry that was returned.
1052       * @param  controls   The set of controls included with the entry, or an empty
1053       *                    list if there were none.
1054       */
1055      public void logSearchResultEntry(final OperationContext opContext,
1056                                       final SearchRequest request,
1057                                       final Entry entry,
1058                                       final List<Control> controls)
1059      {
1060        // No action will be taken by default.
1061      }
1062    
1063    
1064    
1065      /**
1066       * Logs a message about a search result reference that was returned to the
1067       * client.
1068       *
1069       * @param  opContext     The operation context for the search operation.
1070       * @param  request       The search request that was received.
1071       * @param  referralURLs  The referral URLs for the reference that was
1072       *                       returned.
1073       * @param  controls      The set of controls included with the reference, or
1074       *                       an empty list if there were none.
1075       */
1076      public void logSearchResultReference(final OperationContext opContext,
1077                                           final SearchRequest request,
1078                                           final List<String> referralURLs,
1079                                           final List<Control> controls)
1080      {
1081        // No action will be taken by default.
1082      }
1083    
1084    
1085    
1086      /**
1087       * Logs a message about the result of processing a search request.
1088       *
1089       * @param  opContext  The operation context for the search operation.
1090       * @param  request    The search request that was received.
1091       * @param  result     The result of processing the search request.
1092       */
1093      public void logSearchResultDone(
1094                       final CompletedSearchOperationContext opContext,
1095                       final SearchRequest request, final SearchResult result)
1096      {
1097        // No action will be taken by default.
1098      }
1099    
1100    
1101    
1102      /**
1103       * Logs a message about an unbind request received from a client.
1104       *
1105       * @param  opContext  The operation context for the unbind operation.
1106       * @param  request    The unbind request that was received.
1107       */
1108      public void logUnbindRequest(final OperationContext opContext,
1109                                   final UnbindRequest request)
1110      {
1111        // No action will be taken by default.
1112      }
1113    
1114    
1115    
1116      /**
1117       * Logs a message about an intermediate response that was returned to the
1118       * client.
1119       *
1120       * @param  opContext             The operation context for the associated
1121       *                               operation.
1122       * @param  intermediateResponse  The intermediate response that was returned.
1123       */
1124      public void logIntermediateResponse(final OperationContext opContext,
1125                       final IntermediateResponse intermediateResponse)
1126      {
1127        // No action will be taken by default.
1128      }
1129    
1130    
1131    
1132      /**
1133       * Writes a message to the access logger to indicate that the Directory Proxy
1134       * Server will attempt to perform entry rebalancing by migrating a subtree
1135       * from one backend set to another.
1136       *
1137       * @param  rebalancingOperationID  The unique ID assigned to the entry
1138       *                                 balancing operation.
1139       * @param  triggerOperation        The operation that triggered the entry
1140       *                                 rebalancing.  It may be {@code null} if the
1141       *                                 rebalancing operation wasn't triggered by a
1142       *                                 client request.
1143       * @param  baseDN                  The base DN of the subtree to migrate.
1144       * @param  sizeLimit               The maximum number of entries to migrate.
1145       * @param  sourceBackendSetName    The name of the backend set containing the
1146       *                                 subtree to migrate.
1147       * @param  sourceAddress           The address of the server from which the
1148       *                                 source entries will be read.
1149       * @param  sourcePort              The port of the server from which the
1150       *                                 source entries will be read.
1151       * @param  targetBackendSetName    The name of the backend set to which the
1152       *                                 subtree will be migrated.
1153       * @param  targetAddress           The address of the server to which the
1154       *                                 subtree will be migrated.
1155       * @param  targetPort              The port of the server to which the subtree
1156       *                                 will be migrated.
1157       */
1158      public void logEntryRebalancingRequest(final long rebalancingOperationID,
1159                       final OperationContext triggerOperation, final String baseDN,
1160                       final int sizeLimit, final String sourceBackendSetName,
1161                       final String sourceAddress, final int sourcePort,
1162                       final String targetBackendSetName,
1163                       final String targetAddress, final int targetPort)
1164      {
1165        // No action performed by default.
1166      }
1167    
1168    
1169    
1170      /**
1171       * Writes a message to the access logger to indicate that the Directory Proxy
1172       * Server will attempt to perform entry rebalancing by migrating a subtree
1173       * from one backend set to another.
1174       *
1175       * @param  rebalancingOperationID  The unique ID assigned to the entry
1176       *                                 balancing operation.
1177       * @param  triggerOperation        The operation that triggered the entry
1178       *                                 rebalancing.  It may be {@code null} if the
1179       *                                 rebalancing operation wasn't triggered by a
1180       *                                 client request.
1181       * @param  baseDN                  The base DN of the subtree to migrate.
1182       * @param  sizeLimit               The maximum number of entries to migrate.
1183       * @param  sourceBackendSetName    The name of the backend set containing the
1184       *                                 subtree to migrate.
1185       * @param  sourceAddress           The address of the server from which the
1186       *                                 source entries will be read.
1187       * @param  sourcePort              The port of the server from which the
1188       *                                 source entries will be read.
1189       * @param  targetBackendSetName    The name of the backend set to which the
1190       *                                 subtree will be migrated.
1191       * @param  targetAddress           The address of the server to which the
1192       *                                 subtree will be migrated.
1193       * @param  targetPort              The port of the server to which the subtree
1194       *                                 will be migrated.
1195       * @param  moveSubtreeResult       An object with information about the result
1196       *                                 of the subtree move processing.
1197       */
1198      public void logEntryRebalancingResult(final long rebalancingOperationID,
1199                       final OperationContext triggerOperation, final String baseDN,
1200                       final int sizeLimit, final String sourceBackendSetName,
1201                       final String sourceAddress, final int sourcePort,
1202                       final String targetBackendSetName,
1203                       final String targetAddress, final int targetPort,
1204                       final MoveSubtreeResult moveSubtreeResult)
1205      {
1206        // No action performed by default.
1207      }
1208    }