Patchs divers + mise jour de l'annuaire

darcs-hash:20040902051057-d1718-2e5bc8684bcff38b4e56318930da345f0b58f6b4.gz
This commit is contained in:
bernat 2004-09-02 07:10:57 +02:00
parent 1ec186d9dd
commit a2411248dc
5 changed files with 128 additions and 76 deletions

View file

@ -173,7 +173,7 @@ chbre_prises={ 'a' :
'198':'217-', '199':'218-', '192':'219' , '239':'220' , '198':'217-', '199':'218-', '192':'219' , '239':'220' ,
'245':'221' , '303':'222' , '305':'223' , '191':'224' , '245':'221' , '303':'222' , '305':'223' , '191':'224' ,
'XXX':'225' , 'XXX':'226' , 'XXX':'227' , 'XXX':'228' , 'XXX':'225' , 'XXX':'226' , 'XXX':'227' , 'XXX':'228' ,
'XXX':'229' , 'XXX':'230' , 'XXX':'231' , 'XXX':'232' , 'XXX':'229' , 'XXX':'230' , '129':'231-' , 'XXX':'232' ,
'XXX':'233' , 'XXX':'234' , 'XXX':'235' , 'XXX':'236' , 'XXX':'233' , 'XXX':'234' , 'XXX':'235' , 'XXX':'236' ,
'XXX':'237' , 'XXX':'238' , 'XXX':'239' , 'XXX':'240' , 'XXX':'237' , 'XXX':'238' , 'XXX':'239' , 'XXX':'240' ,
'XXX':'241' , 'XXX':'242' , 'XXX':'243' , 'XXX':'244' , 'XXX':'241' , 'XXX':'242' , 'XXX':'243' , 'XXX':'244' ,

View file

@ -6,10 +6,10 @@
############################################ ############################################
#Précablage possible ? #Précablage possible ?
precab=1 precab=0
#Bloquage si carte d'étudiant manquante pour l'année en cours #Bloquage si carte d'étudiant manquante pour l'année en cours
carte_et=1 carte_et=0
##Création de comptes ##Création de comptes
# Gid des comptes créés # Gid des comptes créés

View file

@ -46,13 +46,13 @@ class switch(gen_config) :
def gen_conf(self) : def gen_conf(self) :
self.chbres.sort() self.chbres.sort()
for chbre in self.chbres : for chbre in self.chbres :
if chbre == '????' :
continue
bat = chbre[0].lower() bat = chbre[0].lower()
a = self.db.search('chbre=%s' % chbre)['adherent'] a = self.db.search('chbre=%s' % chbre)['adherent']
action = '' action = ''
for adh in a : for adh in a :
if ((ann_scol in adh.paiement() or if (((ann_scol in adh.paiement()) or ((ann_scol-1) in adh.paiement and localtime()[1]==9)) and 'bloq' not in adh.blacklist_actif()) :
((ann_scol-1) in adh.paiement and localtime()[1]==9)) and
'bloq' not in adh.blacklist_actif()) :
# Il faut activer la prise # Il faut activer la prise
anim('\tactivation chbre %s' % chbre) anim('\tactivation chbre %s' % chbre)
action = 'enable' action = 'enable'
@ -67,7 +67,7 @@ class switch(gen_config) :
# Action sur le switch # Action sur le switch
prise = chbre_prises[bat][chbre[1:].lower()] prise = chbre_prises[bat][chbre[1:].lower()]
sw=hp(bat,int(prise[0])) sw=hp(bat,int(prise[0]))
r = sw.set_prise(int(prise[1:4]),'disable') r = sw.set_prise(int(prise[1:4]),action)
sw.close() sw.close()
if not r : if not r :
raise RuntimeError('Erreur de communiquation') raise RuntimeError('Erreur de communiquation')

View file

@ -65,9 +65,7 @@ def set_bases(adher) :
try : adher.tel(result[2]) try : adher.tel(result[2])
except ValueError, c : err += c.args[0] + '\n' except ValueError, c : err += c.args[0] + '\n'
try : c = adher.chbre(result[3]) err += _set_chbre(adher,result[3])
except ValueError, c : err += c.args[0] + '\n'
except EnvironmentError, c : err += c.args[0] + '\n'
# Des erreurs ? # Des erreurs ?
if err : if err :
@ -77,12 +75,39 @@ def set_bases(adher) :
# On redemande # On redemande
return set_bases(adher) return set_bases(adher)
if c =='EXT' : if adher.chbre() =='EXT' :
# Il faut demander l'adresse extérieure # Il faut demander l'adresse extérieure
if set_addr_ext(adher) : if set_addr_ext(adher) :
# Annulation # Annulation
return set_bases(adher) return set_bases(adher)
def _set_chbre(adher,chbre) :
""" Attribution de la chambre chbre à l'adhérent fourni
Retourne une chaine (unicode) avec l'erreur éventuelle
"""
if chbre=='????' :
# Réservé à un usage interne
return u'Chambre invalide\n'
try : c = adher.chbre(chbre)
except EnvironmentError, c : return c.args[0] + '\n'
except ValueError, c :
try :
squatteur = c.args[1]
aff(squatteur)
arg = u'--title "Inscription adhérent" '
arg+= u'--yesno "Un adhérent (%s) occupe déjà cette chambre.\n' % squatteur.Nom()
arg+= u'\nChanger la chambre de cet adhérent ?" 0 0'
no, res = dialog(arg)
if no : raise # On laisse l'erreur
squatteur.chbre('????')
squatteur.save()
return _set_chbre(adher,chbre) # On recommence, le géneur doit être parti.
except :
return c.args[0] + '\n'
return u''
def set_addr_ext(adher) : def set_addr_ext(adher) :
""" Définition de l'adresse extérieure d'un adhérent """ Définition de l'adresse extérieure d'un adhérent
La chambre de cet adhérent doit être EXT, sinon erreur """ La chambre de cet adhérent doit être EXT, sinon erreur """
@ -359,14 +384,16 @@ def set_compte(adher) :
# Première tentative # Première tentative
err = 0 err = 0
try : login = adher.compte(login) try : login = adher.compte(login)
except EnvironmentError, c : err = 1 # Locké
except ValueError, c : except ValueError, c :
try : try :
c.arg[1] c.args[1]
# Le compte existe => 2ème tentative (1ere lettre prénom + nom) # Le compte existe => 2ème tentative (1ere lettre prénom + nom)
login = adher.prenom()[0]+login login = adher.prenom()[0]+login
login = login.lower()
err =2 err =2
except : err = 1 except :
err = 1
except EnvironmentError, c : err = 1 # Locké
if err : if err :
while 1: while 1:
@ -657,7 +684,7 @@ def set_admin(proprio) :
if card : if card :
arg+= u'"1" "Carte d\'étudiant %d/%d fournie" "%s" ' % (ann_scol,ann_scol+1, carte) arg+= u'"1" "Carte d\'étudiant %d/%d fournie" "%s" ' % (ann_scol,ann_scol+1, carte)
arg+= u'"2" "Adhésion %d/%d réglée et charte signée" "%s" ' % (ann_scol,ann_scol+1,paid_now) arg+= u'"2" "Adhésion %d/%d réglée et charte signée" "%s" ' % (ann_scol,ann_scol+1,paid_now)
if config.precab : if config.precab == 1 :
arg+= u'"3" "Adhésion %d/%d réglée et charte signée (précâblage)" "%s" ' % (ann_scol+1,ann_scol+2,precab) arg+= u'"3" "Adhésion %d/%d réglée et charte signée (précâblage)" "%s" ' % (ann_scol+1,ann_scol+2,precab)
annul , result = dialog(arg) annul , result = dialog(arg)
@ -951,25 +978,32 @@ def modif_adher(adher) :
Modification de l'adhérent fourni (instance de adhérent) Modification de l'adhérent fourni (instance de adhérent)
Retourne 1 si annulation. Retourne 1 si annulation.
""" """
arg = u'--title "Modification de %s" ' % adher.Nom() # Préliminaire : si la chambre est inconnue on force la question
arg+= u'--menu "Que souhaitez vous modifier ?" 0 0 0 ' if adher.chbre() =='????' :
arg+= u'"Admistratif" "Précâblage, carte d\'étudiant, études" ' res=['Chambre']
if adher.chbre() == 'EXT' : arg = u'--title "Modification de %s" ' % adher.Nom()
arg+= u'"Adresse" "Déménagement" ' arg+= u'--msgbox "ERREUR : la chambre de cet adhérent est inconnue !\n\n\n" 0 0'
dialog(arg)
else : else :
arg+= u'"Chambre" "Déménagement" ' arg = u'--title "Modification de %s" ' % adher.Nom()
arg+= u'"Etudes" "Changement d\'année ou de filière" ' arg+= u'--menu "Que souhaitez vous modifier ?" 0 0 0 '
arg+= u'"Téléphone" "Changement de numéro de téléphone" ' arg+= u'"Admistratif" "Précâblage, carte d\'étudiant, études" '
arg+= u'"Mail" "Créer un compte ou changer l\'adresse mail de contact" ' if adher.chbre() == 'EXT' :
arg+= u'"Alias" "Créer ou supprimer un alias mail" ' arg+= u'"Adresse" "Déménagement" '
arg+= u'"Remarque" "Ajouter ou modifer un commentaire" ' else :
if isadm : arg+= u'"Chambre" "Déménagement" '
arg+= u'"Droits" "Modifier les droits alloués à cet adhérent" ' arg+= u'"Etudes" "Changement d\'année ou de filière" '
if isdeconnecteur : arg+= u'"Téléphone" "Changement de numéro de téléphone" '
arg+= u'"Blackliste" "Modifier la blackliste de cet adhérent" ' arg+= u'"Mail" "Créer un compte ou changer l\'adresse mail de contact" '
annul, res = dialog(arg) arg+= u'"Alias" "Créer ou supprimer un alias mail" '
arg+= u'"Remarque" "Ajouter ou modifer un commentaire" '
if isadm :
arg+= u'"Droits" "Modifier les droits alloués à cet adhérent" '
if isdeconnecteur :
arg+= u'"Blackliste" "Modifier la blackliste de cet adhérent" '
annul, res = dialog(arg)
if annul : return 1 if annul : return 1
if res[0]=='Etudes' : if res[0]=='Etudes' :
set_etudes(adher) set_etudes(adher)
@ -993,21 +1027,18 @@ def modif_adher(adher) :
annul,res = dialog(arg) annul,res = dialog(arg)
if annul : return 1 if annul : return 1
e=0 e = _set_chbre(adher,res[0])
try : if e :
c = adher.chbre(res[0]) arg = u'--title "Déménagement de la %s" ' % adher.chbre()
if c =='EXT' : arg+= u'--msgbox "%s\n\n\n" 0 0' % e
dialog(arg)
else :
if adher.chbre() =='EXT' :
# Il faut demander l'adresse extérieure # Il faut demander l'adresse extérieure
if set_addr_ext(adher) : if set_addr_ext(adher) :
# Annulation # Annulation
continue continue
break break
except EnvironmentError, c : e = c.args[0]
except ValueError, c : e = c.args[0]
if e :
arg = u'--title "Déménagement de la %s" ' % adher.chbre()
arg+= u'--msgbox "%s\n\n\n" 0 0' % e
dialog(arg)
elif res[0]=='Adresse' : elif res[0]=='Adresse' :
arg = u'--title "Déménagement de %s" ' % adher.Nom() arg = u'--title "Déménagement de %s" ' % adher.Nom()
arg+= u'--menu "Question :" 0 0 0 ' arg+= u'--menu "Question :" 0 0 0 '
@ -1409,15 +1440,16 @@ def menu_principal() :
annul , result = dialog(arg) annul , result = dialog(arg)
if annul : continue if annul : continue
choix=result[0] choix=result[0]
if choix=='Fixe' : try :
try : becane = machine(proprio,'fixe') if choix=='Fixe' :
except ValueError, c: becane = machine(proprio,'fixe')
arg = '--title "Nouvelle machine" ' elif choix=='Wifi' :
arg += '--msgbox "%s\n\n\n" 0 0' % c.args[0] becane = machine(proprio,'wifi')
dialog(arg) except ValueError, c:
continue arg = '--title "Nouvelle machine" '
elif choix=='Wifi' : arg += '--msgbox "%s\n\n\n" 0 0' % c.args[0]
becane = machine(proprio,'wifi') dialog(arg)
continue
if set_machine(becane) : if set_machine(becane) :
# Annulation # Annulation
del(becane) ; becane = None del(becane) ; becane = None
@ -1434,7 +1466,13 @@ def menu_principal() :
elif choix=='mMc' : elif choix=='mMc' :
# Modif machine courante # Modif machine courante
if set_machine(becane) : if not proprio :
proprio = becane.proprietaire()
if proprio.chbre() == '????' :
arg = u'--title "Ajout d\'une machine" '
arg+= u'--msgbox "ERREUR : la chambre de %s est inconnue !\n\n\n" 0 0' % proprio.Nom()
dialog(arg)
elif set_machine(becane) :
# Annulation des modifs # Annulation des modifs
becane.restore() becane.restore()

View file

@ -312,8 +312,12 @@ class crans_ldap :
args=map(tr,args) args=map(tr,args)
if new in serv.keys() : if new in serv.keys() :
if args not in serv[new] : new_args = []
modlist = ldap.modlist.modifyModlist({ 'args' : serv[new] }, { 'args' : serv[new] + args }) for arg in args :
if arg not in serv[new] :
new_args.append(arg)
if new_args :
modlist = ldap.modlist.modifyModlist({ 'args' : serv[new] }, { 'args' : serv[new] + new_args })
self.conn.modify_s(serv_dn,modlist) self.conn.modify_s(serv_dn,modlist)
# else rien à faire # else rien à faire
else : else :
@ -931,14 +935,14 @@ class base_proprietaire(base_classes_crans) :
if m.ipsec() and not 'conf_wifi' in serv : if m.ipsec() and not 'conf_wifi' in serv :
self.services_to_restart('conf_wifi') self.services_to_restart('conf_wifi')
elif not self.chbre() in serv : elif not self.chbre() in serv :
self.services_to_restart('chbre',[self.chbre()]) self.services_to_restart('switch',[self.chbre()])
if self.machines() : if self.machines() :
for s in ['dhcp', 'dns', 'firewall' ] : for s in ['dhcp', 'dns', 'firewall' ] :
if s not in serv : if s not in serv :
serv.append(s) serv.append(s)
# Vérification si changement de bât, ce qui obligerai un changement d'IP # Vérification si changement de bât, ce qui obligerai un changement d'IP
if 'chbre' in self.modifs : if 'chbre' in self.modifs and self.chbre()!='????' :
# Verif si machines avec bonnes ip # Verif si machines avec bonnes ip
err = 0 err = 0
for m in self.machines() : for m in self.machines() :
@ -956,10 +960,7 @@ class base_proprietaire(base_classes_crans) :
ret += "\nChangement d'IP machine %s : " % m.nom() ret += "\nChangement d'IP machine %s : " % m.nom()
try : try :
ret += "%s -> %s" % ( ip, m.ip('<automatique>') ) ret += "%s -> %s" % ( ip, m.ip('<automatique>') )
se, r = m.save() r = m.save()
for s in se :
if s not in serv :
serv.append(s)
except c : except c :
ret += coul(u'ERREUR : %s' % c.args[0], rouge) ret += coul(u'ERREUR : %s' % c.args[0], rouge)
err = 1 err = 1
@ -1093,6 +1094,10 @@ class adherent(base_proprietaire) :
self._set('chbre',['EXT']) self._set('chbre',['EXT'])
return 'EXT' return 'EXT'
elif new.upper() == '????' :
# On ne sait pas ou est l'adhérent
self._set('chbre',['????'])
return '????'
new = new.capitalize() new = new.capitalize()
bat = new[0].lower() bat = new[0].lower()
@ -1102,7 +1107,7 @@ class adherent(base_proprietaire) :
chbres = annuaires.chbre_prises[bat].keys() chbres = annuaires.chbre_prises[bat].keys()
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 bâtiment, 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() :
@ -1120,8 +1125,16 @@ class adherent(base_proprietaire) :
raise ValueError(u'Bâtiment inconnu.') raise ValueError(u'Bâtiment inconnu.')
# La chambre est valide, est-elle déja occupée ? # La chambre est valide, est-elle déja occupée ?
if self.exist('chbre=%s' % new) : test = self.exist('chbre=%s' % new)
raise ValueError(u'Chambre déjà occupée.') if test :
search = test[0].split(',')[0]
if search.split('=')[0]!='aid' :
raise ValueError(u'Chambre déjà occupée.')
adh = self.search(search,self._modifiable)['adherent']
if len(adh) != 1 :
raise ValueError(u'Chambre déjà occupée.')
else :
raise ValueError(u'Chambre déjà occupée.',adh[0])
# Lock de la chambre # Lock de la chambre
self._locks.append(self.lock('chbre',new)) self._locks.append(self.lock('chbre',new))
@ -1279,10 +1292,13 @@ class adherent(base_proprietaire) :
if login[0]=='-' : if login[0]=='-' :
raise ValueError(u"- interdit en première position.") raise ValueError(u"- interdit en première position.")
if mailexist(login) : if mailexist(login) :
raise ValueError(u"Login existant ou correspondant à un alias mail.",1) raise ValueError(u"Login existant ou correspondant à un alias mail.",1)
home = '/home/' + login
if os.path.exists(home) :
raise ValueError(u'Création du compte impossible : home existant',1)
# Lock du mail # Lock du mail
self._locks.append(self.lock('mail',login)) self._locks.append(self.lock('mail',login))
@ -1321,10 +1337,6 @@ 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) ]
home = '/home/' + login
if os.path.exists(home) :
raise RuntimeError(u'Création du compte impossible : home existant')
self._data['homeDirectory']=[ preattr(home)[1] ] self._data['homeDirectory']=[ preattr(home)[1] ]
self._data['gecos'] = [ preattr(self.Nom())[1] + ',,,' ] self._data['gecos'] = [ preattr(self.Nom())[1] + ',,,' ]
@ -1535,9 +1547,13 @@ class machine(base_classes_crans) :
self.__typ = typ self.__typ = typ
self._modifiable = 'w' self._modifiable = 'w'
if self.__proprietaire.chbre() == 'EXT' and typ == 'fixe' : chbre = self.__proprietaire.chbre()
if chbre == 'EXT' and typ == 'fixe' :
raise ValueError(u'Il faut une chambre pour pouvoir posséder une machine fixe') raise ValueError(u'Il faut une chambre pour pouvoir posséder une machine fixe')
if chbre == '????' :
raise ValueError(u'ERREUR : la chambre du propriétaire est inconnue')
if typ == 'wifi' : if typ == 'wifi' :
# Génération de la clef IPsec # Génération de la clef IPsec
self.ipsec(1) self.ipsec(1)
@ -1740,8 +1756,6 @@ class machine(base_classes_crans) :
if not self.conn : self.connect() if not self.conn : self.connect()
res = self.conn.search_s(','.join(self.dn.split(',')[1:]),0) res = self.conn.search_s(','.join(self.dn.split(',')[1:]),0)
if len(res) != 1 : njoqmf
if 'adherent' in res[0][1]['objectClass'] : if 'adherent' in res[0][1]['objectClass'] :
self.__proprietaire = adherent(res[0],self._modifiable,self.conn) self.__proprietaire = adherent(res[0],self._modifiable,self.conn)
elif 'club' in res[0][1]['objectClass'] : elif 'club' in res[0][1]['objectClass'] :