fixes are:


commit c01618821f25e6caf3b28e3e08b5a1e097954581
Author: Thierry bordaz (tbordaz) <tbordaz@redhat.com>
Date:   Tue Feb 25 19:01:40 2014 +0100

    Support of setProperties for plugins

diff --git a/lib389/plugins.py b/lib389/plugins.py
index 5e847c7..e591398 100644
--- a/lib389/plugins.py
+++ b/lib389/plugins.py
@@ -50,6 +50,41 @@ class Plugins(object):
         ents = self.conn.search_s(base, scope, filt)
         return ents
     
+    def setProperties(self, plugin_dn=None, properties=None):
+        # No properties provided
+        if len(properties) == 0:
+            return
+        
+        # check that the given properties are valid
+        for prop in properties:
+            # skip the prefix to add/del value
+            if not inProperties(prop, PLUGIN_PROPNAME_TO_ATTRNAME):
+                raise ValueError("unknown property: %s" % prop)
+            else:
+                self.log.debug("setProperties: %s:%s" % (prop, properties[prop]))
+        
+        # At least we need to have plugin_dn
+        if not plugin_dn:
+            raise InvalidArgumentError("plugin_dn are missing")
+        
+        
+        # build the MODS
+        mods = []
+        for prop in properties:
+            # take the operation type from the property name
+            val = rawProperty(prop)
+            if str(prop).startswith('+'):
+                op = ldap.MOD_ADD
+            elif str(prop).startswith('-'):
+                op = ldap.MOD_DELETE
+            else:
+                op = ldap.MOD_REPLACE
+            
+            mods.append((op, PLUGIN_PROPNAME_TO_ATTRNAME[val], properties[prop]))
+            
+        # that is fine now to apply the MOD
+        self.conn.modify_s(plugin_dn, mods)
+    
     def enable(self, name=None, plugin_dn=None):
         '''
             Enable a plugin
diff --git a/lib389/properties.py b/lib389/properties.py
index 2cf2dec..13ea1ec 100644
--- a/lib389/properties.py
+++ b/lib389/properties.py
@@ -226,6 +226,7 @@ RA_PROPNAME_TO_ATTRNAME = {RA_NAME:                 'cn',
 PLUGIN_NAME     = "name"
 PLUGIN_PATH     = "path"
 PLUGIN_ENABLE   = 'enable'
+PLUGIN_PRECEDENCE = 'precedence'
 
 PLUGINS_OBJECTCLASS_VALUE = "nsSlapdPlugin"
 PLUGINS_ENABLE_ON_VALUE   = "on"
@@ -233,7 +234,8 @@ PLUGINS_ENABLE_OFF_VALUE  = "off"
     
 PLUGIN_PROPNAME_TO_ATTRNAME = {PLUGIN_NAME:     'cn',
                                PLUGIN_PATH:     'nsslapd-pluginPath',
-                               PLUGIN_ENABLE:   'nsslapd-pluginEnabled'}
+                               PLUGIN_ENABLE:   'nsslapd-pluginEnabled',
+                               PLUGIN_PRECEDENCE: 'nsslapd-pluginprecedence'}
 
 ####################################
 #











commit 60ef8a844ae24a1d996612c1b544e9414c527bea
Author: Thierry bordaz (tbordaz) <tbordaz@redhat.com>
Date:   Tue Feb 18 11:27:01 2014 +0100

    Add timeout to CheckTask

diff --git a/lib389/properties.py b/lib389/properties.py
index 73bfd29..2cf2dec 100644
--- a/lib389/properties.py
+++ b/lib389/properties.py
@@ -254,7 +254,8 @@ INDEX_PROPNAME_TO_ATTRNAME = {INDEX_TYPE: 'nsIndexType',
 #
 ####################################
 
-TASK_WAIT     = "wait"
+TASK_WAIT     = "task-wait"
+TASK_TIMEOUT  = "task-timeout"
 EXPORT_REPL_INFO = "repl-info"
 
 
diff --git a/lib389/tasks.py b/lib389/tasks.py
index f61f935..6edf9ce 100644
--- a/lib389/tasks.py
+++ b/lib389/tasks.py
@@ -21,7 +21,7 @@ class Tasks(object):
         if name in Tasks.proxied_methods:
             return DirSrv.__getattr__(self.conn, name)
 
-    def checkTask(self, entry, dowait=False):
+    def checkTask(self, entry, dowait=False, timeout=0):
         '''check task status - task is complete when the nsTaskExitCode attr is set
         return a 2 tuple (true/false,code) first is false if task is running, true if
         done - if true, second is the exit code - if dowait is True, this function
@@ -31,6 +31,7 @@ class Tasks(object):
         done = False
         exitCode = 0
         dn = entry.dn
+        count_down = timeout
         while not done:
             entry = self.conn.getEntry(dn, attrlist=attrlist)
             self.log.debug("task entry %r" % entry)
@@ -40,6 +41,14 @@ class Tasks(object):
                 done = True
             if dowait:
                 time.sleep(1)
+                count_down -= 1
+                if timeout > 0:
+                    if count_down == 0:
+                        self.log.error("Task did no complete in %d sec. Break" % timeout)
+                        exitCode = -1
+                        break
+                    else:
+                        self.log.info("Task has not completed yet. Still %d sec to wait" % count_down)
             else:
                 break
         return (done, exitCode)
@@ -221,7 +230,8 @@ class Tasks(object):
         
         exitCode = 0
         if args and args.get(TASK_WAIT, False):
-            (done, exitCode) = self.conn.tasks.checkTask(entry, True)
+            timeout = args.get(TASK_TIMEOUT, 0)
+            (done, exitCode) = self.conn.tasks.checkTask(entry, dowait=True, timeout=timeout)
 
         if exitCode:
             self.log.error("Error: index task %s exited with %d" % (