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-2013 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.common.config.FileBasedAccessLoggerConfig; 036 import com.unboundid.directory.sdk.common.internal.Reconfigurable; 037 import com.unboundid.directory.sdk.common.operation.AbandonRequest; 038 import com.unboundid.directory.sdk.common.operation.AddRequest; 039 import com.unboundid.directory.sdk.common.operation.AddResult; 040 import com.unboundid.directory.sdk.common.operation.BindResult; 041 import com.unboundid.directory.sdk.common.operation.CompareRequest; 042 import com.unboundid.directory.sdk.common.operation.CompareResult; 043 import com.unboundid.directory.sdk.common.operation.DeleteRequest; 044 import com.unboundid.directory.sdk.common.operation.DeleteResult; 045 import com.unboundid.directory.sdk.common.operation.ExtendedRequest; 046 import com.unboundid.directory.sdk.common.operation.ExtendedResult; 047 import com.unboundid.directory.sdk.common.operation.GenericResult; 048 import com.unboundid.directory.sdk.common.operation.ModifyRequest; 049 import com.unboundid.directory.sdk.common.operation.ModifyResult; 050 import com.unboundid.directory.sdk.common.operation.ModifyDNRequest; 051 import com.unboundid.directory.sdk.common.operation.ModifyDNResult; 052 import com.unboundid.directory.sdk.common.operation.SASLBindRequest; 053 import com.unboundid.directory.sdk.common.operation.SearchRequest; 054 import com.unboundid.directory.sdk.common.operation.SearchResult; 055 import com.unboundid.directory.sdk.common.operation.SimpleBindRequest; 056 import com.unboundid.directory.sdk.common.operation.UnbindRequest; 057 import com.unboundid.directory.sdk.common.types.ClientContext; 058 import com.unboundid.directory.sdk.common.types.CompletedOperationContext; 059 import com.unboundid.directory.sdk.common.types.CompletedSearchOperationContext; 060 import com.unboundid.directory.sdk.common.types.DisconnectReason; 061 import com.unboundid.directory.sdk.common.types.Entry; 062 import com.unboundid.directory.sdk.common.types.ForwardTarget; 063 import com.unboundid.directory.sdk.common.types.OperationContext; 064 import com.unboundid.directory.sdk.common.types.ServerContext; 065 import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension; 066 import com.unboundid.directory.sdk.metrics.internal.MetricsEngineExtension; 067 import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension; 068 import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension; 069 import com.unboundid.ldap.sdk.Control; 070 import com.unboundid.ldap.sdk.IntermediateResponse; 071 import com.unboundid.ldap.sdk.LDAPException; 072 import com.unboundid.ldap.sdk.ResultCode; 073 import com.unboundid.ldap.sdk.unboundidds.MoveSubtreeResult; 074 import com.unboundid.util.Extensible; 075 import com.unboundid.util.ThreadSafety; 076 import com.unboundid.util.ThreadSafetyLevel; 077 import com.unboundid.util.args.ArgumentException; 078 import com.unboundid.util.args.ArgumentParser; 079 080 081 082 /** 083 * This class defines an API that may be used to create a specific type of 084 * scripted access logger which is intended to write log messages to text files. 085 * This is a convenience for developers which wish to create custom access 086 * loggers that write to text files and provides support for a wide range of 087 * functionality including high-performance and highly-concurrent logging. All 088 * of the options available to {@link ScriptedAccessLogger} implementations are 089 * available for file-based access loggers, as well as options for indicating 090 * the log file path, the rotation and retention policies, whether to buffer the 091 * output, etc. 092 * <BR><BR> 093 * Note that scripted file-based access loggers will automatically be registered 094 * within the server as disk space consumers, so there is no need to implement 095 * the {@link com.unboundid.directory.sdk.common.api.DiskSpaceConsumer} 096 * interface. Also note that configuration change related to the log file 097 * (e.g., the log file path, buffer size, queue size, etc.) will also 098 * automatically be handled by the server, so subclasses only need to be 099 * concerned about changes to the custom arguments they define. 100 * <BR> 101 * <H2>Configuring File-Based Access Loggers</H2> 102 * In order to configure an access logger created using this API, use a command 103 * like: 104 * <PRE> 105 * dsconfig create-log-publisher \ 106 * --publisher-name "<I>{logger-name}</I>" \ 107 * --type groovy-scripted-file-based-access \ 108 * --set enabled:true \ 109 * --set "log-file:<I>{path}</I>" \ 110 * --set "rotation-policy:<I>{rotation-policy-name}</I>" \ 111 * --set "retention-policy:<I>{retention-policy-name}</I>" \ 112 * --set "script-class:<I>{class-name}</I>" \ 113 * --set "script-argument:<I>{name=value}</I>" 114 * </PRE> 115 * where "<I>{logger-name}</I>" is the name to use for the access logger 116 * instance, "<I>{path}</I>" is the path to the log file to be written, 117 * "<I>{rotation-policy-name}</I>" is the name of the log rotation policy to use 118 * for the log file, "<I>{retention-policy-name}</I>" is the name of the log 119 * retention policy to use for the log file, "<I>{class-name}</I>" is the 120 * fully-qualified name of the Groovy class written using this API, and 121 * "<I>{name=value}</I>" represents name-value pairs for any arguments to 122 * provide to the logger. If multiple arguments should be provided to the 123 * logger, then the "<CODE>--set script-argument:<I>{name=value}</I></CODE>" 124 * option should be provided multiple times. It is also possible to specify 125 * multiple log rotation and/or retention policies if desired. 126 * 127 * @see com.unboundid.directory.sdk.common.api.AccessLogger 128 * @see com.unboundid.directory.sdk.common.api.FileBasedAccessLogger 129 * @see ScriptedAccessLogger 130 */ 131 @Extensible() 132 @DirectoryServerExtension() 133 @DirectoryProxyServerExtension(appliesToLocalContent=true, 134 appliesToRemoteContent=false) 135 @SynchronizationServerExtension(appliesToLocalContent=true, 136 appliesToSynchronizedContent=false) 137 @MetricsEngineExtension() 138 @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 139 public abstract class ScriptedFileBasedAccessLogger 140 implements Reconfigurable<FileBasedAccessLoggerConfig> 141 { 142 /** 143 * Creates a new instance of this access logger. All access logger 144 * implementations must include a default constructor, but any initialization 145 * should generally be done in the {@code initializeAccessLogger} method. 146 */ 147 public ScriptedFileBasedAccessLogger() 148 { 149 // No implementation is required. 150 } 151 152 153 154 /** 155 * {@inheritDoc} 156 */ 157 public void defineConfigArguments(final ArgumentParser parser) 158 throws ArgumentException 159 { 160 // No arguments will be allowed by default. 161 } 162 163 164 165 /** 166 * Initializes this access logger. 167 * 168 * @param serverContext A handle to the server context for the server in 169 * which this extension is running. 170 * @param config The general configuration for this access logger. 171 * @param parser The argument parser which has been initialized from 172 * the configuration for this access logger. 173 * 174 * @throws LDAPException If a problem occurs while initializing this access 175 * logger. 176 */ 177 public void initializeAccessLogger(final ServerContext serverContext, 178 final FileBasedAccessLoggerConfig config, 179 final ArgumentParser parser) 180 throws LDAPException 181 { 182 // No initialization will be performed by default. 183 } 184 185 186 187 /** 188 * {@inheritDoc} 189 */ 190 public boolean isConfigurationAcceptable( 191 final FileBasedAccessLoggerConfig config, 192 final ArgumentParser parser, 193 final List<String> unacceptableReasons) 194 { 195 // No extended validation will be performed by default. 196 return true; 197 } 198 199 200 201 /** 202 * {@inheritDoc} 203 */ 204 public ResultCode applyConfiguration(final FileBasedAccessLoggerConfig config, 205 final ArgumentParser parser, 206 final List<String> adminActionsRequired, 207 final List<String> messages) 208 { 209 // By default, no configuration changes will be applied. If there are any 210 // arguments, then add an admin action message indicating that the extension 211 // needs to be restarted for any changes to take effect. 212 if (! parser.getNamedArguments().isEmpty()) 213 { 214 adminActionsRequired.add( 215 "No configuration change has actually been applied. The new " + 216 "configuration will not take effect until this access logger " + 217 "is disabled and re-enabled or until the server is restarted."); 218 } 219 220 return ResultCode.SUCCESS; 221 } 222 223 224 225 /** 226 * Performs any cleanup which may be necessary when this access logger is to 227 * be taken out of service. 228 */ 229 public void finalizeAccessLogger() 230 { 231 // No implementation is required. 232 } 233 234 235 236 /** 237 * Logs a message indicating that a new connection has been established. 238 * 239 * @param clientContext Information about the client connection that has 240 * been accepted. 241 * 242 * @return The content of the log message that should be written. It may be 243 * {@code null} or empty if no message should be written. It may 244 * optionally include line breaks if the log message should span 245 * multiple lines. 246 */ 247 public CharSequence logConnect(final ClientContext clientContext) 248 { 249 // No log message will be generated by default. 250 return null; 251 } 252 253 254 255 /** 256 * Logs a message indicating that a connection has been closed. 257 * 258 * @param clientContext Information about the client connection that has 259 * been closed. 260 * @param disconnectReason A general reason that the connection has been 261 * closed. 262 * @param message A message with additional information about the 263 * closure. It may be {@code null} if none is 264 * available. 265 * 266 * @return The content of the log message that should be written. It may be 267 * {@code null} or empty if no message should be written. It may 268 * optionally include line breaks if the log message should span 269 * multiple lines. 270 */ 271 public CharSequence logDisconnect(final ClientContext clientContext, 272 final DisconnectReason disconnectReason, 273 final String message) 274 { 275 // No log message will be generated by default. 276 return null; 277 } 278 279 280 281 /** 282 * Logs a message about security negotiation performed by a client. 283 * 284 * @param clientContext Information about the client connection on which 285 * the negotiation was completed. 286 * @param protocol The security protocol selected by the negotiation. 287 * It may be {@code null} if no protocol is available. 288 * @param cipher The cipher suite selected by the negotiation. It 289 * may be {@code null} if no cipher is available. 290 * @param properties A set of additional properties that may be included 291 * in the log message. It may be {@code null} or empty 292 * if no additional properties are needed. 293 * 294 * @return The content of the log message that should be written. It may be 295 * {@code null} or empty if no message should be written. It may 296 * optionally include line breaks if the log message should span 297 * multiple lines. 298 */ 299 public CharSequence logSecurityNegotiation(final ClientContext clientContext, 300 final String protocol, final String cipher, 301 final Map<String,String> properties) 302 { 303 // No log message will be generated by default. 304 return null; 305 } 306 307 308 309 /** 310 * Logs a message about a certificate chain presented by a client. 311 * 312 * @param clientContext Information about the client that presented the 313 * certificate chain. 314 * @param certChain The certificate chain presented by the client. 315 * @param authDN The DN of the user as whom the client was 316 * automatically authenticated, or {@code null} if the 317 * client was not automatically authenticated. 318 * 319 * @return The content of the log message that should be written. It may be 320 * {@code null} or empty if no message should be written. It may 321 * optionally include line breaks if the log message should span 322 * multiple lines. 323 */ 324 public CharSequence logClientCertificateChain( 325 final ClientContext clientContext, 326 final Certificate[] certChain, final String authDN) 327 { 328 // No log message will be generated by default. 329 return null; 330 } 331 332 333 334 /** 335 * Logs a message about an abandon request received from a client. 336 * 337 * @param opContext The operation context for the abandon operation. 338 * @param request The abandon request that was received. 339 * 340 * @return The content of the log message that should be written. It may be 341 * {@code null} or empty if no message should be written. It may 342 * optionally include line breaks if the log message should span 343 * multiple lines. 344 */ 345 public CharSequence logAbandonRequest(final OperationContext opContext, 346 final AbandonRequest request) 347 { 348 // No log message will be generated by default. 349 return null; 350 } 351 352 353 354 /** 355 * Logs a message about an abandon request that will be forwarded to another 356 * server. 357 * 358 * @param opContext The operation context for the abandon operation. 359 * @param request The abandon request that was received. 360 * @param target Information about the server to which the request will 361 * be forwarded. 362 * 363 * @return The content of the log message that should be written. It may be 364 * {@code null} or empty if no message should be written. It may 365 * optionally include line breaks if the log message should span 366 * multiple lines. 367 */ 368 public CharSequence logAbandonForward(final OperationContext opContext, 369 final AbandonRequest request, 370 final ForwardTarget target) 371 { 372 // No log message will be generated by default. 373 return null; 374 } 375 376 377 378 /** 379 * Logs a message about the result of processing an abandon request. 380 * 381 * @param opContext The operation context for the abandon operation. 382 * @param request The abandon request that was received. 383 * @param result The result of processing the abandon request. 384 * 385 * @return The content of the log message that should be written. It may be 386 * {@code null} or empty if no message should be written. It may 387 * optionally include line breaks if the log message should span 388 * multiple lines. 389 */ 390 public CharSequence logAbandonResult( 391 final CompletedOperationContext opContext, 392 final AbandonRequest request, 393 final GenericResult result) 394 { 395 // No log message will be generated by default. 396 return null; 397 } 398 399 400 401 /** 402 * Logs a message about an add request received from a client. 403 * 404 * @param opContext The operation context for the add operation. 405 * @param request The add request that was received. 406 * 407 * @return The content of the log message that should be written. It may be 408 * {@code null} or empty if no message should be written. It may 409 * optionally include line breaks if the log message should span 410 * multiple lines. 411 */ 412 public CharSequence logAddRequest(final OperationContext opContext, 413 final AddRequest request) 414 { 415 // No log message will be generated by default. 416 return null; 417 } 418 419 420 421 /** 422 * Logs a message about an add request that will be forwarded to another 423 * server. 424 * 425 * @param opContext The operation context for the add operation. 426 * @param request The add request that was received. 427 * @param target Information about the server to which the request will 428 * be forwarded. 429 * 430 * @return The content of the log message that should be written. It may be 431 * {@code null} or empty if no message should be written. It may 432 * optionally include line breaks if the log message should span 433 * multiple lines. 434 */ 435 public CharSequence logAddForward(final OperationContext opContext, 436 final AddRequest request, 437 final ForwardTarget target) 438 { 439 // No log message will be generated by default. 440 return null; 441 } 442 443 444 445 /** 446 * Logs a message about a failure encountered while attempting to forward an 447 * add request to another server. 448 * 449 * @param opContext The operation context for the add operation. 450 * @param request The add request that was received. 451 * @param target Information about the server to which the request was 452 * forwarded. 453 * @param failure The exception that was received when attempting to 454 * forward the request. 455 * 456 * @return The content of the log message that should be written. It may be 457 * {@code null} or empty if no message should be written. It may 458 * optionally include line breaks if the log message should span 459 * multiple lines. 460 */ 461 public CharSequence logAddForwardFailure(final OperationContext opContext, 462 final AddRequest request, 463 final ForwardTarget target, 464 final LDAPException failure) 465 { 466 // No log message will be generated by default. 467 return null; 468 } 469 470 471 472 /** 473 * Logs a message about the result of processing an add request. 474 * 475 * @param opContext The operation context for the add operation. 476 * @param request The add request that was received. 477 * @param result The result of processing the add request. 478 * 479 * @return The content of the log message that should be written. It may be 480 * {@code null} or empty if no message should be written. It may 481 * optionally include line breaks if the log message should span 482 * multiple lines. 483 */ 484 public CharSequence logAddResponse(final CompletedOperationContext opContext, 485 final AddRequest request, 486 final AddResult result) 487 { 488 // No log message will be generated by default. 489 return null; 490 } 491 492 493 494 /** 495 * Logs a message about a simple bind request received from a client. 496 * 497 * @param opContext The operation context for the bind operation. 498 * @param request The bind request that was received. 499 * 500 * @return The content of the log message that should be written. It may be 501 * {@code null} or empty if no message should be written. It may 502 * optionally include line breaks if the log message should span 503 * multiple lines. 504 */ 505 public CharSequence logBindRequest(final OperationContext opContext, 506 final SimpleBindRequest request) 507 { 508 // No log message will be generated by default. 509 return null; 510 } 511 512 513 514 /** 515 * Logs a message about a simple bind request that will be forwarded to 516 * another server. 517 * 518 * @param opContext The operation context for the bind operation. 519 * @param request The bind request that was received. 520 * @param target Information about the server to which the request will 521 * be forwarded. 522 * 523 * @return The content of the log message that should be written. It may be 524 * {@code null} or empty if no message should be written. It may 525 * optionally include line breaks if the log message should span 526 * multiple lines. 527 */ 528 public CharSequence logBindForward(final OperationContext opContext, 529 final SimpleBindRequest request, 530 final ForwardTarget target) 531 { 532 // No log message will be generated by default. 533 return null; 534 } 535 536 537 538 /** 539 * Logs a message about a failure encountered while attempting to forward a 540 * simple bind request to another server. 541 * 542 * @param opContext The operation context for the bind operation. 543 * @param request The bind request that was received. 544 * @param target Information about the server to which the request was 545 * forwarded. 546 * @param failure The exception that was received when attempting to 547 * forward the request. 548 * 549 * @return The content of the log message that should be written. It may be 550 * {@code null} or empty if no message should be written. It may 551 * optionally include line breaks if the log message should span 552 * multiple lines. 553 */ 554 public CharSequence logBindForwardFailure(final OperationContext opContext, 555 final SimpleBindRequest request, 556 final ForwardTarget target, 557 final LDAPException failure) 558 { 559 // No log message will be generated by default. 560 return null; 561 } 562 563 564 565 /** 566 * Logs a message about the result of processing a simple bind request. 567 * 568 * @param opContext The operation context for the bind operation. 569 * @param request The bind request that was received. 570 * @param result The result of processing the bind request. 571 * 572 * @return The content of the log message that should be written. It may be 573 * {@code null} or empty if no message should be written. It may 574 * optionally include line breaks if the log message should span 575 * multiple lines. 576 */ 577 public CharSequence logBindResponse(final CompletedOperationContext opContext, 578 final SimpleBindRequest request, 579 final BindResult result) 580 { 581 // No log message will be generated by default. 582 return null; 583 } 584 585 586 587 /** 588 * Logs a message about a SASL bind request received from a client. 589 * 590 * @param opContext The operation context for the bind operation. 591 * @param request The bind request that was received. 592 * 593 * @return The content of the log message that should be written. It may be 594 * {@code null} or empty if no message should be written. It may 595 * optionally include line breaks if the log message should span 596 * multiple lines. 597 */ 598 public CharSequence logBindRequest(final OperationContext opContext, 599 final SASLBindRequest request) 600 { 601 // No log message will be generated by default. 602 return null; 603 } 604 605 606 607 /** 608 * Logs a message about a SASL bind request that will be forwarded to 609 * another server. 610 * 611 * @param opContext The operation context for the bind operation. 612 * @param request The bind request that was received. 613 * @param target Information about the server to which the request will 614 * be forwarded. 615 * 616 * @return The content of the log message that should be written. It may be 617 * {@code null} or empty if no message should be written. It may 618 * optionally include line breaks if the log message should span 619 * multiple lines. 620 */ 621 public CharSequence logBindForward(final OperationContext opContext, 622 final SASLBindRequest request, 623 final ForwardTarget target) 624 { 625 // No log message will be generated by default. 626 return null; 627 } 628 629 630 631 /** 632 * Logs a message about a failure encountered while attempting to forward a 633 * SASL bind request to another server. 634 * 635 * @param opContext The operation context for the bind operation. 636 * @param request The bind request that was received. 637 * @param target Information about the server to which the request was 638 * forwarded. 639 * @param failure The exception that was received when attempting to 640 * forward the request. 641 * 642 * @return The content of the log message that should be written. It may be 643 * {@code null} or empty if no message should be written. It may 644 * optionally include line breaks if the log message should span 645 * multiple lines. 646 */ 647 public CharSequence logBindForwardFailure(final OperationContext opContext, 648 final SASLBindRequest request, 649 final ForwardTarget target, 650 final LDAPException failure) 651 { 652 // No log message will be generated by default. 653 return null; 654 } 655 656 657 658 /** 659 * Logs a message about the result of processing a SASL bind request. 660 * 661 * @param opContext The operation context for the bind operation. 662 * @param request The bind request that was received. 663 * @param result The result of processing the bind request. 664 * 665 * @return The content of the log message that should be written. It may be 666 * {@code null} or empty if no message should be written. It may 667 * optionally include line breaks if the log message should span 668 * multiple lines. 669 */ 670 public CharSequence logBindResponse(final CompletedOperationContext opContext, 671 final SASLBindRequest request, 672 final BindResult result) 673 { 674 // No log message will be generated by default. 675 return null; 676 } 677 678 679 680 /** 681 * Logs a message about a compare request received from a client. 682 * 683 * @param opContext The operation context for the compare operation. 684 * @param request The compare request that was received. 685 * 686 * @return The content of the log message that should be written. It may be 687 * {@code null} or empty if no message should be written. It may 688 * optionally include line breaks if the log message should span 689 * multiple lines. 690 */ 691 public CharSequence logCompareRequest(final OperationContext opContext, 692 final CompareRequest request) 693 { 694 // No log message will be generated by default. 695 return null; 696 } 697 698 699 700 /** 701 * Logs a message about a compare request that will be forwarded to another 702 * server. 703 * 704 * @param opContext The operation context for the compare operation. 705 * @param request The compare request that was received. 706 * @param target Information about the server to which the request will 707 * be forwarded. 708 * 709 * @return The content of the log message that should be written. It may be 710 * {@code null} or empty if no message should be written. It may 711 * optionally include line breaks if the log message should span 712 * multiple lines. 713 */ 714 public CharSequence logCompareForward(final OperationContext opContext, 715 final CompareRequest request, 716 final ForwardTarget target) 717 { 718 // No log message will be generated by default. 719 return null; 720 } 721 722 723 724 /** 725 * Logs a message about a failure encountered while attempting to forward a 726 * compare request to another server. 727 * 728 * @param opContext The operation context for the compare operation. 729 * @param request The compare request that was received. 730 * @param target Information about the server to which the request was 731 * forwarded. 732 * @param failure The exception that was received when attempting to 733 * forward the request. 734 * 735 * @return The content of the log message that should be written. It may be 736 * {@code null} or empty if no message should be written. It may 737 * optionally include line breaks if the log message should span 738 * multiple lines. 739 */ 740 public CharSequence logCompareForwardFailure(final OperationContext opContext, 741 final CompareRequest request, 742 final ForwardTarget target, 743 final LDAPException failure) 744 { 745 // No log message will be generated by default. 746 return null; 747 } 748 749 750 751 /** 752 * Logs a message about the result of processing a compare request. 753 * 754 * @param opContext The operation context for the compare operation. 755 * @param request The compare request that was received. 756 * @param result The result of processing the compare request. 757 * 758 * @return The content of the log message that should be written. It may be 759 * {@code null} or empty if no message should be written. It may 760 * optionally include line breaks if the log message should span 761 * multiple lines. 762 */ 763 public CharSequence logCompareResponse( 764 final CompletedOperationContext opContext, 765 final CompareRequest request, 766 final CompareResult result) 767 { 768 // No log message will be generated by default. 769 return null; 770 } 771 772 773 774 /** 775 * Logs a message about a delete request received from a client. 776 * 777 * @param opContext The operation context for the delete operation. 778 * @param request The delete request that was received. 779 * 780 * @return The content of the log message that should be written. It may be 781 * {@code null} or empty if no message should be written. It may 782 * optionally include line breaks if the log message should span 783 * multiple lines. 784 */ 785 public CharSequence logDeleteRequest(final OperationContext opContext, 786 final DeleteRequest request) 787 { 788 // No log message will be generated by default. 789 return null; 790 } 791 792 793 794 /** 795 * Logs a message about a delete request that will be forwarded to another 796 * server. 797 * 798 * @param opContext The operation context for the delete operation. 799 * @param request The delete request that was received. 800 * @param target Information about the server to which the request will 801 * be forwarded. 802 * 803 * @return The content of the log message that should be written. It may be 804 * {@code null} or empty if no message should be written. It may 805 * optionally include line breaks if the log message should span 806 * multiple lines. 807 */ 808 public CharSequence logDeleteForward(final OperationContext opContext, 809 final DeleteRequest request, 810 final ForwardTarget target) 811 { 812 // No log message will be generated by default. 813 return null; 814 } 815 816 817 818 /** 819 * Logs a message about a failure encountered while attempting to forward a 820 * delete request to another server. 821 * 822 * @param opContext The operation context for the delete operation. 823 * @param request The delete request that was received. 824 * @param target Information about the server to which the request was 825 * forwarded. 826 * @param failure The exception that was received when attempting to 827 * forward the request. 828 * 829 * @return The content of the log message that should be written. It may be 830 * {@code null} or empty if no message should be written. It may 831 * optionally include line breaks if the log message should span 832 * multiple lines. 833 */ 834 public CharSequence logDeleteForwardFailure(final OperationContext opContext, 835 final DeleteRequest request, 836 final ForwardTarget target, 837 final LDAPException failure) 838 { 839 // No log message will be generated by default. 840 return null; 841 } 842 843 844 845 /** 846 * Logs a message about the result of processing a delete request. 847 * 848 * @param opContext The operation context for the delete operation. 849 * @param request The delete request that was received. 850 * @param result The result of processing the delete request. 851 * 852 * @return The content of the log message that should be written. It may be 853 * {@code null} or empty if no message should be written. It may 854 * optionally include line breaks if the log message should span 855 * multiple lines. 856 */ 857 public CharSequence logDeleteResponse( 858 final CompletedOperationContext opContext, 859 final DeleteRequest request, 860 final DeleteResult result) 861 { 862 // No log message will be generated by default. 863 return null; 864 } 865 866 867 868 /** 869 * Logs a message about an extended request received from a client. 870 * 871 * @param opContext The operation context for the extended operation. 872 * @param request The extended request that was received. 873 * 874 * @return The content of the log message that should be written. It may be 875 * {@code null} or empty if no message should be written. It may 876 * optionally include line breaks if the log message should span 877 * multiple lines. 878 */ 879 public CharSequence logExtendedRequest(final OperationContext opContext, 880 final ExtendedRequest request) 881 { 882 // No log message will be generated by default. 883 return null; 884 } 885 886 887 888 /** 889 * Logs a message about an extended request that will be forwarded to another 890 * server. 891 * 892 * @param opContext The operation context for the extended operation. 893 * @param request The extended request that was received. 894 * @param target Information about the server to which the request will 895 * be forwarded. 896 * 897 * @return The content of the log message that should be written. It may be 898 * {@code null} or empty if no message should be written. It may 899 * optionally include line breaks if the log message should span 900 * multiple lines. 901 */ 902 public CharSequence logExtendedForward(final OperationContext opContext, 903 final ExtendedRequest request, 904 final ForwardTarget target) 905 { 906 // No log message will be generated by default. 907 return null; 908 } 909 910 911 912 /** 913 * Logs a message about a failure encountered while attempting to forward an 914 * extended request to another server. 915 * 916 * @param opContext The operation context for the extended operation. 917 * @param request The extended request that was received. 918 * @param target Information about the server to which the request was 919 * forwarded. 920 * @param failure The exception that was received when attempting to 921 * forward the request. 922 * 923 * @return The content of the log message that should be written. It may be 924 * {@code null} or empty if no message should be written. It may 925 * optionally include line breaks if the log message should span 926 * multiple lines. 927 */ 928 public CharSequence logExtendedForwardFailure( 929 final OperationContext opContext, 930 final ExtendedRequest request, 931 final ForwardTarget target, 932 final LDAPException failure) 933 { 934 // No log message will be generated by default. 935 return null; 936 } 937 938 939 940 /** 941 * Logs a message about the result of processing an extended request. 942 * 943 * @param opContext The operation context for the extended operation. 944 * @param request The extended request that was received. 945 * @param result The result of processing the extended request. 946 * 947 * @return The content of the log message that should be written. It may be 948 * {@code null} or empty if no message should be written. It may 949 * optionally include line breaks if the log message should span 950 * multiple lines. 951 */ 952 public CharSequence logExtendedResponse( 953 final CompletedOperationContext opContext, 954 final ExtendedRequest request, 955 final ExtendedResult result) 956 { 957 // No log message will be generated by default. 958 return null; 959 } 960 961 962 963 /** 964 * Logs a message about a modify request received from a client. 965 * 966 * @param opContext The operation context for the modify operation. 967 * @param request The modify request that was received. 968 * 969 * @return The content of the log message that should be written. It may be 970 * {@code null} or empty if no message should be written. It may 971 * optionally include line breaks if the log message should span 972 * multiple lines. 973 */ 974 public CharSequence logModifyRequest(final OperationContext opContext, 975 final ModifyRequest request) 976 { 977 // No log message will be generated by default. 978 return null; 979 } 980 981 982 983 /** 984 * Logs a message about a modify request that will be forwarded to another 985 * server. 986 * 987 * @param opContext The operation context for the modify operation. 988 * @param request The modify request that was received. 989 * @param target Information about the server to which the request will 990 * be forwarded. 991 * 992 * @return The content of the log message that should be written. It may be 993 * {@code null} or empty if no message should be written. It may 994 * optionally include line breaks if the log message should span 995 * multiple lines. 996 */ 997 public CharSequence logModifyForward(final OperationContext opContext, 998 final ModifyRequest request, 999 final ForwardTarget target) 1000 { 1001 // No log message will be generated by default. 1002 return null; 1003 } 1004 1005 1006 1007 /** 1008 * Logs a message about a failure encountered while attempting to forward a 1009 * modify request to another server. 1010 * 1011 * @param opContext The operation context for the modify operation. 1012 * @param request The modify request that was received. 1013 * @param target Information about the server to which the request was 1014 * forwarded. 1015 * @param failure The exception that was received when attempting to 1016 * forward the request. 1017 * 1018 * @return The content of the log message that should be written. It may be 1019 * {@code null} or empty if no message should be written. It may 1020 * optionally include line breaks if the log message should span 1021 * multiple lines. 1022 */ 1023 public CharSequence logModifyForwardFailure(final OperationContext opContext, 1024 final ModifyRequest request, 1025 final ForwardTarget target, 1026 final LDAPException failure) 1027 { 1028 // No log message will be generated by default. 1029 return null; 1030 } 1031 1032 1033 1034 /** 1035 * Logs a message about the result of processing a modify request. 1036 * 1037 * @param opContext The operation context for the modify operation. 1038 * @param request The modify request that was received. 1039 * @param result The result of processing the modify request. 1040 * 1041 * @return The content of the log message that should be written. It may be 1042 * {@code null} or empty if no message should be written. It may 1043 * optionally include line breaks if the log message should span 1044 * multiple lines. 1045 */ 1046 public CharSequence logModifyResponse( 1047 final CompletedOperationContext opContext, 1048 final ModifyRequest request, 1049 final ModifyResult result) 1050 { 1051 // No log message will be generated by default. 1052 return null; 1053 } 1054 1055 1056 1057 /** 1058 * Logs a message about a modify DN request received from a client. 1059 * 1060 * @param opContext The operation context for the modify DN operation. 1061 * @param request The modify DN request that was received. 1062 * 1063 * @return The content of the log message that should be written. It may be 1064 * {@code null} or empty if no message should be written. It may 1065 * optionally include line breaks if the log message should span 1066 * multiple lines. 1067 */ 1068 public CharSequence logModifyDNRequest(final OperationContext opContext, 1069 final ModifyDNRequest request) 1070 { 1071 // No log message will be generated by default. 1072 return null; 1073 } 1074 1075 1076 1077 /** 1078 * Logs a message about a modify DN request that will be forwarded to another 1079 * server. 1080 * 1081 * @param opContext The operation context for the modify DN operation. 1082 * @param request The modify DN request that was received. 1083 * @param target Information about the server to which the request will 1084 * be forwarded. 1085 * 1086 * @return The content of the log message that should be written. It may be 1087 * {@code null} or empty if no message should be written. It may 1088 * optionally include line breaks if the log message should span 1089 * multiple lines. 1090 */ 1091 public CharSequence logModifyDNForward(final OperationContext opContext, 1092 final ModifyDNRequest request, 1093 final ForwardTarget target) 1094 { 1095 // No log message will be generated by default. 1096 return null; 1097 } 1098 1099 1100 1101 /** 1102 * Logs a message about a failure encountered while attempting to forward a 1103 * modify DN request to another server. 1104 * 1105 * @param opContext The operation context for the modify DN operation. 1106 * @param request The modify DN request that was received. 1107 * @param target Information about the server to which the request was 1108 * forwarded. 1109 * @param failure The exception that was received when attempting to 1110 * forward the request. 1111 * 1112 * @return The content of the log message that should be written. It may be 1113 * {@code null} or empty if no message should be written. It may 1114 * optionally include line breaks if the log message should span 1115 * multiple lines. 1116 */ 1117 public CharSequence logModifyDNForwardFailure( 1118 final OperationContext opContext, 1119 final ModifyDNRequest request, 1120 final ForwardTarget target, 1121 final LDAPException failure) 1122 { 1123 // No log message will be generated by default. 1124 return null; 1125 } 1126 1127 1128 1129 /** 1130 * Logs a message about the result of processing a modify DN request. 1131 * 1132 * @param opContext The operation context for the modify DN operation. 1133 * @param request The modify DN request that was received. 1134 * @param result The result of processing the modify DN request. 1135 * 1136 * @return The content of the log message that should be written. It may be 1137 * {@code null} or empty if no message should be written. It may 1138 * optionally include line breaks if the log message should span 1139 * multiple lines. 1140 */ 1141 public CharSequence logModifyDNResponse( 1142 final CompletedOperationContext opContext, 1143 final ModifyDNRequest request, 1144 final ModifyDNResult result) 1145 { 1146 // No log message will be generated by default. 1147 return null; 1148 } 1149 1150 1151 1152 /** 1153 * Logs a message about a search request received from a client. 1154 * 1155 * @param opContext The operation context for the search operation. 1156 * @param request The search request that was received. 1157 * 1158 * @return The content of the log message that should be written. It may be 1159 * {@code null} or empty if no message should be written. It may 1160 * optionally include line breaks if the log message should span 1161 * multiple lines. 1162 */ 1163 public CharSequence logSearchRequest(final OperationContext opContext, 1164 final SearchRequest request) 1165 { 1166 // No log message will be generated by default. 1167 return null; 1168 } 1169 1170 1171 1172 /** 1173 * Logs a message about a search request that will be forwarded to another 1174 * server. 1175 * 1176 * @param opContext The operation context for the search operation. 1177 * @param request The search request that was received. 1178 * @param target Information about the server to which the request will 1179 * be forwarded. 1180 * 1181 * @return The content of the log message that should be written. It may be 1182 * {@code null} or empty if no message should be written. It may 1183 * optionally include line breaks if the log message should span 1184 * multiple lines. 1185 */ 1186 public CharSequence logSearchForward(final OperationContext opContext, 1187 final SearchRequest request, 1188 final ForwardTarget target) 1189 { 1190 // No log message will be generated by default. 1191 return null; 1192 } 1193 1194 1195 1196 /** 1197 * Logs a message about a failure encountered while attempting to forward a 1198 * search request to another server. 1199 * 1200 * @param opContext The operation context for the search operation. 1201 * @param request The search request that was received. 1202 * @param target Information about the server to which the request was 1203 * forwarded. 1204 * @param failure The exception that was received when attempting to 1205 * forward the request. 1206 * 1207 * @return The content of the log message that should be written. It may be 1208 * {@code null} or empty if no message should be written. It may 1209 * optionally include line breaks if the log message should span 1210 * multiple lines. 1211 */ 1212 public CharSequence logSearchForwardFailure(final OperationContext opContext, 1213 final SearchRequest request, 1214 final ForwardTarget target, 1215 final LDAPException failure) 1216 { 1217 // No log message will be generated by default. 1218 return null; 1219 } 1220 1221 1222 1223 /** 1224 * Logs a message about a search result entry that was returned to the client. 1225 * 1226 * @param opContext The operation context for the search operation. 1227 * @param request The search request that was received. 1228 * @param entry The entry that was returned. 1229 * @param controls The set of controls included with the entry, or an empty 1230 * list if there were none. 1231 * 1232 * @return The content of the log message that should be written. It may be 1233 * {@code null} or empty if no message should be written. It may 1234 * optionally include line breaks if the log message should span 1235 * multiple lines. 1236 */ 1237 public CharSequence logSearchResultEntry(final OperationContext opContext, 1238 final SearchRequest request, 1239 final Entry entry, 1240 final List<Control> controls) 1241 { 1242 // No log message will be generated by default. 1243 return null; 1244 } 1245 1246 1247 1248 /** 1249 * Logs a message about a search result reference that was returned to the 1250 * client. 1251 * 1252 * @param opContext The operation context for the search operation. 1253 * @param request The search request that was received. 1254 * @param referralURLs The referral URLs for the reference that was 1255 * returned. 1256 * @param controls The set of controls included with the reference, or 1257 * an empty list if there were none. 1258 * 1259 * @return The content of the log message that should be written. It may be 1260 * {@code null} or empty if no message should be written. It may 1261 * optionally include line breaks if the log message should span 1262 * multiple lines. 1263 */ 1264 public CharSequence logSearchResultReference(final OperationContext opContext, 1265 final SearchRequest request, 1266 final List<String> referralURLs, 1267 final List<Control> controls) 1268 { 1269 // No log message will be generated by default. 1270 return null; 1271 } 1272 1273 1274 1275 /** 1276 * Logs a message about the result of processing a search request. 1277 * 1278 * @param opContext The operation context for the search operation. 1279 * @param request The search request that was received. 1280 * @param result The result of processing the search request. 1281 * 1282 * @return The content of the log message that should be written. It may be 1283 * {@code null} or empty if no message should be written. It may 1284 * optionally include line breaks if the log message should span 1285 * multiple lines. 1286 */ 1287 public CharSequence logSearchResultDone( 1288 final CompletedSearchOperationContext opContext, 1289 final SearchRequest request, 1290 final SearchResult result) 1291 { 1292 // No log message will be generated by default. 1293 return null; 1294 } 1295 1296 1297 1298 /** 1299 * Logs a message about an unbind request received from a client. 1300 * 1301 * @param opContext The operation context for the unbind operation. 1302 * @param request The unbind request that was received. 1303 * 1304 * @return The content of the log message that should be written. It may be 1305 * {@code null} or empty if no message should be written. It may 1306 * optionally include line breaks if the log message should span 1307 * multiple lines. 1308 */ 1309 public CharSequence logUnbindRequest(final OperationContext opContext, 1310 final UnbindRequest request) 1311 { 1312 // No log message will be generated by default. 1313 return null; 1314 } 1315 1316 1317 1318 /** 1319 * Logs a message about an intermediate response that was returned to the 1320 * client. 1321 * 1322 * @param opContext The operation context for the associated 1323 * operation. 1324 * @param intermediateResponse The intermediate response that was returned. 1325 * 1326 * @return The content of the log message that should be written. It may be 1327 * {@code null} or empty if no message should be written. It may 1328 * optionally include line breaks if the log message should span 1329 * multiple lines. 1330 */ 1331 public CharSequence logIntermediateResponse(final OperationContext opContext, 1332 final IntermediateResponse intermediateResponse) 1333 { 1334 // No log message will be generated by default. 1335 return null; 1336 } 1337 1338 1339 1340 /** 1341 * Writes a message to the access logger to indicate that the Directory Proxy 1342 * Server will attempt to perform entry rebalancing by migrating a subtree 1343 * from one backend set to another. 1344 * 1345 * @param rebalancingOperationID The unique ID assigned to the entry 1346 * balancing operation. 1347 * @param triggerOperation The operation that triggered the entry 1348 * rebalancing. It may be {@code null} if the 1349 * rebalancing operation wasn't triggered by a 1350 * client request. 1351 * @param baseDN The base DN of the subtree to migrate. 1352 * @param sizeLimit The maximum number of entries to migrate. 1353 * @param sourceBackendSetName The name of the backend set containing the 1354 * subtree to migrate. 1355 * @param sourceAddress The address of the server from which the 1356 * source entries will be read. 1357 * @param sourcePort The port of the server from which the 1358 * source entries will be read. 1359 * @param targetBackendSetName The name of the backend set to which the 1360 * subtree will be migrated. 1361 * @param targetAddress The address of the server to which the 1362 * subtree will be migrated. 1363 * @param targetPort The port of the server to which the subtree 1364 * will be migrated. 1365 * 1366 * @return The content of the log message that should be written. It may be 1367 * {@code null} or empty if no message should be written. It may 1368 * optionally include line breaks if the log message should span 1369 * multiple lines. 1370 */ 1371 public CharSequence logEntryRebalancingRequest( 1372 final long rebalancingOperationID, 1373 final OperationContext triggerOperation, 1374 final String baseDN, final int sizeLimit, 1375 final String sourceBackendSetName, 1376 final String sourceAddress, final int sourcePort, 1377 final String targetBackendSetName, 1378 final String targetAddress, final int targetPort) 1379 { 1380 // No log message will be generated by default. 1381 return null; 1382 } 1383 1384 1385 1386 /** 1387 * Writes a message to the access logger to indicate that the Directory Proxy 1388 * Server will attempt to perform entry rebalancing by migrating a subtree 1389 * from one backend set to another. 1390 * 1391 * @param rebalancingOperationID The unique ID assigned to the entry 1392 * balancing operation. 1393 * @param triggerOperation The operation that triggered the entry 1394 * rebalancing. It may be {@code null} if the 1395 * rebalancing operation wasn't triggered by a 1396 * client request. 1397 * @param baseDN The base DN of the subtree to migrate. 1398 * @param sizeLimit The maximum number of entries to migrate. 1399 * @param sourceBackendSetName The name of the backend set containing the 1400 * subtree to migrate. 1401 * @param sourceAddress The address of the server from which the 1402 * source entries will be read. 1403 * @param sourcePort The port of the server from which the 1404 * source entries will be read. 1405 * @param targetBackendSetName The name of the backend set to which the 1406 * subtree will be migrated. 1407 * @param targetAddress The address of the server to which the 1408 * subtree will be migrated. 1409 * @param targetPort The port of the server to which the subtree 1410 * will be migrated. 1411 * @param moveSubtreeResult An object with information about the result 1412 * of the subtree move processing. 1413 * 1414 * @return The content of the log message that should be written. It may be 1415 * {@code null} or empty if no message should be written. It may 1416 * optionally include line breaks if the log message should span 1417 * multiple lines. 1418 */ 1419 public CharSequence logEntryRebalancingResult( 1420 final long rebalancingOperationID, 1421 final OperationContext triggerOperation, 1422 final String baseDN, final int sizeLimit, 1423 final String sourceBackendSetName, 1424 final String sourceAddress, final int sourcePort, 1425 final String targetBackendSetName, 1426 final String targetAddress, final int targetPort, 1427 final MoveSubtreeResult moveSubtreeResult) 1428 { 1429 // No log message will be generated by default. 1430 return null; 1431 } 1432 }