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