gpo: avoid quadratic behaviour in guid retrieval
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Wed, 29 Aug 2018 04:39:51 +0000 (16:39 +1200)
committerAurélien Aptel <aaptel@samba.org>
Mon, 8 Oct 2018 16:17:15 +0000 (18:17 +0200)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: David Mulder <dmulder@suse.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
python/samba/gpclass.py

index 85fdb88eafa6f2b2aaf07c37fc4781541ca5655c..748411f7aba639075fce92fef0ca1e6bdc0a9b4f 100644 (file)
@@ -244,12 +244,12 @@ class gp_log:
         user_obj = self.gpdb.find('user[@name="%s"]' % self.user)
         if user_obj is not None:
             apply_log = user_obj.find('applylog')
-            if apply_log is None:
-                return guids
-            for i in reversed(range(0, len(apply_log))):
-                guid_obj = apply_log.find('guid[@count="%d"]' % i)
-                guid = guid_obj.attrib['value']
-                guids.append(guid)
+            if apply_log is not None:
+                guid_objs = apply_log.findall('guid[@count]')
+                guids_by_count = [(g.get('count'), g.get('value'))
+                                  for g in guid_objs]
+                guids_by_count.sort(reverse=True)
+                guids.extend(guid for count, guid in guids_by_count)
         return guids
 
     def get_applied_settings(self, guids):