[*] Corrections pour les blacklistes, ajout de la méthode blacklist actif, pgsql_test
This commit is contained in:
parent
1363c37f69
commit
014292eaaf
2 changed files with 33 additions and 13 deletions
31
lc_ldap.py
31
lc_ldap.py
|
@ -275,8 +275,8 @@ class CransLdapObject(object):
|
|||
self.dn, self.attrs = res[0]
|
||||
|
||||
self.attrs = ldif_to_uldif(self.attrs)
|
||||
self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
|
||||
if mode in ['w', 'rw']:
|
||||
self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
|
||||
### Vérification que `λv. str(Attr(v))` est bien une projection
|
||||
oldif = res[0][1]
|
||||
nldif = cldif_to_ldif(self.attrs)
|
||||
|
@ -289,7 +289,7 @@ class CransLdapObject(object):
|
|||
nvals = [nldif[attr][v.index(v)] for v in vals ]
|
||||
raise EnvironmentError("λv. str(Attr(v)) n'est peut-être pas une projection:", attr, nvals, vals)
|
||||
|
||||
self._modifs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
|
||||
self._modifs = ldif_to_cldif(ldif_to_uldif(res[0][1]), conn, check_ctxt = False)
|
||||
|
||||
def save(self):
|
||||
"Vérifie que self._modifs contient des valeurs correctes et enregistre les modifications"
|
||||
|
@ -302,8 +302,16 @@ class CransLdapObject(object):
|
|||
|
||||
# Vérification des modifications
|
||||
self.attrs = ldif_to_uldif(self.conn.search_s(self.dn, 0)[0][1])
|
||||
if self.attrs != self._modifs:
|
||||
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\nexpected = %s, found = %s" % (self.dn, self._modifs, self.attrs))
|
||||
self.attrs = ldif_to_cldif(self.attrs, self.conn, check_ctxt=False)
|
||||
differences = []
|
||||
# On fait les différences entre les deux dicos
|
||||
for attr in set(self.attrs.keys()).union(set(self._modifs.keys())):
|
||||
exp_vals = set([unicode(i) for i in self.attrs.get(attr,[])])
|
||||
new_vals = set([unicode(i) for i in self._modifs.get(attr,[])])
|
||||
if exp_vals != new_vals:
|
||||
differences.append({"missing": exp_vals - new_vals, "having": new_vals - exp_vals})
|
||||
if differences:
|
||||
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\n%s" % (self.dn, differences))
|
||||
|
||||
def get_modlist(self):
|
||||
"""Renvoie le dico des modifs"""
|
||||
|
@ -371,7 +379,14 @@ class CransLdapObject(object):
|
|||
out.append(u"%s : [%s] %s" % (date, author, u" ; ".join(mod_list)))
|
||||
return out
|
||||
|
||||
def blacklist(self, sanction, commentaire, debut=time.time(), fin = '-'):
|
||||
def blacklist_actif(self):
|
||||
"""Renvoie la liste des blacklistes actives sur l'entité"""
|
||||
# XXX - Proposer de filtrer les blacklistes avec un arg supplémentaire ?
|
||||
# XXX - Vérifier les blacklistes des machines pour les adhérents ?
|
||||
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
|
||||
return filter((lambda bl: bl.is_actif()), attrs.get("blacklist"))
|
||||
|
||||
def blacklist(self, sanction, commentaire, debut="now", fin = '-'):
|
||||
u"""
|
||||
Blacklistage de la ou de toutes la machines du propriétaire
|
||||
* debut et fin sont le nombre de secondes depuis epoch
|
||||
|
@ -381,10 +396,10 @@ class CransLdapObject(object):
|
|||
debut$fin$sanction$commentaire
|
||||
"""
|
||||
if debut == 'now':
|
||||
debut = time.time()
|
||||
debut = int(time.time())
|
||||
if fin == 'now':
|
||||
fin = time.time()
|
||||
bl = blacklist(u'%s$%s$%s$%s' % (sanction, commentaire, debut, fin), {}, self.conn, False)
|
||||
fin = int(time.time())
|
||||
bl = blacklist(u'%s$%s$%s$%s' % (debut, fin, sanction, commentaire), {}, self.conn, False)
|
||||
|
||||
self._modifs.setdefault('blacklist', []).append(bl)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue