From 5a79c1ecc7e706202a2a668e6cb12624f302ed35 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Fri, 17 Jan 2014 15:13:21 -0500 Subject: [PATCH 81/83] Ticket 47620 - Unable to delete protocol timeout attribute Bug Description: Attempting to delete nsds5ReplicaProtocolTimeout from a replication agreement unexpectedly fails with an error 53. Fix Description: The previous delete operation check was in the wrong location, and the delete operation was treated as a modify - which then triggered the error 53. Added the correct check for the delete operation. Also removed some old code for a CLEANALLRUV attribute that was never implemented. https://fedorahosted.org/389/ticket/47620 Reviewed by: nhosoi(Thanks!) (cherry picked from commit 9c41a365e8fbd23cab28eb91f50cdce696a30730) (cherry picked from commit 77380161e9e04f64a431dd35ce4b4c45ed01cae5) --- ldap/servers/plugins/replication/repl5.h | 1 - ldap/servers/plugins/replication/repl5_agmtlist.c | 46 +++++++++++------------ ldap/servers/plugins/replication/repl_globals.c | 1 - 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/ldap/servers/plugins/replication/repl5.h b/ldap/servers/plugins/replication/repl5.h index 321a285..655e8ba 100644 --- a/ldap/servers/plugins/replication/repl5.h +++ b/ldap/servers/plugins/replication/repl5.h @@ -167,7 +167,6 @@ extern const char *type_nsds5ReplicaBusyWaitTime; extern const char *type_nsds5ReplicaSessionPauseTime; extern const char *type_nsds5ReplicaEnabled; extern const char *type_nsds5ReplicaStripAttrs; -extern const char *type_nsds5ReplicaCleanRUVnotified; extern const char *type_replicaProtocolTimeout; extern const char *type_replicaBackoffMin; extern const char *type_replicaBackoffMax; diff --git a/ldap/servers/plugins/replication/repl5_agmtlist.c b/ldap/servers/plugins/replication/repl5_agmtlist.c index 9e0291f..0edf28a 100644 --- a/ldap/servers/plugins/replication/repl5_agmtlist.c +++ b/ldap/servers/plugins/replication/repl5_agmtlist.c @@ -254,15 +254,6 @@ agmtlist_modify_callback(Slapi_PBlock *pb, Slapi_Entry *entryBefore, Slapi_Entry the replication plugin - handled above */ if (mods[i]->mod_op & LDAP_MOD_DELETE) { - if(strcasecmp (mods[i]->mod_type, type_nsds5ReplicaCleanRUVnotified) == 0 ){ - /* allow the deletion of cleanallruv agmt attr */ - continue; - } - if(strcasecmp (mods[i]->mod_type, type_replicaProtocolTimeout) == 0){ - agmt_set_protocol_timeout(agmt, 0); - continue; - } - slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, "agmtlist_modify_callback: " "deletion of %s attribute is not allowed\n", type_nsds5ReplicaInitialize); *returncode = LDAP_UNWILLING_TO_PERFORM; @@ -505,23 +496,30 @@ agmtlist_modify_callback(Slapi_PBlock *pb, Slapi_Entry *entryBefore, Slapi_Entry } } else if (slapi_attr_types_equivalent(mods[i]->mod_type, type_replicaProtocolTimeout)){ - long ptimeout = 0; - - if (val){ - ptimeout = atol(val); + if (mods[i]->mod_op & LDAP_MOD_DELETE) + { + agmt_set_protocol_timeout(agmt, 0); } - if(ptimeout <= 0){ - *returncode = LDAP_UNWILLING_TO_PERFORM; - PR_snprintf (returntext, SLAPI_DSE_RETURNTEXT_SIZE, - "attribute %s value (%s) is invalid, must be a number greater than zero.\n", - type_replicaProtocolTimeout, val ? val : ""); - slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "attribute %s value (%s) is invalid, " - "must be a number greater than zero.\n", - type_replicaProtocolTimeout, val ? val : ""); - rc = SLAPI_DSE_CALLBACK_ERROR; - break; + else + { + long ptimeout = 0; + + if (val){ + ptimeout = atol(val); + } + if(ptimeout <= 0){ + *returncode = LDAP_UNWILLING_TO_PERFORM; + PR_snprintf (returntext, SLAPI_DSE_RETURNTEXT_SIZE, + "attribute %s value (%s) is invalid, must be a number greater than zero.\n", + type_replicaProtocolTimeout, val ? val : ""); + slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "attribute %s value (%s) is invalid, " + "must be a number greater than zero.\n", + type_replicaProtocolTimeout, val ? val : ""); + rc = SLAPI_DSE_CALLBACK_ERROR; + break; + } + agmt_set_protocol_timeout(agmt, ptimeout); } - agmt_set_protocol_timeout(agmt, ptimeout); } else if (0 == windows_handle_modify_agreement(agmt, mods[i]->mod_type, e)) { diff --git a/ldap/servers/plugins/replication/repl_globals.c b/ldap/servers/plugins/replication/repl_globals.c index 7dfeb9b..305ed25 100644 --- a/ldap/servers/plugins/replication/repl_globals.c +++ b/ldap/servers/plugins/replication/repl_globals.c @@ -133,7 +133,6 @@ const char *type_nsds5ReplicaBusyWaitTime = "nsds5ReplicaBusyWaitTime"; const char *type_nsds5ReplicaSessionPauseTime = "nsds5ReplicaSessionPauseTime"; const char *type_nsds5ReplicaEnabled = "nsds5ReplicaEnabled"; const char *type_nsds5ReplicaStripAttrs = "nsds5ReplicaStripAttrs"; -const char *type_nsds5ReplicaCleanRUVnotified = "nsds5ReplicaCleanRUVNotified"; /* windows sync specific attributes */ const char *type_nsds7WindowsReplicaArea = "nsds7WindowsReplicaSubtree"; -- 1.8.1.4