From db0e6c60922de764636a524c0882768820888c80 Mon Sep 17 00:00:00 2001 From: Olivier Iffrig Date: Mon, 18 Oct 2010 18:50:57 +0200 Subject: [PATCH] =?UTF-8?q?[lc=5Fldap]=20On=20n'affiche=20que=20les=20donn?= =?UTF-8?q?=C3=A9es=20pertinentes=20de=20l'historique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lc_ldap.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/lc_ldap.py b/lc_ldap.py index 2c4e7d1..28bf119 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -44,6 +44,9 @@ uri = 'ldapi:///' #'ldap://ldap.adm.crans.org/' base_dn = 'ou=data,dc=crans,dc=org' log_dn = "cn=log" +# Champs à ignorer dans l'historique +HIST_IGNORE_FIELDS = ["modifiersName", "entryCSN", "modifyTimestamp"] + def is_actif(sanction): """Retourne True ou False suivant si la sanction fournie (chaîne venant de blacklist) est active ou non. @@ -417,16 +420,35 @@ class CransLdapObject(object): return histo - def search_historique(self): + def search_historique(self, ign_fields=HIST_IGNORE_FIELDS): + u"""Récupère l'historique + l'argument optionnel ign_fields contient la liste des champs + à ignorer, HIST_IGNORE_FIELDS par défaut + Renvoie une liste de lignes de texte.""" res = self.conn.search_s(log_dn, 2, 'reqDN=%s' % self.dn) - res.sort((lambda a, b: cmp(a[1]['reqEnd'][0], b[1]['reqEnd'][0]))) + res.sort(key=(lambda a: a[1]['reqEnd'][0])) + out = [] for cn, attrs in res: date = crans_utils.format_ldap_time(attrs['reqEnd'][0]) if attrs['reqType'][0] == 'delete': - print "%s : %s deleted %s" % (date, attrs['reqAuthzID'][0], attrs['reqDN'][0]) + out.append("%s : [%s] Suppression" % (date, attrs['reqAuthzID'][0])) elif attrs['reqType'][0] == 'modify': - print "%s : %s modified %s (%s)" % (date, attrs['reqAuthzID'][0], attrs['reqDN'][0], - "/".join(attrs['reqMod'])) + fields = {} + for mod in attrs['reqMod']: + field, change = mod.split(':', 1) + if field not in ign_fields: + if field in fields: + fields[field].append(change) + else: + fields[field] = [change] + mod_list = [] + for field in fields: + mods = fields[field] + mod_list.append("%s %s" %(field, ", ".join(mods))) + + if mod_list != []: + out.append("%s : [%s] %s" % (date, attrs['reqAuthzID'][0], " ; ".join(mod_list))) + return out def blacklist_actif(self): u"""Vérifie si l'instance courante est blacklistée.