[attributs] On ne fait des appels à pgsql que s'il faut effectivement vérifier les données.

Quand on est en red only, en plus d'être inutile, on fait souvent cracher le binding
à cause de vieux enregistrements.
Accessoirement, on rajoute quelques shells valident.
This commit is contained in:
Valentin Samir 2011-10-28 18:28:59 +02:00
parent 88697df427
commit 6dfa3af3ec

View file

@ -69,6 +69,7 @@ class Attr(object):
ldif: objet contenant l'attribut (permet de faire les validations sur l'environnement)
ctxt_check: effectue les validations
"""
self.ctxt_check=ctxt_check
self.value = None
self.conn = conn
assert isinstance(val, unicode)
@ -133,12 +134,14 @@ class objectClass(Attr):
singlevalue = False
optional = False
legend = "entité"
def parse_value(self, val, ldif):
if val not in [ 'top', 'posixAccount', 'shadowAccount', 'proprio',
'adherent', 'club', 'machine', 'machineCrans',
'borneWifi', 'machineWifi', 'machineFixe',
'cransAccount', 'service', 'facture', 'freeMid' ]:
print(val)
raise ValueError("Pourquoi insérer un objectClass=%s ?" % val)
else:
self.value = unicode(val)
@ -254,22 +257,23 @@ class chbre(Attr):
can_modify = ["self", "Cableur", "Nounou"]
def parse_value(self, val, ldif):
if u'club' in ldif['objectClass']:
if val in annuaires_pg.locaux_clubs():
if self.ctxt_check: # Si ce n'est pas la peine de vérifier, on ne vérifie pas
if u'club' in ldif['objectClass']:
if val in annuaires_pg.locaux_clubs():
self.value = val
return
else:
raise ValueError("Club devrait etre en XclN, pas en %s" % val)
if val in (u"EXT", u"????"):
self.value = val
return
else:
raise ValueError("Club devrait etre en XclN, pas en %s" % val)
if val in (u"EXT", u"????"):
self.value = val
return
try:
annuaires_pg.chbre_prises(val[0], val[1:])
except NameError:
import annuaires_pg_test
annuaires_pg_test.chbre_prises(val[0], val[1:])
try:
annuaires_pg.chbre_prises(val[0], val[1:])
except NameError:
import annuaires_pg_test
annuaires_pg_test.chbre_prises(val[0], val[1:])
self.value = val
@ -295,8 +299,8 @@ class solde(Attr):
can_modify = ["imprimeur", "Nounou", "Tresorier"]
def parse_value(self, solde, ldif):
# on évite les dépassements
if not (float(solde) >= config.impression.decouvert and float(solde) <= 1024.):
# on évite les dépassements, sauf si on nous dit de ne pas vérifier
if self.ctxt_check and not (float(solde) >= config.impression.decouvert and float(solde) <= 1024.):
raise ValueError("Solde invalide: %s" % solde)
self.value = solde
@ -304,7 +308,7 @@ class dnsAttr(Attr):
def parse_value(self, dns, ldif):
dns = dns.lower()
name, net = dns.split('.', 1)
if (net not in ['crans.org', 'wifi.crans.org'] or
if self.ctxt_check and (net not in ['crans.org', 'wifi.crans.org'] or
not re.match('[a-z][-_a-z0-9]+', name)):
raise ValueError("Nom d'hote invalide '%s'" % dns)
self.value = dns
@ -544,8 +548,12 @@ class loginShell(Attr):
'/usr/bin/rssh',
'/usr/local/bin/disconnect_shell',
'/usr/scripts/surveillance/disconnect_shell',
'/usr/local/bin/badPassSh',
'/usr/bin/passwd',
'/bin/false',
'/bin//zsh'
'']
if (shell not in shells):
if self.ctxt_check and (shell not in shells):
raise ValueError("Shell %s invalide" % shell)
self.value = shell