[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:
parent
88697df427
commit
6dfa3af3ec
1 changed files with 25 additions and 17 deletions
42
attributs.py
42
attributs.py
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue