Correction canonicalAlias, ajout cransAccount, esthtisme.
darcs-hash:20060321012153-68412-185e90e71297e14e330197c2cf365e9495893b31.gz
This commit is contained in:
parent
62d23e9bde
commit
5bf2e284f9
1 changed files with 90 additions and 90 deletions
|
@ -18,7 +18,7 @@ from chgpass import chgpass
|
||||||
from affich_tools import coul, prompt
|
from affich_tools import coul, prompt
|
||||||
from time import sleep, localtime
|
from time import sleep, localtime
|
||||||
|
|
||||||
date_format='%d/%m/%Y %H:%M'
|
date_format = '%d/%m/%Y %H:%M'
|
||||||
hostname = gethostname().split(".")[0]
|
hostname = gethostname().split(".")[0]
|
||||||
smtpserv = "rouge.crans.org"
|
smtpserv = "rouge.crans.org"
|
||||||
random.seed() # On initialise le générateur aléatoire
|
random.seed() # On initialise le générateur aléatoire
|
||||||
|
@ -115,7 +115,7 @@ def mailexist(mail):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
s=smtplib.SMTP(smtpserv)
|
s = smtplib.SMTP(smtpserv)
|
||||||
r = s.vrfy(mail)
|
r = s.vrfy(mail)
|
||||||
s.close()
|
s.close()
|
||||||
except:
|
except:
|
||||||
|
@ -138,15 +138,15 @@ def preattr(val):
|
||||||
|
|
||||||
t = type(val)
|
t = type(val)
|
||||||
|
|
||||||
if t==list and len(val)==1:
|
if t == list and len(val) == 1:
|
||||||
return preattr(val[0])
|
return preattr(val[0])
|
||||||
|
|
||||||
elif t==str or t==int:
|
elif t == str or t == int:
|
||||||
val = str(val).strip()
|
val = str(val).strip()
|
||||||
# On passe tout en utf-8 pour ne pas avoir de problèmes
|
# On passe tout en utf-8 pour ne pas avoir de problèmes
|
||||||
# d'accents dans la base
|
# d'accents dans la base
|
||||||
return [len(val), unicode(val, 'iso-8859-1').encode('utf-8')]
|
return [len(val), unicode(val, 'iso-8859-1').encode('utf-8')]
|
||||||
elif t==unicode:
|
elif t == unicode:
|
||||||
val = val.strip()
|
val = val.strip()
|
||||||
return [len(val), val.encode('utf-8')]
|
return [len(val), val.encode('utf-8')]
|
||||||
else:
|
else:
|
||||||
|
@ -162,7 +162,7 @@ def is_actif(sanction):
|
||||||
try:
|
try:
|
||||||
now = time.time()
|
now = time.time()
|
||||||
debut = time.mktime( time.strptime(bl[0], date_format) )
|
debut = time.mktime( time.strptime(bl[0], date_format) )
|
||||||
if bl[1]=='-':
|
if bl[1] == '-':
|
||||||
fin = now + 1
|
fin = now + 1
|
||||||
else:
|
else:
|
||||||
fin = time.mktime( time.strptime(bl[1], date_format) )
|
fin = time.mktime( time.strptime(bl[1], date_format) )
|
||||||
|
@ -203,7 +203,7 @@ def format_mac(mac):
|
||||||
|
|
||||||
class service:
|
class service:
|
||||||
""" Définit un service à redémarrer """
|
""" Définit un service à redémarrer """
|
||||||
def __init__(self, nom, args=[], start=[]):
|
def __init__(self, nom, args = [], start = []):
|
||||||
"""
|
"""
|
||||||
Nom du service
|
Nom du service
|
||||||
Liste des arguments
|
Liste des arguments
|
||||||
|
@ -256,7 +256,7 @@ class crans_ldap:
|
||||||
|
|
||||||
auto_search_champs = { \
|
auto_search_champs = { \
|
||||||
'adherent': \
|
'adherent': \
|
||||||
['nom', 'prenom', 'tel', 'mail', 'chbre', 'mailAlias', 'cannonicalAlias' ],
|
['nom', 'prenom', 'tel', 'mail', 'chbre', 'mailAlias', 'canonicalAlias' ],
|
||||||
'club': ['nom', 'chbre'],
|
'club': ['nom', 'chbre'],
|
||||||
'machineFixe': auto_search_machines_champs,
|
'machineFixe': auto_search_machines_champs,
|
||||||
'machineWifi': auto_search_machines_champs,
|
'machineWifi': auto_search_machines_champs,
|
||||||
|
@ -377,7 +377,7 @@ class crans_ldap:
|
||||||
Lock un item avec la valeur valeur, les items possibles
|
Lock un item avec la valeur valeur, les items possibles
|
||||||
peuvent être :
|
peuvent être :
|
||||||
|
|
||||||
aid $ chbre $ mail $ mailAlias $ cannonicalAlias $
|
aid $ chbre $ mail $ mailAlias $ canonicalAlias $
|
||||||
mid $ macAddress $ host $ hostAlias $ ipHostNumber
|
mid $ macAddress $ host $ hostAlias $ ipHostNumber
|
||||||
|
|
||||||
Retourne le dn du lock
|
Retourne le dn du lock
|
||||||
|
@ -462,7 +462,7 @@ class crans_ldap:
|
||||||
serv_dates = {} # { service: [ dates de restart ] }
|
serv_dates = {} # { service: [ dates de restart ] }
|
||||||
services = []
|
services = []
|
||||||
for s in self.conn.search_s(self.base_services, 1, 'objectClass=service'):
|
for s in self.conn.search_s(self.base_services, 1, 'objectClass=service'):
|
||||||
s=s[1]
|
s = s[1]
|
||||||
serv[s['cn'][0]] = s.get('args', [])
|
serv[s['cn'][0]] = s.get('args', [])
|
||||||
serv_dates[s['cn'][0]] = s.get('start', [])
|
serv_dates[s['cn'][0]] = s.get('start', [])
|
||||||
services.append(service(s['cn'][0], s.get('args', []), s.get('start', [])))
|
services.append(service(s['cn'][0], s.get('args', []), s.get('start', [])))
|
||||||
|
@ -474,20 +474,20 @@ class crans_ldap:
|
||||||
if new[0] == '-':
|
if new[0] == '-':
|
||||||
if new[1] == '-':
|
if new[1] == '-':
|
||||||
# Double -- on enlève quelque soit la date
|
# Double -- on enlève quelque soit la date
|
||||||
remove_dn='cn=%s,%s' % ( new[2:], self.base_services )
|
remove_dn = 'cn=%s,%s' % ( new[2:], self.base_services )
|
||||||
else:
|
else:
|
||||||
# On enlève uniquement si la date est passée
|
# On enlève uniquement si la date est passée
|
||||||
remove_dn='cn=%s,%s' % ( new[1:], self.base_services )
|
remove_dn = 'cn=%s,%s' % ( new[1:], self.base_services )
|
||||||
if not serv.has_key(new[1:]):
|
if not serv.has_key(new[1:]):
|
||||||
# Existe pas => rien à faire
|
# Existe pas => rien à faire
|
||||||
return
|
return
|
||||||
keep_date=[]
|
keep_date = []
|
||||||
for date in serv_dates[new[1:]]:
|
for date in serv_dates[new[1:]]:
|
||||||
if time.time() - time.timezone < int(date):
|
if time.time() - time.timezone < int(date):
|
||||||
keep_date.append(date)
|
keep_date.append(date)
|
||||||
if keep_date:
|
if keep_date:
|
||||||
self.conn.modify_s(remove_dn, ldap.modlist.modifyModlist({'start': serv_dates[new[1:]]}, { 'start': keep_date }))
|
self.conn.modify_s(remove_dn, ldap.modlist.modifyModlist({'start': serv_dates[new[1:]]}, { 'start': keep_date }))
|
||||||
remove_dn=None
|
remove_dn = None
|
||||||
|
|
||||||
if remove_dn:
|
if remove_dn:
|
||||||
# Suppression
|
# Suppression
|
||||||
|
@ -500,9 +500,9 @@ class crans_ldap:
|
||||||
|
|
||||||
# Petite fonction à appliquer aux arguments
|
# Petite fonction à appliquer aux arguments
|
||||||
if type(args) == str: args = [ args ]
|
if type(args) == str: args = [ args ]
|
||||||
args=map(lambda x:preattr(x)[1], args)
|
args = map(lambda x:preattr(x)[1], args)
|
||||||
if type(start) == int: start = [ start ]
|
if type(start) == int: start = [ start ]
|
||||||
start=map(lambda x:preattr(x)[1], start)
|
start = map(lambda x:preattr(x)[1], start)
|
||||||
|
|
||||||
if new in serv.keys():
|
if new in serv.keys():
|
||||||
modlist = []
|
modlist = []
|
||||||
|
@ -828,7 +828,7 @@ class base_classes_crans(crans_ldap):
|
||||||
def __eq__(self, autre):
|
def __eq__(self, autre):
|
||||||
""" Test d'égalité de deux instances de club/adhérent/machine,
|
""" Test d'égalité de deux instances de club/adhérent/machine,
|
||||||
retourne True s'il s'agit du même club/adhérent/machine, False sinon """
|
retourne True s'il s'agit du même club/adhérent/machine, False sinon """
|
||||||
return self.__class__==autre.__class__ and self.id()==autre.id()
|
return self.__class__ == autre.__class__ and self.id() == autre.id()
|
||||||
|
|
||||||
def id(self):
|
def id(self):
|
||||||
""" Retourne la valeur de l'attribu caractéristique de la classe (aid,mid,cid)"""
|
""" Retourne la valeur de l'attribu caractéristique de la classe (aid,mid,cid)"""
|
||||||
|
@ -898,15 +898,15 @@ class base_classes_crans(crans_ldap):
|
||||||
l'index est celui obtenu dans la liste retournée par blacklist()
|
l'index est celui obtenu dans la liste retournée par blacklist()
|
||||||
"""
|
"""
|
||||||
if not self._data.has_key('blacklist'):
|
if not self._data.has_key('blacklist'):
|
||||||
self._data['blacklist']=[]
|
self._data['blacklist'] = []
|
||||||
liste = list(self._data['blacklist'])
|
liste = list(self._data['blacklist'])
|
||||||
if new==None: return map(decode, liste)
|
if new == None: return map(decode, liste)
|
||||||
|
|
||||||
if type(new)==tuple:
|
if type(new) == tuple:
|
||||||
# Modif
|
# Modif
|
||||||
index = new[0]
|
index = new[0]
|
||||||
new = new[1]
|
new = new[1]
|
||||||
if new=='':
|
if new == '':
|
||||||
liste.pop(index)
|
liste.pop(index)
|
||||||
self._set('blacklist', liste)
|
self._set('blacklist', liste)
|
||||||
return liste
|
return liste
|
||||||
|
@ -919,16 +919,16 @@ class base_classes_crans(crans_ldap):
|
||||||
# Verif que les dates sont OK
|
# Verif que les dates sont OK
|
||||||
if new[0] == 'now':
|
if new[0] == 'now':
|
||||||
new[0] = time.strftime(date_format)
|
new[0] = time.strftime(date_format)
|
||||||
debut=0
|
debut = 0
|
||||||
else:
|
else:
|
||||||
try: debut=int(time.mktime(time.strptime(new[0], date_format)))
|
try: debut = int(time.mktime(time.strptime(new[0], date_format)))
|
||||||
except: raise ValueError(u'Date de début blacklist invalide')
|
except: raise ValueError(u'Date de début blacklist invalide')
|
||||||
|
|
||||||
if new[1] == 'now':
|
if new[1] == 'now':
|
||||||
new[1] = time.strftime(date_format)
|
new[1] = time.strftime(date_format)
|
||||||
fin=0
|
fin = 0
|
||||||
elif new[1]!='-':
|
elif new[1]!='-':
|
||||||
try: fin=int(time.mktime(time.strptime(new[1], date_format)))
|
try: fin = int(time.mktime(time.strptime(new[1], date_format)))
|
||||||
except: raise ValueError(u'Date de fin blacklist invalide')
|
except: raise ValueError(u'Date de fin blacklist invalide')
|
||||||
else:
|
else:
|
||||||
fin = -1
|
fin = -1
|
||||||
|
@ -938,7 +938,7 @@ class base_classes_crans(crans_ldap):
|
||||||
|
|
||||||
# On prend en compte le fuseau horaire et on dépasse la fin
|
# On prend en compte le fuseau horaire et on dépasse la fin
|
||||||
# de sanction d'1min pour être sur quelle périmé.
|
# de sanction d'1min pour être sur quelle périmé.
|
||||||
fin=fin+60-time.timezone
|
fin = fin+60-time.timezone
|
||||||
|
|
||||||
new_c = ','.join(new)
|
new_c = ','.join(new)
|
||||||
new_c = preattr(new_c)[1]
|
new_c = preattr(new_c)[1]
|
||||||
|
@ -949,10 +949,10 @@ class base_classes_crans(crans_ldap):
|
||||||
liste = liste + [ new_c ]
|
liste = liste + [ new_c ]
|
||||||
|
|
||||||
if self._data['blacklist'] != liste:
|
if self._data['blacklist'] != liste:
|
||||||
self._data['blacklist']=liste
|
self._data['blacklist'] = liste
|
||||||
self.modifs.setdefault('blacklist_' + new[2], None)
|
self.modifs.setdefault('blacklist_' + new[2], None)
|
||||||
if not hasattr(self, "_blacklist_restart"):
|
if not hasattr(self, "_blacklist_restart"):
|
||||||
self._blacklist_restart={}
|
self._blacklist_restart = {}
|
||||||
if not self._blacklist_restart.has_key(new[2]):
|
if not self._blacklist_restart.has_key(new[2]):
|
||||||
self._blacklist_restart[new[2]] = [ debut, fin ]
|
self._blacklist_restart[new[2]] = [ debut, fin ]
|
||||||
else:
|
else:
|
||||||
|
@ -981,11 +981,11 @@ class base_classes_crans(crans_ldap):
|
||||||
l'index est celui obtenu dans la liste retournée par info()
|
l'index est celui obtenu dans la liste retournée par info()
|
||||||
"""
|
"""
|
||||||
if not self._data.has_key('info'):
|
if not self._data.has_key('info'):
|
||||||
self._data['info']=[]
|
self._data['info'] = []
|
||||||
liste = list(self._data['info'])
|
liste = list(self._data['info'])
|
||||||
if new==None: return map(decode, liste)
|
if new == None: return map(decode, liste)
|
||||||
|
|
||||||
if type(new)==list:
|
if type(new) == list:
|
||||||
# Modif
|
# Modif
|
||||||
index = new[0]
|
index = new[0]
|
||||||
l, new = preattr(new[1])
|
l, new = preattr(new[1])
|
||||||
|
@ -994,15 +994,15 @@ class base_classes_crans(crans_ldap):
|
||||||
liste.pop(index)
|
liste.pop(index)
|
||||||
else:
|
else:
|
||||||
# Modif remarque
|
# Modif remarque
|
||||||
liste[index]=new
|
liste[index] = new
|
||||||
elif type(new)==str:
|
elif type(new) == str:
|
||||||
# Remarque supplémentaire
|
# Remarque supplémentaire
|
||||||
l, new = preattr(new)
|
l, new = preattr(new)
|
||||||
if not new:
|
if not new:
|
||||||
# On ajoute pas de remarque vide
|
# On ajoute pas de remarque vide
|
||||||
return liste
|
return liste
|
||||||
# Ajout à la liste
|
# Ajout à la liste
|
||||||
liste = liste + [ new ]
|
liste = liste + [new]
|
||||||
else:
|
else:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
|
@ -1114,11 +1114,11 @@ class base_classes_crans(crans_ldap):
|
||||||
### Nouvel enregistrement
|
### Nouvel enregistrement
|
||||||
# Génération du dn
|
# Génération du dn
|
||||||
res = self.conn.search_s(self.base_dn, 2, self.filtre_idn)
|
res = self.conn.search_s(self.base_dn, 2, self.filtre_idn)
|
||||||
vidn=1
|
vidn = 1
|
||||||
vidns=[]
|
vidns = []
|
||||||
# Liste des dn pris
|
# Liste des dn pris
|
||||||
for r in res:
|
for r in res:
|
||||||
# r=( dn, {} )
|
# r = ( dn, {} )
|
||||||
r = r[0].split(',')[0]
|
r = r[0].split(',')[0]
|
||||||
if r[:4] != '%s=' % self.idn: continue
|
if r[:4] != '%s=' % self.idn: continue
|
||||||
vidns.append(int(r[4:]))
|
vidns.append(int(r[4:]))
|
||||||
|
@ -1126,7 +1126,7 @@ class base_classes_crans(crans_ldap):
|
||||||
while vidn in vidns:
|
while vidn in vidns:
|
||||||
vidn += 1
|
vidn += 1
|
||||||
|
|
||||||
self.dn='%s=%s,%s' % (self.idn, vidn, self.dn)
|
self.dn = '%s=%s,%s' % (self.idn, vidn, self.dn)
|
||||||
self._data[self.idn]= [ '%d' % vidn ]
|
self._data[self.idn]= [ '%d' % vidn ]
|
||||||
|
|
||||||
# Ecriture
|
# Ecriture
|
||||||
|
@ -1186,7 +1186,7 @@ class base_classes_crans(crans_ldap):
|
||||||
""" Met à jour les données de data et modifie modifs si besoin """
|
""" Met à jour les données de data et modifie modifs si besoin """
|
||||||
if (not self._data.has_key(champ) and val != []) \
|
if (not self._data.has_key(champ) and val != []) \
|
||||||
or (self._data.has_key(champ) and self._data[champ]!=val):
|
or (self._data.has_key(champ) and self._data[champ]!=val):
|
||||||
self._data[champ]=val
|
self._data[champ] = val
|
||||||
if self.modifs.get(champ) == None or comment == None:
|
if self.modifs.get(champ) == None or comment == None:
|
||||||
self.modifs[champ] = comment
|
self.modifs[champ] = comment
|
||||||
else:
|
else:
|
||||||
|
@ -1220,7 +1220,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
|
|
||||||
self.modifs = {}
|
self.modifs = {}
|
||||||
if data:
|
if data:
|
||||||
self.dn=data[0]
|
self.dn = data[0]
|
||||||
if mode == 'w':
|
if mode == 'w':
|
||||||
try:
|
try:
|
||||||
self.lock(self.idn, self.id())
|
self.lock(self.idn, self.id())
|
||||||
|
@ -1234,9 +1234,9 @@ class base_proprietaire(base_classes_crans):
|
||||||
self._data = data[1]
|
self._data = data[1]
|
||||||
else:
|
else:
|
||||||
# Propriétaire vide
|
# Propriétaire vide
|
||||||
self.dn='' # Génération du reste au moment de l'écriture
|
self.dn = '' # Génération du reste au moment de l'écriture
|
||||||
self._data={ 'objectClass': [ self.objectClass ] }
|
self._data = { 'objectClass': [ self.objectClass ] }
|
||||||
self._init_data={}
|
self._init_data = {}
|
||||||
self._modifiable = 'w'
|
self._modifiable = 'w'
|
||||||
|
|
||||||
def chsh(self, new=None):
|
def chsh(self, new=None):
|
||||||
|
@ -1255,23 +1255,23 @@ class base_proprietaire(base_classes_crans):
|
||||||
Même sytème d'argument que la méthode info.
|
Même sytème d'argument que la méthode info.
|
||||||
"""
|
"""
|
||||||
if not self._data.has_key('mailAlias'):
|
if not self._data.has_key('mailAlias'):
|
||||||
self._data['mailAlias']=[]
|
self._data['mailAlias'] = []
|
||||||
liste = list(self._data['mailAlias'])
|
liste = list(self._data['mailAlias'])
|
||||||
if new==None:
|
if new == None:
|
||||||
return map(decode, liste)
|
return map(decode, liste)
|
||||||
|
|
||||||
if type(new)==list:
|
if type(new) == list:
|
||||||
# Modif
|
# Modif
|
||||||
index = new[0]
|
index = new[0]
|
||||||
new = new[1]
|
new = new[1]
|
||||||
if new=='':
|
if new == '':
|
||||||
# Supression alias
|
# Supression alias
|
||||||
liste.pop(index)
|
liste.pop(index)
|
||||||
self._set('mailAlias', liste)
|
self._set('mailAlias', liste)
|
||||||
return liste
|
return liste
|
||||||
else:
|
else:
|
||||||
new = new.replace('@crans.org', '')
|
new = new.replace('@crans.org', '')
|
||||||
index=-1
|
index = -1
|
||||||
|
|
||||||
# Tests
|
# Tests
|
||||||
l, new = preattr(new)
|
l, new = preattr(new)
|
||||||
|
@ -1287,7 +1287,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
raise ValueError(u"Alias existant ou correspondand à un compte.")
|
raise ValueError(u"Alias existant ou correspondand à un compte.")
|
||||||
|
|
||||||
if index!=-1:
|
if index!=-1:
|
||||||
liste[index]=new
|
liste[index] = new
|
||||||
else:
|
else:
|
||||||
liste = liste + [ new ]
|
liste = liste + [ new ]
|
||||||
|
|
||||||
|
@ -1326,7 +1326,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
"""
|
"""
|
||||||
solde = float(self._data.get('solde', [0])[0])
|
solde = float(self._data.get('solde', [0])[0])
|
||||||
|
|
||||||
if operation==None:
|
if operation == None:
|
||||||
return solde
|
return solde
|
||||||
|
|
||||||
# On effectue une opération
|
# On effectue une opération
|
||||||
|
@ -1355,7 +1355,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
else:
|
else:
|
||||||
actuel = actuel[0]
|
actuel = actuel[0]
|
||||||
|
|
||||||
if new==None:
|
if new == None:
|
||||||
return actuel
|
return actuel
|
||||||
|
|
||||||
if not sre.match(r'^[+-][pck]$', new):
|
if not sre.match(r'^[+-][pck]$', new):
|
||||||
|
@ -1530,7 +1530,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
args+= self._data['uid'][0]
|
args+= self._data['uid'][0]
|
||||||
self.services_to_restart('home', [ args ])
|
self.services_to_restart('home', [ args ])
|
||||||
r = prompt(u"Attribuer tout de suite un mot de passe ? [O/N]", "O")
|
r = prompt(u"Attribuer tout de suite un mot de passe ? [O/N]", "O")
|
||||||
if r=='O' or r=='o':
|
if r == 'O' or r == 'o':
|
||||||
chgpass(self.dn)
|
chgpass(self.dn)
|
||||||
else:
|
else:
|
||||||
ret += coul(u' Il faudra penser à attribuer un mot de passe\n', 'jaune')
|
ret += coul(u' Il faudra penser à attribuer un mot de passe\n', 'jaune')
|
||||||
|
@ -1553,12 +1553,12 @@ class base_proprietaire(base_classes_crans):
|
||||||
si négatif le supprime
|
si négatif le supprime
|
||||||
"""
|
"""
|
||||||
if not self._data.has_key(champ):
|
if not self._data.has_key(champ):
|
||||||
trans=[]
|
trans = []
|
||||||
else:
|
else:
|
||||||
# On va travailler sur une liste d'entiers
|
# On va travailler sur une liste d'entiers
|
||||||
trans = map(int, self._data[champ])
|
trans = map(int, self._data[champ])
|
||||||
|
|
||||||
if action==None:
|
if action == None:
|
||||||
return trans
|
return trans
|
||||||
|
|
||||||
if type(action)!=int: raise TypeError
|
if type(action)!=int: raise TypeError
|
||||||
|
@ -1619,7 +1619,7 @@ class adherent(base_proprietaire):
|
||||||
return new
|
return new
|
||||||
|
|
||||||
def tel(self, new=None):
|
def tel(self, new=None):
|
||||||
if new==None:
|
if new == None:
|
||||||
return self._data.get('tel', [''])[0]
|
return self._data.get('tel', [''])[0]
|
||||||
|
|
||||||
if new != 'inconnu':
|
if new != 'inconnu':
|
||||||
|
@ -1634,11 +1634,11 @@ class adherent(base_proprietaire):
|
||||||
"""
|
"""
|
||||||
Défini la chambre d'un adhérent, EXT pour personne extérieure au campus
|
Défini la chambre d'un adhérent, EXT pour personne extérieure au campus
|
||||||
"""
|
"""
|
||||||
if new==None:
|
if new == None:
|
||||||
return decode(self._data.get('chbre', [''])[0])
|
return decode(self._data.get('chbre', [''])[0])
|
||||||
|
|
||||||
l, new = preattr(new)
|
l, new = preattr(new)
|
||||||
if l==0:
|
if l == 0:
|
||||||
raise ValueError(u"Chambre incorrecte.")
|
raise ValueError(u"Chambre incorrecte.")
|
||||||
|
|
||||||
if new.upper() == 'EXT':
|
if new.upper() == 'EXT':
|
||||||
|
@ -1664,7 +1664,7 @@ class adherent(base_proprietaire):
|
||||||
if new[1:] not in chbres or len(new)<4 or not new[1:4].isdigit():
|
if new[1:] not in chbres or len(new)<4 or not new[1:4].isdigit():
|
||||||
chbres.sort()
|
chbres.sort()
|
||||||
aide = u"Chambre inconnue dans le batiment, les chambres valides sont :"
|
aide = u"Chambre inconnue dans le batiment, les chambres valides sont :"
|
||||||
a=0
|
a = 0
|
||||||
for c in chbres:
|
for c in chbres:
|
||||||
if len(c)>=3 and not c[:3].isdigit():
|
if len(c)>=3 and not c[:3].isdigit():
|
||||||
# C'est un local club
|
# C'est un local club
|
||||||
|
@ -1672,7 +1672,7 @@ class adherent(base_proprietaire):
|
||||||
if int(a/14)>int((a-1)/14): aide += '\n '
|
if int(a/14)>int((a-1)/14): aide += '\n '
|
||||||
if c[0]!='X':
|
if c[0]!='X':
|
||||||
aide += c.ljust(5)
|
aide += c.ljust(5)
|
||||||
a=a+1
|
a = a+1
|
||||||
aide += u'\n'
|
aide += u'\n'
|
||||||
aide += u" " + annuaires.aide.get(bat, '')
|
aide += u" " + annuaires.aide.get(bat, '')
|
||||||
raise ValueError(aide)
|
raise ValueError(aide)
|
||||||
|
@ -1702,7 +1702,7 @@ class adherent(base_proprietaire):
|
||||||
""" Défini l'adresse pour les personnes extérieures (dont la chambre = EXT)
|
""" Défini l'adresse pour les personnes extérieures (dont la chambre = EXT)
|
||||||
L'adresse est une liste de 4 éléments : numero, rue, code postal, ville
|
L'adresse est une liste de 4 éléments : numero, rue, code postal, ville
|
||||||
"""
|
"""
|
||||||
if new==None:
|
if new == None:
|
||||||
if self.chbre() != 'EXT':
|
if self.chbre() != 'EXT':
|
||||||
# Personne sur le campus
|
# Personne sur le campus
|
||||||
return [u'', u'', u'', u'']
|
return [u'', u'', u'', u'']
|
||||||
|
@ -1728,23 +1728,23 @@ class adherent(base_proprietaire):
|
||||||
return new
|
return new
|
||||||
|
|
||||||
def mail(self, new=None):
|
def mail(self, new=None):
|
||||||
if new==None:
|
if new == None:
|
||||||
return decode(self._data.get('mail', [''])[0])
|
return decode(self._data.get('mail', [''])[0])
|
||||||
|
|
||||||
l, new = preattr(new)
|
l, new = preattr(new)
|
||||||
new = new.lower()
|
new = new.lower()
|
||||||
|
|
||||||
#Emplacement de l'@
|
#Emplacement de l'@
|
||||||
a=new.find('@')
|
a = new.find('@')
|
||||||
#Emplacement du . final
|
#Emplacement du . final
|
||||||
b=new.rfind('.')
|
b = new.rfind('.')
|
||||||
|
|
||||||
# Les tests :
|
# Les tests :
|
||||||
# exactement un @
|
# exactement un @
|
||||||
# 2 ou 3 caractères après le . final
|
# 2 ou 3 caractères après le . final
|
||||||
# @ pas en premier ni juste avant le dernier .
|
# @ pas en premier ni juste avant le dernier .
|
||||||
if new.count('@')!=1 \
|
if new.count('@')!=1 \
|
||||||
or not ( l-b==4 or l-b==3) \
|
or not ( l-b == 4 or l-b == 3) \
|
||||||
or a<1 or b-a<2:
|
or a<1 or b-a<2:
|
||||||
raise ValueError(u"Adresse mail incorrecte.")
|
raise ValueError(u"Adresse mail incorrecte.")
|
||||||
|
|
||||||
|
@ -1782,7 +1782,7 @@ class adherent(base_proprietaire):
|
||||||
self._set('mail', [''])
|
self._set('mail', [''])
|
||||||
self._data['objectClass'] = [ 'adherent' ]
|
self._data['objectClass'] = [ 'adherent' ]
|
||||||
|
|
||||||
for c in [ 'uid', 'cn', 'shadowLastChange', 'shadowMax', 'shadowWarning', 'loginShell', 'userPassword', 'uidNumber', 'gidNumber', 'homeDirectory', 'gecos', 'droits', 'mailAlias', 'cannonicalAlias' ]:
|
for c in [ 'uid', 'cn', 'shadowLastChange', 'shadowMax', 'shadowWarning', 'loginShell', 'userPassword', 'uidNumber', 'gidNumber', 'homeDirectory', 'gecos', 'droits', 'mailAlias', 'canonicalAlias' ]:
|
||||||
try: self._data.pop(c)
|
try: self._data.pop(c)
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
|
@ -1790,7 +1790,7 @@ class adherent(base_proprietaire):
|
||||||
"""
|
"""
|
||||||
Retourne l'un des 3 champs études (selon index_or_new si entier)
|
Retourne l'un des 3 champs études (selon index_or_new si entier)
|
||||||
"""
|
"""
|
||||||
if type(index_or_new)==int:
|
if type(index_or_new) == int:
|
||||||
if self._data.has_key('etudes'):
|
if self._data.has_key('etudes'):
|
||||||
return decode(self._data['etudes'][index_or_new])
|
return decode(self._data['etudes'][index_or_new])
|
||||||
else:
|
else:
|
||||||
|
@ -1800,7 +1800,7 @@ class adherent(base_proprietaire):
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
if not self._data.has_key('etudes'):
|
if not self._data.has_key('etudes'):
|
||||||
self._data['etudes']=['', '', '']
|
self._data['etudes'] = ['', '', '']
|
||||||
|
|
||||||
# Pas grand chose à faire à part vérifier que ce sont bien des chaines
|
# Pas grand chose à faire à part vérifier que ce sont bien des chaines
|
||||||
if len(index_or_new)!=3:
|
if len(index_or_new)!=3:
|
||||||
|
@ -1809,7 +1809,7 @@ class adherent(base_proprietaire):
|
||||||
new = ['', '', '']
|
new = ['', '', '']
|
||||||
for i in range(0, 3):
|
for i in range(0, 3):
|
||||||
n = preattr(index_or_new[i])[1]
|
n = preattr(index_or_new[i])[1]
|
||||||
if n in new or n=='':
|
if n in new or n == '':
|
||||||
raise ValueError(u"Etudes non valides.")
|
raise ValueError(u"Etudes non valides.")
|
||||||
new[i] = n
|
new[i] = n
|
||||||
|
|
||||||
|
@ -1890,12 +1890,12 @@ class adherent(base_proprietaire):
|
||||||
if not 'compte' in self.modifs:
|
if not 'compte' in self.modifs:
|
||||||
self.modifs.setdefault('compte', None)
|
self.modifs.setdefault('compte', None)
|
||||||
|
|
||||||
# Création de l'alias cannonique
|
# Création de l'alias canonique
|
||||||
if self.nom() and self.prenom():
|
if self.nom() and self.prenom():
|
||||||
a = '%s.%s' % (self.prenom().capitalize(), self.nom().capitalize())
|
a = '%s.%s' % (self.prenom().capitalize(), self.nom().capitalize())
|
||||||
self.cannonical_alias(a)
|
self.canonical_alias(a)
|
||||||
|
|
||||||
self._data['objectClass'] = ['adherent', 'posixAccount', 'shadowAccount']
|
self._data['objectClass'] = ['adherent', 'cransAccount', 'posixAccount', 'shadowAccount']
|
||||||
self._data['uid'] = [login]
|
self._data['uid'] = [login]
|
||||||
self._data['cn'] = [preattr(self.Nom())[1]]
|
self._data['cn'] = [preattr(self.Nom())[1]]
|
||||||
#self._data['shadowLastChange'] = [ '12632' ]
|
#self._data['shadowLastChange'] = [ '12632' ]
|
||||||
|
@ -1929,16 +1929,16 @@ class adherent(base_proprietaire):
|
||||||
self._data['uidNumber']= [str(uidNumber)]
|
self._data['uidNumber']= [str(uidNumber)]
|
||||||
self._data['gidNumber'] = [str(config.gid)]
|
self._data['gidNumber'] = [str(config.gid)]
|
||||||
|
|
||||||
self._data['homeDirectory']=[ preattr(home)[1] ]
|
self._data['homeDirectory'] = [ preattr(home)[1] ]
|
||||||
gecos = '%s %s' % tuple(map(lambda x: strip_accents(x.capitalize()), (self.prenom(), self.nom())))
|
gecos = '%s %s' % tuple(map(lambda x: strip_accents(x.capitalize()), (self.prenom(), self.nom())))
|
||||||
self._data['gecos'] = [ preattr(gecos)[1] + ',,,' ]
|
self._data['gecos'] = [ preattr(gecos)[1] + ',,,' ]
|
||||||
|
|
||||||
return decode(login)
|
return decode(login)
|
||||||
|
|
||||||
def cannonical_alias(self, new=None):
|
def canonical_alias(self, new=None):
|
||||||
""" Retourne ou défini l'alias canonique"""
|
""" Retourne ou défini l'alias canonique"""
|
||||||
if new == None:
|
if new == None:
|
||||||
try: return decode(self._data['cannonicalAlias'][0])
|
try: return decode(self._data['canonicalAlias'][0])
|
||||||
except: return ''
|
except: return ''
|
||||||
else :
|
else :
|
||||||
a = strip_accents(new)
|
a = strip_accents(new)
|
||||||
|
@ -1947,16 +1947,16 @@ class adherent(base_proprietaire):
|
||||||
if not mailexist(a):
|
if not mailexist(a):
|
||||||
# Attribution de l'alias, sinon on passe
|
# Attribution de l'alias, sinon on passe
|
||||||
|
|
||||||
# Lock de cannonicalAlias
|
# Lock de canonicalAlias
|
||||||
self.lock('cannonicalAlias', a)
|
self.lock('canonicalAlias', a)
|
||||||
|
|
||||||
# Attribution
|
# Attribution
|
||||||
self._set('cannonicalAlias', [a])
|
self._set('canonicalAlias', [a])
|
||||||
return a
|
return a
|
||||||
|
|
||||||
def droits(self, droits=None):
|
def droits(self, droits=None):
|
||||||
""" droits est la liste des droits à donner à l'utilisateur """
|
""" droits est la liste des droits à donner à l'utilisateur """
|
||||||
if droits==None:
|
if droits == None:
|
||||||
return map(decode, self._data.get('droits', []))
|
return map(decode, self._data.get('droits', []))
|
||||||
|
|
||||||
if not isadm:
|
if not isadm:
|
||||||
|
@ -2006,7 +2006,7 @@ class club(base_proprietaire):
|
||||||
|
|
||||||
def Nom(self, new=None):
|
def Nom(self, new=None):
|
||||||
""" Défini ou retourne le nom du club """
|
""" Défini ou retourne le nom du club """
|
||||||
if new==None:
|
if new == None:
|
||||||
return decode(self._data.get('nom', [''])[0])
|
return decode(self._data.get('nom', [''])[0])
|
||||||
|
|
||||||
l, new = preattr(new)
|
l, new = preattr(new)
|
||||||
|
@ -2030,7 +2030,7 @@ class club(base_proprietaire):
|
||||||
|
|
||||||
def responsable(self, adher=None):
|
def responsable(self, adher=None):
|
||||||
""" Responsable du club, adher doit être une instance de la classe adhérent """
|
""" Responsable du club, adher doit être une instance de la classe adhérent """
|
||||||
if adher==None:
|
if adher == None:
|
||||||
aid = decode(self._data.get('responsable', [''])[0])
|
aid = decode(self._data.get('responsable', [''])[0])
|
||||||
if aid:
|
if aid:
|
||||||
return self.search('aid=%s' % aid)['adherent'][0]
|
return self.search('aid=%s' % aid)['adherent'][0]
|
||||||
|
@ -2048,7 +2048,7 @@ class club(base_proprietaire):
|
||||||
def chbre(self, new=None):
|
def chbre(self, new=None):
|
||||||
""" Défini le local du club
|
""" Défini le local du club
|
||||||
new doit être une des clefs de l'annuaire locaux_clubs"""
|
new doit être une des clefs de l'annuaire locaux_clubs"""
|
||||||
if new==None:
|
if new == None:
|
||||||
return decode(self._data.get('chbre', [''])[0])
|
return decode(self._data.get('chbre', [''])[0])
|
||||||
|
|
||||||
annu = annuaires.locaux_clubs()
|
annu = annuaires.locaux_clubs()
|
||||||
|
@ -2066,7 +2066,7 @@ class club(base_proprietaire):
|
||||||
|
|
||||||
def compte(self, login=None):
|
def compte(self, login=None):
|
||||||
""" Créé un compte au club sur vert"""
|
""" Créé un compte au club sur vert"""
|
||||||
if login==None:
|
if login == None:
|
||||||
return self._data.get('uid', [''])[0]
|
return self._data.get('uid', [''])[0]
|
||||||
|
|
||||||
# Génération du login : club-<login fourni>
|
# Génération du login : club-<login fourni>
|
||||||
|
@ -2101,7 +2101,7 @@ class club(base_proprietaire):
|
||||||
if not 'compte' in self.modifs:
|
if not 'compte' in self.modifs:
|
||||||
self.modifs.setdefault('compte', None)
|
self.modifs.setdefault('compte', None)
|
||||||
|
|
||||||
self._data['objectClass'] = [ 'club', 'posixAccount', 'shadowAccount' ]
|
self._data['objectClass'] = ['club', 'cransAccount', 'posixAccount', 'shadowAccount']
|
||||||
self._data['uid'] = [ login ]
|
self._data['uid'] = [ login ]
|
||||||
self._data['cn'] = [ preattr(self.Nom())[1] ]
|
self._data['cn'] = [ preattr(self.Nom())[1] ]
|
||||||
self._data['loginShell' ] = [ config.club_login_shell ]
|
self._data['loginShell' ] = [ config.club_login_shell ]
|
||||||
|
@ -2117,8 +2117,8 @@ class club(base_proprietaire):
|
||||||
return self.compte(login)
|
return self.compte(login)
|
||||||
|
|
||||||
self._data['uidNumber']= [ str(uidNumber) ]
|
self._data['uidNumber']= [ str(uidNumber) ]
|
||||||
self._data['gidNumber']=[ str(config.club_gid) ]
|
self._data['gidNumber'] = [ str(config.club_gid) ]
|
||||||
self._data['homeDirectory']=[ preattr(home)[1] ]
|
self._data['homeDirectory'] = [ preattr(home)[1] ]
|
||||||
|
|
||||||
return decode(login)
|
return decode(login)
|
||||||
|
|
||||||
|
@ -2185,8 +2185,8 @@ class Machine(base_classes_crans):
|
||||||
# Machine vide
|
# Machine vide
|
||||||
self.__proprietaire = parent_or_tuple
|
self.__proprietaire = parent_or_tuple
|
||||||
self.dn = parent_or_tuple.dn
|
self.dn = parent_or_tuple.dn
|
||||||
self._data={ 'objectClass': [ self.objectClass ] }
|
self._data = { 'objectClass': [ self.objectClass ] }
|
||||||
self._init_data={}
|
self._init_data = {}
|
||||||
self.__typ = typ
|
self.__typ = typ
|
||||||
self._modifiable = 'w'
|
self._modifiable = 'w'
|
||||||
|
|
||||||
|
@ -2325,7 +2325,7 @@ class Machine(base_classes_crans):
|
||||||
return 'N/A'
|
return 'N/A'
|
||||||
|
|
||||||
# Attribution de la prise
|
# Attribution de la prise
|
||||||
new=preattr(new)[1]
|
new = preattr(new)[1]
|
||||||
if new == 'N/A':
|
if new == 'N/A':
|
||||||
if self._data.has_key('prise'):
|
if self._data.has_key('prise'):
|
||||||
self._set('prise', [])
|
self._set('prise', [])
|
||||||
|
@ -2836,7 +2836,7 @@ class BorneWifi(Machine):
|
||||||
|
|
||||||
if champ == None:
|
if champ == None:
|
||||||
if type(new) is list:
|
if type(new) is list:
|
||||||
self.set('nvram', new)
|
self._set('nvram', new)
|
||||||
return new
|
return new
|
||||||
else:
|
else:
|
||||||
return current
|
return current
|
||||||
|
@ -2949,7 +2949,7 @@ if __name__ == '__main__':
|
||||||
elif '--menage' in sys.argv:
|
elif '--menage' in sys.argv:
|
||||||
print "Ménage des machines des adhérents partis..."
|
print "Ménage des machines des adhérents partis..."
|
||||||
db = crans_ldap()
|
db = crans_ldap()
|
||||||
machines=db.search('paiement!=%s&host=*.crans.org' % ann_scol , 'w')['machine']
|
machines = db.search('paiement!=%s&host=*.crans.org' % ann_scol , 'w')['machine']
|
||||||
print "Destruction de %i machines" % len(machines)
|
print "Destruction de %i machines" % len(machines)
|
||||||
for m in machines:
|
for m in machines:
|
||||||
print 'Destruction de %s' % m.nom()
|
print 'Destruction de %s' % m.nom()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue