From 94bbd5bb7c20a490558d8ec97d1be7e3dc492a42 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Sun, 09 Sep 2007 23:08:09 +0000
Subject: [PATCH] Update the server to provide a basic framework for controlling when plugins will be invoked. There are two basic changes:
---
opends/src/server/org/opends/server/core/PluginConfigManager.java | 606 ++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 535 insertions(+), 71 deletions(-)
diff --git a/opends/src/server/org/opends/server/core/PluginConfigManager.java b/opends/src/server/org/opends/server/core/PluginConfigManager.java
index 1552f9f..e65bf24 100644
--- a/opends/src/server/org/opends/server/core/PluginConfigManager.java
+++ b/opends/src/server/org/opends/server/core/PluginConfigManager.java
@@ -25,7 +25,6 @@
* Portions Copyright 2006-2007 Sun Microsystems, Inc.
*/
package org.opends.server.core;
-import org.opends.messages.Message;
@@ -41,6 +40,8 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
import org.opends.server.admin.ClassPropertyDefinition;
import org.opends.server.admin.server.ConfigurationAddListener;
import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -66,12 +67,11 @@
import org.opends.server.api.plugin.StartupPluginResult;
import org.opends.server.api.plugin.SubordinateModifyDNPluginResult;
import org.opends.server.config.ConfigException;
+import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DisconnectReason;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
-
-
import org.opends.server.types.InitializationException;
import org.opends.server.types.IntermediateResponse;
import org.opends.server.types.LDIFExportConfig;
@@ -80,7 +80,6 @@
import org.opends.server.types.ResultCode;
import org.opends.server.types.SearchResultEntry;
import org.opends.server.types.SearchResultReference;
-
import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.Modification;
import org.opends.server.types.operation.PostOperationAbandonOperation;
@@ -101,6 +100,10 @@
import org.opends.server.types.operation.PostResponseModifyDNOperation;
import org.opends.server.types.operation.PostResponseModifyOperation;
import org.opends.server.types.operation.PostResponseSearchOperation;
+import org.opends.server.types.operation.PostSynchronizationAddOperation;
+import org.opends.server.types.operation.PostSynchronizationDeleteOperation;
+import org.opends.server.types.operation.PostSynchronizationModifyOperation;
+import org.opends.server.types.operation.PostSynchronizationModifyDNOperation;
import org.opends.server.types.operation.PreOperationAddOperation;
import org.opends.server.types.operation.PreOperationBindOperation;
import org.opends.server.types.operation.PreOperationCompareOperation;
@@ -124,13 +127,10 @@
import org.opends.server.types.operation.SubordinateModifyDNOperation;
import org.opends.server.workflowelement.localbackend.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.loggers.ErrorLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.messages.ConfigMessages.*;
import static org.opends.messages.PluginMessages.*;
-
-import org.opends.messages.MessageBuilder;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.util.StaticUtils.*;
@@ -195,6 +195,10 @@
private DirectoryServerPlugin[] postResponseModifyPlugins;
private DirectoryServerPlugin[] postResponseModifyDNPlugins;
private DirectoryServerPlugin[] postResponseSearchPlugins;
+ private DirectoryServerPlugin[] postSynchronizationAddPlugins;
+ private DirectoryServerPlugin[] postSynchronizationDeletePlugins;
+ private DirectoryServerPlugin[] postSynchronizationModifyPlugins;
+ private DirectoryServerPlugin[] postSynchronizationModifyDNPlugins;
private DirectoryServerPlugin[] searchResultEntryPlugins;
private DirectoryServerPlugin[] searchResultReferencePlugins;
private DirectoryServerPlugin[] subordinateModifyDNPlugins;
@@ -223,53 +227,57 @@
{
pluginLock = new ReentrantLock();
- startupPlugins = new DirectoryServerPlugin[0];
- shutdownPlugins = new DirectoryServerPlugin[0];
- postConnectPlugins = new DirectoryServerPlugin[0];
- postDisconnectPlugins = new DirectoryServerPlugin[0];
- ldifImportPlugins = new DirectoryServerPlugin[0];
- ldifExportPlugins = new DirectoryServerPlugin[0];
- preParseAbandonPlugins = new DirectoryServerPlugin[0];
- preParseAddPlugins = new DirectoryServerPlugin[0];
- preParseBindPlugins = new DirectoryServerPlugin[0];
- preParseComparePlugins = new DirectoryServerPlugin[0];
- preParseDeletePlugins = new DirectoryServerPlugin[0];
- preParseExtendedPlugins = new DirectoryServerPlugin[0];
- preParseModifyPlugins = new DirectoryServerPlugin[0];
- preParseModifyDNPlugins = new DirectoryServerPlugin[0];
- preParseSearchPlugins = new DirectoryServerPlugin[0];
- preParseUnbindPlugins = new DirectoryServerPlugin[0];
- preOperationAddPlugins = new DirectoryServerPlugin[0];
- preOperationBindPlugins = new DirectoryServerPlugin[0];
- preOperationComparePlugins = new DirectoryServerPlugin[0];
- preOperationDeletePlugins = new DirectoryServerPlugin[0];
- preOperationExtendedPlugins = new DirectoryServerPlugin[0];
- preOperationModifyPlugins = new DirectoryServerPlugin[0];
- preOperationModifyDNPlugins = new DirectoryServerPlugin[0];
- preOperationSearchPlugins = new DirectoryServerPlugin[0];
- postOperationAbandonPlugins = new DirectoryServerPlugin[0];
- postOperationAddPlugins = new DirectoryServerPlugin[0];
- postOperationBindPlugins = new DirectoryServerPlugin[0];
- postOperationComparePlugins = new DirectoryServerPlugin[0];
- postOperationDeletePlugins = new DirectoryServerPlugin[0];
- postOperationExtendedPlugins = new DirectoryServerPlugin[0];
- postOperationModifyPlugins = new DirectoryServerPlugin[0];
- postOperationModifyDNPlugins = new DirectoryServerPlugin[0];
- postOperationSearchPlugins = new DirectoryServerPlugin[0];
- postOperationUnbindPlugins = new DirectoryServerPlugin[0];
- postResponseAddPlugins = new DirectoryServerPlugin[0];
- postResponseBindPlugins = new DirectoryServerPlugin[0];
- postResponseComparePlugins = new DirectoryServerPlugin[0];
- postResponseDeletePlugins = new DirectoryServerPlugin[0];
- postResponseExtendedPlugins = new DirectoryServerPlugin[0];
- postResponseModifyPlugins = new DirectoryServerPlugin[0];
- postResponseModifyDNPlugins = new DirectoryServerPlugin[0];
- postResponseSearchPlugins = new DirectoryServerPlugin[0];
- searchResultEntryPlugins = new DirectoryServerPlugin[0];
- searchResultReferencePlugins = new DirectoryServerPlugin[0];
- subordinateModifyDNPlugins = new DirectoryServerPlugin[0];
- intermediateResponsePlugins = new DirectoryServerPlugin[0];
- registeredPlugins =
+ startupPlugins = new DirectoryServerPlugin[0];
+ shutdownPlugins = new DirectoryServerPlugin[0];
+ postConnectPlugins = new DirectoryServerPlugin[0];
+ postDisconnectPlugins = new DirectoryServerPlugin[0];
+ ldifImportPlugins = new DirectoryServerPlugin[0];
+ ldifExportPlugins = new DirectoryServerPlugin[0];
+ preParseAbandonPlugins = new DirectoryServerPlugin[0];
+ preParseAddPlugins = new DirectoryServerPlugin[0];
+ preParseBindPlugins = new DirectoryServerPlugin[0];
+ preParseComparePlugins = new DirectoryServerPlugin[0];
+ preParseDeletePlugins = new DirectoryServerPlugin[0];
+ preParseExtendedPlugins = new DirectoryServerPlugin[0];
+ preParseModifyPlugins = new DirectoryServerPlugin[0];
+ preParseModifyDNPlugins = new DirectoryServerPlugin[0];
+ preParseSearchPlugins = new DirectoryServerPlugin[0];
+ preParseUnbindPlugins = new DirectoryServerPlugin[0];
+ preOperationAddPlugins = new DirectoryServerPlugin[0];
+ preOperationBindPlugins = new DirectoryServerPlugin[0];
+ preOperationComparePlugins = new DirectoryServerPlugin[0];
+ preOperationDeletePlugins = new DirectoryServerPlugin[0];
+ preOperationExtendedPlugins = new DirectoryServerPlugin[0];
+ preOperationModifyPlugins = new DirectoryServerPlugin[0];
+ preOperationModifyDNPlugins = new DirectoryServerPlugin[0];
+ preOperationSearchPlugins = new DirectoryServerPlugin[0];
+ postOperationAbandonPlugins = new DirectoryServerPlugin[0];
+ postOperationAddPlugins = new DirectoryServerPlugin[0];
+ postOperationBindPlugins = new DirectoryServerPlugin[0];
+ postOperationComparePlugins = new DirectoryServerPlugin[0];
+ postOperationDeletePlugins = new DirectoryServerPlugin[0];
+ postOperationExtendedPlugins = new DirectoryServerPlugin[0];
+ postOperationModifyPlugins = new DirectoryServerPlugin[0];
+ postOperationModifyDNPlugins = new DirectoryServerPlugin[0];
+ postOperationSearchPlugins = new DirectoryServerPlugin[0];
+ postOperationUnbindPlugins = new DirectoryServerPlugin[0];
+ postResponseAddPlugins = new DirectoryServerPlugin[0];
+ postResponseBindPlugins = new DirectoryServerPlugin[0];
+ postResponseComparePlugins = new DirectoryServerPlugin[0];
+ postResponseDeletePlugins = new DirectoryServerPlugin[0];
+ postResponseExtendedPlugins = new DirectoryServerPlugin[0];
+ postResponseModifyPlugins = new DirectoryServerPlugin[0];
+ postResponseModifyDNPlugins = new DirectoryServerPlugin[0];
+ postResponseSearchPlugins = new DirectoryServerPlugin[0];
+ postSynchronizationAddPlugins = new DirectoryServerPlugin[0];
+ postSynchronizationDeletePlugins = new DirectoryServerPlugin[0];
+ postSynchronizationModifyPlugins = new DirectoryServerPlugin[0];
+ postSynchronizationModifyDNPlugins = new DirectoryServerPlugin[0];
+ searchResultEntryPlugins = new DirectoryServerPlugin[0];
+ searchResultReferencePlugins = new DirectoryServerPlugin[0];
+ subordinateModifyDNPlugins = new DirectoryServerPlugin[0];
+ intermediateResponsePlugins = new DirectoryServerPlugin[0];
+ registeredPlugins =
new ConcurrentHashMap<DN,
DirectoryServerPlugin<? extends PluginCfg>>();
}
@@ -404,8 +412,8 @@
if (initialize)
{
Method method = plugin.getClass().getMethod("initializeInternal",
- DN.class, Set.class);
- method.invoke(plugin, configuration.dn(), pluginTypes);
+ PluginCfg.class, Set.class);
+ method.invoke(plugin, configuration, pluginTypes);
method = plugin.getClass().getMethod("initializePlugin", Set.class,
configuration.definition().getServerConfigurationClass());
@@ -511,6 +519,14 @@
case SEARCHRESULTREFERENCE: return PluginType.SEARCH_RESULT_REFERENCE;
case SUBORDINATEMODIFYDN: return PluginType.SUBORDINATE_MODIFY_DN;
case INTERMEDIATERESPONSE: return PluginType.INTERMEDIATE_RESPONSE;
+ case POSTSYNCHRONIZATIONADD:
+ return PluginType.POST_SYNCHRONIZATION_ADD;
+ case POSTSYNCHRONIZATIONDELETE:
+ return PluginType.POST_SYNCHRONIZATION_DELETE;
+ case POSTSYNCHRONIZATIONMODIFY:
+ return PluginType.POST_SYNCHRONIZATION_MODIFY;
+ case POSTSYNCHRONIZATIONMODIFYDN:
+ return PluginType.POST_SYNCHRONIZATION_MODIFY_DN;
default: return null;
}
}
@@ -819,6 +835,30 @@
addPlugin(postResponseSearchPlugins, plugin, t,
pluginRootConfig.getPluginOrderPostResponseSearch());
break;
+ case POST_SYNCHRONIZATION_ADD:
+ postSynchronizationAddPlugins =
+ addPlugin(postSynchronizationAddPlugins, plugin, t,
+ pluginRootConfig.
+ getPluginOrderPostSynchronizationAdd());
+ break;
+ case POST_SYNCHRONIZATION_DELETE:
+ postSynchronizationDeletePlugins =
+ addPlugin(postSynchronizationDeletePlugins, plugin, t,
+ pluginRootConfig.
+ getPluginOrderPostSynchronizationDelete());
+ break;
+ case POST_SYNCHRONIZATION_MODIFY:
+ postSynchronizationModifyPlugins =
+ addPlugin(postSynchronizationModifyPlugins, plugin, t,
+ pluginRootConfig.
+ getPluginOrderPostSynchronizationModify());
+ break;
+ case POST_SYNCHRONIZATION_MODIFY_DN:
+ postSynchronizationModifyDNPlugins =
+ addPlugin(postSynchronizationModifyDNPlugins, plugin, t,
+ pluginRootConfig.
+ getPluginOrderPostSynchronizationModifyDN());
+ break;
case SEARCH_RESULT_ENTRY:
searchResultEntryPlugins =
addPlugin(searchResultEntryPlugins, plugin, t,
@@ -1244,6 +1284,22 @@
postResponseSearchPlugins = removePlugin(postResponseSearchPlugins,
plugin);
break;
+ case POST_SYNCHRONIZATION_ADD:
+ postSynchronizationAddPlugins =
+ removePlugin(postSynchronizationAddPlugins, plugin);
+ break;
+ case POST_SYNCHRONIZATION_DELETE:
+ postSynchronizationDeletePlugins =
+ removePlugin(postSynchronizationDeletePlugins, plugin);
+ break;
+ case POST_SYNCHRONIZATION_MODIFY:
+ postSynchronizationModifyPlugins =
+ removePlugin(postSynchronizationModifyPlugins, plugin);
+ break;
+ case POST_SYNCHRONIZATION_MODIFY_DN:
+ postSynchronizationModifyDNPlugins =
+ removePlugin(postSynchronizationModifyDNPlugins, plugin);
+ break;
case SEARCH_RESULT_ENTRY:
searchResultEntryPlugins = removePlugin(searchResultEntryPlugins,
plugin);
@@ -1740,6 +1796,12 @@
for (DirectoryServerPlugin p : preParseAbandonPlugins)
{
+ if (abandonOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(abandonOperation);
@@ -1816,6 +1878,12 @@
for (DirectoryServerPlugin p : preParseAddPlugins)
{
+ if (addOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(addOperation);
@@ -1889,6 +1957,12 @@
for (DirectoryServerPlugin p : preParseBindPlugins)
{
+ if (bindOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(bindOperation);
@@ -1962,6 +2036,12 @@
for (DirectoryServerPlugin p : preParseComparePlugins)
{
+ if (compareOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(compareOperation);
@@ -2038,6 +2118,12 @@
for (DirectoryServerPlugin p : preParseDeletePlugins)
{
+ if (deleteOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(deleteOperation);
@@ -2114,6 +2200,12 @@
for (DirectoryServerPlugin p : preParseExtendedPlugins)
{
+ if (extendedOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(extendedOperation);
@@ -2178,21 +2270,27 @@
* Invokes the set of pre-parse modify plugins that have been configured in
* the Directory Server.
*
- * @param operation The modify operation for which to invoke the
+ * @param modifyOperation The modify operation for which to invoke the
* pre-parse plugins.
*
* @return The result of processing the pre-parse modify plugins.
*/
public PreParsePluginResult invokePreParseModifyPlugins(
- PreParseModifyOperation operation)
+ PreParseModifyOperation modifyOperation)
{
PreParsePluginResult result = null;
for (DirectoryServerPlugin p : preParseModifyPlugins)
{
+ if (modifyOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
- result = p.doPreParse(operation);
+ result = p.doPreParse(modifyOperation);
}
catch (Exception e)
{
@@ -2202,15 +2300,16 @@
}
Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
- get(operation.getOperationType().getOperationName(),
+ get(modifyOperation.getOperationType().getOperationName(),
String.valueOf(p.getPluginEntryDN()),
- operation.getConnectionID(), operation.getOperationID(),
+ modifyOperation.getConnectionID(),
+ modifyOperation.getOperationID(),
stackTraceToSingleLineString(e));
logError(message);
- operation.setResultCode(
+ modifyOperation.setResultCode(
DirectoryServer.getServerErrorResultCode());
- operation.appendErrorMessage(message);
+ modifyOperation.appendErrorMessage(message);
return new PreParsePluginResult(false, false, true);
}
@@ -2218,15 +2317,15 @@
if (result == null)
{
Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
- get(operation.getOperationType().getOperationName(),
+ get(modifyOperation.getOperationType().getOperationName(),
String.valueOf(p.getPluginEntryDN()),
- operation.getConnectionID(),
- String.valueOf(operation.getOperationID()));
+ modifyOperation.getConnectionID(),
+ String.valueOf(modifyOperation.getOperationID()));
logError(message);
- operation.setResultCode(
+ modifyOperation.setResultCode(
DirectoryServer.getServerErrorResultCode());
- operation.appendErrorMessage(message);
+ modifyOperation.appendErrorMessage(message);
return new PreParsePluginResult(false, false, true);
}
@@ -2265,6 +2364,12 @@
for (DirectoryServerPlugin p : preParseModifyDNPlugins)
{
+ if (modifyDNOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(modifyDNOperation);
@@ -2341,6 +2446,12 @@
for (DirectoryServerPlugin p : preParseSearchPlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(searchOperation);
@@ -2417,6 +2528,12 @@
for (DirectoryServerPlugin p : preParseUnbindPlugins)
{
+ if (unbindOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreParse(unbindOperation);
@@ -2493,6 +2610,12 @@
for (DirectoryServerPlugin p : preOperationAddPlugins)
{
+ if (addOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(addOperation);
@@ -2565,6 +2688,12 @@
for (DirectoryServerPlugin p : preOperationBindPlugins)
{
+ if (bindOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(bindOperation);
@@ -2638,6 +2767,12 @@
for (DirectoryServerPlugin p : preOperationComparePlugins)
{
+ if (compareOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(compareOperation);
@@ -2714,6 +2849,12 @@
for (DirectoryServerPlugin p : preOperationDeletePlugins)
{
+ if (deleteOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(deleteOperation);
@@ -2790,6 +2931,12 @@
for (DirectoryServerPlugin p : preOperationExtendedPlugins)
{
+ if (extendedOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(extendedOperation);
@@ -2866,6 +3013,12 @@
for (DirectoryServerPlugin p : preOperationModifyPlugins)
{
+ if (modifyOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(modifyOperation);
@@ -2942,6 +3095,12 @@
for (DirectoryServerPlugin p : preOperationModifyDNPlugins)
{
+ if (modifyDNOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(modifyDNOperation);
@@ -3018,6 +3177,12 @@
for (DirectoryServerPlugin p : preOperationSearchPlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPreOperation(searchOperation);
@@ -3094,6 +3259,12 @@
for (DirectoryServerPlugin p : postOperationAbandonPlugins)
{
+ if (abandonOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(abandonOperation);
@@ -3170,6 +3341,12 @@
for (DirectoryServerPlugin p : postOperationAddPlugins)
{
+ if (addOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(addOperation);
@@ -3242,6 +3419,12 @@
for (DirectoryServerPlugin p : postOperationBindPlugins)
{
+ if (bindOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(bindOperation);
@@ -3315,6 +3498,12 @@
for (DirectoryServerPlugin p : postOperationComparePlugins)
{
+ if (compareOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(compareOperation);
@@ -3391,6 +3580,12 @@
for (DirectoryServerPlugin p : postOperationDeletePlugins)
{
+ if (deleteOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(deleteOperation);
@@ -3467,6 +3662,12 @@
for (DirectoryServerPlugin p : postOperationExtendedPlugins)
{
+ if (extendedOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(extendedOperation);
@@ -3543,6 +3744,12 @@
for (DirectoryServerPlugin p : postOperationModifyPlugins)
{
+ if (modifyOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(modifyOperation);
@@ -3619,6 +3826,12 @@
for (DirectoryServerPlugin p : postOperationModifyDNPlugins)
{
+ if (modifyDNOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(modifyDNOperation);
@@ -3695,6 +3908,12 @@
for (DirectoryServerPlugin p : postOperationSearchPlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(searchOperation);
@@ -3771,6 +3990,12 @@
for (DirectoryServerPlugin p : postOperationUnbindPlugins)
{
+ if (unbindOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostOperation(unbindOperation);
@@ -3847,6 +4072,12 @@
for (DirectoryServerPlugin p : postResponseAddPlugins)
{
+ if (addOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(addOperation);
@@ -3913,6 +4144,12 @@
for (DirectoryServerPlugin p : postResponseBindPlugins)
{
+ if (bindOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(bindOperation);
@@ -3980,6 +4217,12 @@
for (DirectoryServerPlugin p : postResponseComparePlugins)
{
+ if (compareOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(compareOperation);
@@ -4048,6 +4291,12 @@
for (DirectoryServerPlugin p : postResponseDeletePlugins)
{
+ if (deleteOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(deleteOperation);
@@ -4116,6 +4365,12 @@
for (DirectoryServerPlugin p : postResponseExtendedPlugins)
{
+ if (extendedOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(extendedOperation);
@@ -4184,6 +4439,12 @@
for (DirectoryServerPlugin p : postResponseModifyPlugins)
{
+ if (modifyOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(modifyOperation);
@@ -4252,6 +4513,12 @@
for (DirectoryServerPlugin p : postResponseModifyDNPlugins)
{
+ if (modifyDNOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(modifyDNOperation);
@@ -4320,6 +4587,12 @@
for (DirectoryServerPlugin p : postResponseSearchPlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.doPostResponse(searchOperation);
@@ -4370,6 +4643,151 @@
return result;
}
+
+
+ /**
+ * Invokes the set of post-synchronization add plugins that have been
+ * configured in the Directory Server.
+ *
+ * @param addOperation The add operation for which to invoke the
+ * post-synchronization plugins.
+ */
+ public void invokePostSynchronizationAddPlugins(
+ PostSynchronizationAddOperation addOperation)
+ {
+ for (DirectoryServerPlugin p : postSynchronizationAddPlugins)
+ {
+ try
+ {
+ p.doPostSynchronization(addOperation);
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+ get(addOperation.getOperationType().getOperationName(),
+ String.valueOf(p.getPluginEntryDN()),
+ addOperation.getConnectionID(), addOperation.getOperationID(),
+ stackTraceToSingleLineString(e));
+ logError(message);
+ }
+ }
+ }
+
+
+
+ /**
+ * Invokes the set of post-synchronization delete plugins that have been
+ * configured in the Directory Server.
+ *
+ * @param deleteOperation The delete operation for which to invoke the
+ * post-synchronization plugins.
+ */
+ public void invokePostSynchronizationDeletePlugins(
+ PostSynchronizationDeleteOperation deleteOperation)
+ {
+ for (DirectoryServerPlugin p : postSynchronizationDeletePlugins)
+ {
+ try
+ {
+ p.doPostSynchronization(deleteOperation);
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+ get(deleteOperation.getOperationType().getOperationName(),
+ String.valueOf(p.getPluginEntryDN()),
+ deleteOperation.getConnectionID(),
+ deleteOperation.getOperationID(),
+ stackTraceToSingleLineString(e));
+ logError(message);
+ }
+ }
+ }
+
+
+
+ /**
+ * Invokes the set of post-synchronization modify plugins that have been
+ * configured in the Directory Server.
+ *
+ * @param modifyOperation The modify operation for which to invoke the
+ * post-synchronization plugins.
+ */
+ public void invokePostSynchronizationModifyPlugins(
+ PostSynchronizationModifyOperation modifyOperation)
+ {
+ for (DirectoryServerPlugin p : postSynchronizationModifyPlugins)
+ {
+ try
+ {
+ p.doPostSynchronization(modifyOperation);
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+ get(modifyOperation.getOperationType().getOperationName(),
+ String.valueOf(p.getPluginEntryDN()),
+ modifyOperation.getConnectionID(),
+ modifyOperation.getOperationID(),
+ stackTraceToSingleLineString(e));
+ logError(message);
+ }
+ }
+ }
+
+
+
+ /**
+ * Invokes the set of post-synchronization modify DN plugins that have been
+ * configured in the Directory Server.
+ *
+ * @param modifyDNOperation The modify DN operation for which to invoke the
+ * post-synchronization plugins.
+ */
+ public void invokePostSynchronizationModifyDNPlugins(
+ PostSynchronizationModifyDNOperation modifyDNOperation)
+ {
+ for (DirectoryServerPlugin p : postSynchronizationModifyDNPlugins)
+ {
+ try
+ {
+ p.doPostSynchronization(modifyDNOperation);
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+ get(modifyDNOperation.getOperationType().getOperationName(),
+ String.valueOf(p.getPluginEntryDN()),
+ modifyDNOperation.getConnectionID(),
+ modifyDNOperation.getOperationID(),
+ stackTraceToSingleLineString(e));
+ logError(message);
+ }
+ }
+ }
+
+
+
/**
* Invokes the set of search result entry plugins that have been configured
* in the Directory Server.
@@ -4388,6 +4806,12 @@
for (DirectoryServerPlugin p : searchResultEntryPlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.processSearchEntry(searchOperation, searchEntry);
@@ -4438,6 +4862,8 @@
return result;
}
+
+
/**
* Invokes the set of search result entry plugins that have been configured
* in the Directory Server.
@@ -4456,6 +4882,18 @@
for (DirectoryServerPlugin p : searchResultEntryPlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.processSearchEntry(searchOperation, searchEntry);
@@ -4506,6 +4944,8 @@
return result;
}
+
+
/**
* Invokes the set of search result reference plugins that have been
* configured in the Directory Server.
@@ -4524,6 +4964,12 @@
for (DirectoryServerPlugin p : searchResultReferencePlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.processSearchReference(searchOperation, searchReference);
@@ -4574,6 +5020,8 @@
return result;
}
+
+
/**
* Invokes the set of search result reference plugins that have been
* configured in the Directory Server.
@@ -4592,6 +5040,12 @@
for (DirectoryServerPlugin p : searchResultReferencePlugins)
{
+ if (searchOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
result = p.processSearchReference(searchOperation, searchReference);
@@ -4667,6 +5121,12 @@
for (DirectoryServerPlugin p : subordinateModifyDNPlugins)
{
+ if (modifyDNOperation.isInternalOperation() &&
+ (! p.invokeForInternalOperations()))
+ {
+ continue;
+ }
+
try
{
DirectoryServerPlugin<? extends PluginCfg> gp =
@@ -4972,7 +5432,8 @@
// then we shouldn't do anything with it although if the class has changed
// then we'll at least need to indicate that administrative action is
// required. If the mapper is disabled, then instantiate the class and
- // initialize and register it as an identity mapper.
+ // initialize and register it as an identity mapper. Also, update the
+ // plugin to indicate whether it should be invoked for internal operations.
String className = configuration.getPluginClass();
if (existingPlugin != null)
{
@@ -4981,6 +5442,9 @@
adminActionRequired = true;
}
+ existingPlugin.setInvokeForInternalOperations(
+ configuration.isInvokeForInternalOperations());
+
return new ConfigChangeResult(resultCode, adminActionRequired, messages);
}
--
Gitblit v1.10.0