[lc_ldap] On n'affiche que les données pertinentes de l'historique

This commit is contained in:
Olivier Iffrig 2010-10-18 18:50:57 +02:00
parent e239973d60
commit db0e6c6092

View file

@ -44,6 +44,9 @@ uri = 'ldapi:///' #'ldap://ldap.adm.crans.org/'
base_dn = 'ou=data,dc=crans,dc=org' base_dn = 'ou=data,dc=crans,dc=org'
log_dn = "cn=log" log_dn = "cn=log"
# Champs à ignorer dans l'historique
HIST_IGNORE_FIELDS = ["modifiersName", "entryCSN", "modifyTimestamp"]
def is_actif(sanction): def is_actif(sanction):
"""Retourne True ou False suivant si la sanction fournie (chaîne """Retourne True ou False suivant si la sanction fournie (chaîne
venant de blacklist) est active ou non. venant de blacklist) est active ou non.
@ -417,16 +420,35 @@ class CransLdapObject(object):
return histo 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 = 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: for cn, attrs in res:
date = crans_utils.format_ldap_time(attrs['reqEnd'][0]) date = crans_utils.format_ldap_time(attrs['reqEnd'][0])
if attrs['reqType'][0] == 'delete': 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': elif attrs['reqType'][0] == 'modify':
print "%s : %s modified %s (%s)" % (date, attrs['reqAuthzID'][0], attrs['reqDN'][0], fields = {}
"/".join(attrs['reqMod'])) 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): def blacklist_actif(self):
u"""Vérifie si l'instance courante est blacklistée. u"""Vérifie si l'instance courante est blacklistée.