Projet

Général

Profil

0003-synchronize-Fix-cycling-rename-entry-problem-due-to-.patch

Benjamin Renard, 12 avril 2022 11:58

Télécharger (1,79 ko)

Voir les différences:

Subject: [PATCH 3/3] synchronize: Fix cycling rename entry problem due to case
 sensibility on attribute name during DN comparison

 src/ldaptools/synchronize.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
src/ldaptools/synchronize.py
202 202
                    '%s: attribute %s deleted ("%s")',
203 203
                    dn, attr, '", "'.join(old_attrs[attr]))
204 204

  
205
    @staticmethod
206
    def _dn_are_equals(dn1, dn2):
207
        ''' Check DNs are equals (even if attribute name case differ) '''
208
        return [(p[0][0].lower(), p[0][1]) for p in str2dn(dn1)] == [(p[0][0].lower(), p[0][1]) for p in str2dn(dn2)]
209

  
205 210
    def build_actions_for_entries(self, entries):
206 211
        seen_dn = self.seen_dn
207 212
        renamed_dn = self.renamed_dn
......
244 249
                new_out_dn = ldap.dn.dn2str(out_ava)
245 250
                if new_out_dn != target_dn:
246 251
                    seen_dn.add(out_dn)
247
                    self.rename(new_out_dn, target_dn)
248
                    renamed_dn[str2dn(new_out_dn)] = str2dn(target_dn)
252
                    if not self._dn_are_equals(new_out_dn, target_dn):
253
                        self.rename(new_out_dn, target_dn)
254
                        renamed_dn[str2dn(new_out_dn)] = str2dn(target_dn)
249 255
                if to_dict_of_set(out_entry) != to_dict_of_set(bytes2str_entry(entry)):
250 256
                    self._log_changes(target_dn, entry, out_entry)
251 257
                    new_entry = {}
252
-