Преглед на файлове

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!)
Mark Reynolds преди 12 години
родител
ревизия
9c41a365e8
променени са 3 файла, в които са добавени 22 реда и са изтрити 26 реда
  1. 0 1
      ldap/servers/plugins/replication/repl5.h
  2. 22 24
      ldap/servers/plugins/replication/repl5_agmtlist.c
  3. 0 1
      ldap/servers/plugins/replication/repl_globals.c

+ 0 - 1
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;

+ 22 - 24
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;
@@ -514,23 +505,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))
         {

+ 0 - 1
ldap/servers/plugins/replication/repl_globals.c

@@ -134,7 +134,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";