Detabification massive.

darcs-hash:20051018083823-d1718-09c2df38cfb707d3c3679188b9b9a812009f4f7c.gz
This commit is contained in:
bernat 2005-10-18 10:38:23 +02:00
parent 3c54fb2904
commit 37b21339a6
40 changed files with 1473 additions and 1473 deletions

View file

@ -60,37 +60,37 @@ for adresse in adresses :
os.system("barcode -n -E -b %s%s -o %s" % (adresse,time.strftime("%Y%m%d-%H%M",time.localtime()),barcode)) os.system("barcode -n -E -b %s%s -o %s" % (adresse,time.strftime("%Y%m%d-%H%M",time.localtime()),barcode))
data = db.search("mail=%s" % adresse) data = db.search("mail=%s" % adresse)
try : try :
prenom = data['adherent'][0].prenom().encode('iso8859-15') prenom = data['adherent'][0].prenom().encode('iso8859-15')
nom = data['adherent'][0].nom().encode('iso8859-15') nom = data['adherent'][0].nom().encode('iso8859-15')
chbre = data['adherent'][0].chbre() chbre = data['adherent'][0].chbre()
except : except :
sys.exit("Erreur : l'adresse < %s > n'a pas été trouvée dans la base" % adresse) sys.exit("Erreur : l'adresse < %s > n'a pas été trouvée dans la base" % adresse)
chbres.append(chbre) chbres.append(chbre)
date = time.strftime("%A %d %B %Y",time.localtime(time.time()+15*24*3600)) date = time.strftime("%A %d %B %Y",time.localtime(time.time()+15*24*3600))
if adresse == adresses[0] : if adresse == adresses[0] :
file.write("\\newcommand{\prenom}{%s}\n" % prenom) file.write("\\newcommand{\prenom}{%s}\n" % prenom)
file.write("\\newcommand{\\nom}{%s}\n" % nom) file.write("\\newcommand{\\nom}{%s}\n" % nom)
file.write("\\newcommand{\chambre}{%s}\n" % chbre) file.write("\\newcommand{\chambre}{%s}\n" % chbre)
file.write("\\newcommand{\email}{\url{%s}}\n" % adresse) file.write("\\newcommand{\email}{\url{%s}}\n" % adresse)
file.write("\\newcommand{\deconnexion}{%s}\n" % date) file.write("\\newcommand{\deconnexion}{%s}\n" % date)
else : else :
file.write("\\renewcommand{\prenom}{%s}\n" % prenom) file.write("\\renewcommand{\prenom}{%s}\n" % prenom)
file.write("\\renewcommand{\\nom}{%s}\n" % nom) file.write("\\renewcommand{\\nom}{%s}\n" % nom)
file.write("\\renewcommand{\chambre}{%s}\n" % chbre) file.write("\\renewcommand{\chambre}{%s}\n" % chbre)
file.write("\\renewcommand{\email}{\url{%s}}\n" % adresse) file.write("\\renewcommand{\email}{\url{%s}}\n" % adresse)
file.write("\\renewcommand{\deconnexion}{%s}\n" % date) file.write("\\renewcommand{\deconnexion}{%s}\n" % date)
tex_src = open(texsrc, 'r') tex_src = open(texsrc, 'r')
file.write(tex_src.read()) file.write(tex_src.read())
tex_src.close() tex_src.close()
if adresse != adresses[len(adresses)-1] : if adresse != adresses[len(adresses)-1] :
file.write('\\newpage') file.write('\\newpage')
else : else :
file.write('\end{document}') file.write('\end{document}')
file.close() file.close()
#os.system("latex %s" % mailtex) #os.system("latex %s" % mailtex)
@ -133,16 +133,16 @@ while (1 == 1):
print " [Envoyer, Abandonner]" print " [Envoyer, Abandonner]"
r = sys.stdin.readline().strip() r = sys.stdin.readline().strip()
if (r == "e" or r == "E"): if (r == "e" or r == "E"):
# Send the email via our own SMTP server. # Send the email via our own SMTP server.
s = smtplib.SMTP() s = smtplib.SMTP()
s.connect() s.connect()
s.sendmail(msg['From'], (msg['To'],msg['Cc']), msg.as_string()) s.sendmail(msg['From'], (msg['To'],msg['Cc']), msg.as_string())
s.close() s.close()
print "Mail envoyé !" print "Mail envoyé !"
break break
if (r == "a" or r == "A"): if (r == "a" or r == "A"):
print "Abandon" print "Abandon"
os.system("rm -f %s" % pdf) os.system("rm -f %s" % pdf)
break break
os.system("rm -f %s %s" % (mailtex.replace(".tex",".*"),barcode)) os.system("rm -f %s %s" % (mailtex.replace(".tex",".*"),barcode))

View file

@ -373,20 +373,20 @@ def bilan(DB, dbNames, duree, cur_time, disp_all = 0) :
print printCounters(0, 1) + " | HOST" print printCounters(0, 1) + " | HOST"
print "="*77 print "="*77
for l in liste[0:top10_length] : for l in liste[0:top10_length] :
# Test si le DNS de la machine existe (donc si la machine est inscrite au crans) # Test si le DNS de la machine existe (donc si la machine est inscrite au crans)
try: try:
host = socket.gethostbyaddr( l[-1] ) [0] host = socket.gethostbyaddr( l[-1] ) [0]
bad = 0 bad = 0
except socket.error : except socket.error :
host = l[-1] host = l[-1]
bad = 1 bad = 1
if not resolve_names : if not resolve_names :
# On veut l'IP # On veut l'IP
host = l[-1] host = l[-1]
if bad : if bad :
host = "NoDNS_" + host host = "NoDNS_" + host
print printCounters(l)+ (" |%s" % host) print printCounters(l)+ (" |%s" % host)
@ -491,14 +491,14 @@ if os.path.isfile(lock_name) :
msg=string.strip(string.join(msg[1:], '') ) msg=string.strip(string.join(msg[1:], '') )
q = os.system("ps -o pid,tty,user,etime,command " +pid) q = os.system("ps -o pid,tty,user,etime,command " +pid)
if q==256: if q==256:
print "PID lock no trouvé => delock" print "PID lock no trouvé => delock"
try : try :
os.remove(lock_name) os.remove(lock_name)
except : except :
None None
else : else :
print "Script lockant en activité, sortie" print "Script lockant en activité, sortie"
sys.exit(255) sys.exit(255)
#Locking #Locking
lock_fd=open(lock_name, "w") lock_fd=open(lock_name, "w")
@ -529,7 +529,7 @@ for [key, val] in optlist :
pickleName=val pickleName=val
if key == '-s' : if key == '-s' :
store_all = 1 store_all = 1
if key == '-n' : if key == '-n' :
resolve_names = 0 resolve_names = 0
if key == '-T' : if key == '-T' :
if duree == 0 : if duree == 0 :

View file

@ -23,75 +23,75 @@ import nntplib,string,os,StringIO
def LFsplit(s): def LFsplit(s):
res="" res=""
while len(s)>80 : while len(s)>80 :
pos=string.find(s,' ',65,80) pos=string.find(s,' ',65,80)
if pos < 0 : if pos < 0 :
res=res+s[0:75]+'\n' res=res+s[0:75]+'\n'
s=s[75:len(s)+1] s=s[75:len(s)+1]
else : else :
res=res+s[0:pos]+'\n' res=res+s[0:pos]+'\n'
s=s[pos+1:len(s)+1] s=s[pos+1:len(s)+1]
if len(s)>0: if len(s)>0:
res=res+s res=res+s
return res return res
for uid in os.listdir('/var/local/cvsweb/checkins/'): for uid in os.listdir('/var/local/cvsweb/checkins/'):
try: try:
so = [] so = []
fi = open('/var/local/cvsweb/checkins/'+uid,'r') fi = open('/var/local/cvsweb/checkins/'+uid,'r')
so.append("From: CVS admin <root@crans.org>\n" + \ so.append("From: CVS admin <root@crans.org>\n" + \
("Subject: CVS Commit par %s\n" % uid)+ \ ("Subject: CVS Commit par %s\n" % uid)+ \
"Organization: Crans Internet Site\n" + \ "Organization: Crans Internet Site\n" + \
"Newsgroups: crans.cvs-checkins\n" + \ "Newsgroups: crans.cvs-checkins\n" + \
"Reply-To: Nounous <nounou@crans.org>\n" + \ "Reply-To: Nounous <nounou@crans.org>\n" + \
"Followup-To: crans.informatique\n" ) "Followup-To: crans.informatique\n" )
so.append("MIME-Version: 1.0\n" + \ so.append("MIME-Version: 1.0\n" + \
"Content-Type: text/plain\n") "Content-Type: text/plain\n")
so.append("\n") so.append("\n")
envoie = 0 envoie = 0
links_base="http://www.crans.org/cgi-bin/cvsweb" links_base="http://www.crans.org/cgi-bin/cvsweb"
while 1: while 1:
s = fi.readline() s = fi.readline()
if not s: break if not s: break
envoie = 1 envoie = 1
links=['Liens vers les diffs sur cvsweb :\n'] links=['Liens vers les diffs sur cvsweb :\n']
diffok = 0 diffok = 0
# On essaye de créer les liens vers cvsweb automatiquement. # On essaye de créer les liens vers cvsweb automatiquement.
try: try:
if s[0:3]=="web": if s[0:3]=="web":
link=string.split(s) link=string.split(s)
for file in link[1:]: for file in link[1:]:
file=string.split(file,",") file=string.split(file,",")
if not string.split(file[0],".")[-1] in ['jpg','jpeg','gif','png']: if not string.split(file[0],".")[-1] in ['jpg','jpeg','gif','png']:
links.append("%s/%s/%s.diff?r1=%s&r2=%s\n" % (links_base,link[0],file[0],file[1],file[2])) links.append("%s/%s/%s.diff?r1=%s&r2=%s\n" % (links_base,link[0],file[0],file[1],file[2]))
diffok = 1 diffok = 1
# S'il y a au moins un diff affichable, on donne le lien. # S'il y a au moins un diff affichable, on donne le lien.
if diffok: if diffok:
links.append('\n') links.append('\n')
s=string.join(links,'') s=string.join(links,'')
else: else:
s=LFsplit(s) s=LFsplit(s)
so.append(s) so.append(s)
except: except:
so.append(s) so.append(s)
# Avec une signature c'est plus propre. # Avec une signature c'est plus propre.
so.append("\n" + \ so.append("\n" + \
"-- \n" + \ "-- \n" + \
"Notification automatique des CVS commits sur le site du CR@NS.\n"+ \ "Notification automatique des CVS commits sur le site du CR@NS.\n"+ \
"Voir http://www.crans.org/cgi-bin/cvsweb/web/ pour accéder aux archives CVS complètes.") "Voir http://www.crans.org/cgi-bin/cvsweb/web/ pour accéder aux archives CVS complètes.")
# maintenant, on envoie : # maintenant, on envoie :
if envoie: if envoie:
sso = string.join(so,'') sso = string.join(so,'')
fso = StringIO.StringIO(sso) fso = StringIO.StringIO(sso)
nntplib.NNTP('news.crans.org').post(fso) nntplib.NNTP('news.crans.org').post(fso)
#print sso #print sso
fi.close() fi.close()
os.unlink('/var/local/cvsweb/checkins/'+uid) os.unlink('/var/local/cvsweb/checkins/'+uid)
except: except:
raise raise

View file

@ -18,9 +18,9 @@ def dialog(backtitle,arg) :
""" Affiche la boite de dialogue défine avec les arguments fournis """ Affiche la boite de dialogue défine avec les arguments fournis
(cf man dialog) (cf man dialog)
si tout se déroule bien retourne : si tout se déroule bien retourne :
[ 0, [ reponse(s) ] ] [ 0, [ reponse(s) ] ]
si annulatin retourne : si annulatin retourne :
[ 1, [] ] [ 1, [] ]
si appui sur ESC demande confirmation de l'abandon et exécute sys.exit(0) si appui sur ESC demande confirmation de l'abandon et exécute sys.exit(0)
si erreur dans les arguments raise RuntimeError si erreur dans les arguments raise RuntimeError
""" """
@ -29,30 +29,30 @@ def dialog(backtitle,arg) :
res = os.system(cmd.encode('iso-8859-15','ignore')) res = os.system(cmd.encode('iso-8859-15','ignore'))
if res == 256 : if res == 256 :
# Annuler # Annuler
f.close() f.close()
return [ 1, [] ] return [ 1, [] ]
# Lecture du fichier de résultat et effacement # Lecture du fichier de résultat et effacement
try: try:
result=f.readlines() result=f.readlines()
f.close() f.close()
except : except :
result = [ "n'importe quoi", ''] result = [ "n'importe quoi", '']
res = 65280 res = 65280
# Traitement # Traitement
if res==65280 and result: if res==65280 and result:
# Erreur dans les arguments # Erreur dans les arguments
raise RuntimeError( arg, result[1].strip() ) raise RuntimeError( arg, result[1].strip() )
elif res==65280 : elif res==65280 :
# Appui sur ESC # Appui sur ESC
arg1 = u'--title "Annulation" --yesno "Quitter ?\nLes dernières modifications seront perdues." 6 48' arg1 = u'--title "Annulation" --yesno "Quitter ?\nLes dernières modifications seront perdues." 6 48'
print backtitle print backtitle
cmd = u'/usr/bin/dialog --backtitle "%s" %s' % (backtitle,arg1) cmd = u'/usr/bin/dialog --backtitle "%s" %s' % (backtitle,arg1)
res = os.system(cmd.encode('iso-8859-15','ignore') ) res = os.system(cmd.encode('iso-8859-15','ignore') )
if res==0 : sys.exit(0) if res==0 : sys.exit(0)
else : return dialog(backtitle,arg) else : return dialog(backtitle,arg)
elif not result : result=[''] elif not result : result=['']
return [ 0, result ] return [ 0, result ]
@ -66,11 +66,11 @@ def coul(txt,col):
""" """
codecol={'rouge' : 31 , 'vert' : 32 , 'jaune' : 33 , 'bleu': 34 , 'violet' : 35 , 'cyan' : 36 , 'gras' : 50} codecol={'rouge' : 31 , 'vert' : 32 , 'jaune' : 33 , 'bleu': 34 , 'violet' : 35 , 'cyan' : 36 , 'gras' : 50}
try : try :
if col[:2]=='f_' : add=10; col=col[2:] if col[:2]=='f_' : add=10; col=col[2:]
else : add=0 else : add=0
txt = "\033[1;%sm%s\033[1;0m" % (codecol[col]+add,txt) txt = "\033[1;%sm%s\033[1;0m" % (codecol[col]+add,txt)
finally : finally :
return txt return txt
OK = coul('OK','vert') OK = coul('OK','vert')
WARNING = coul('WARNING','jaune') WARNING = coul('WARNING','jaune')
@ -84,7 +84,7 @@ def tableau(largeurs,data) :
retourne une chaine formatée repésentant un tableau retourne une chaine formatée repésentant un tableau
largeur est la liste des largeurs des colones largeur est la liste des largeurs des colones
data est une liste de tuples : data est une liste de tuples :
[ ( données entète), (données ligne1), .... ] [ ( données entète), (données ligne1), .... ]
""" """
sep_col = u'|' sep_col = u'|'
@ -102,7 +102,7 @@ def tableau(largeurs,data) :
# Ligne de séparation entète corps # Ligne de séparation entète corps
s=u'\n' s=u'\n'
for l in largeurs : for l in largeurs :
s+= sep_col + u'-'*l s+= sep_col + u'-'*l
s += sep_col + u'\n' s += sep_col + u'\n'
nb_cols = len(largeurs) nb_cols = len(largeurs)
@ -110,16 +110,16 @@ def tableau(largeurs,data) :
# Remplissage tableau # Remplissage tableau
f=u'' f=u''
for ligne in data : for ligne in data :
for i in range(0, nb_cols) : for i in range(0, nb_cols) :
f+= sep_col f+= sep_col
# Centrage # Centrage
l = len(sre.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',ligne[i])) # Longeur sans les chaines de formatage l = len(sre.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',ligne[i])) # Longeur sans les chaines de formatage
if l >= largeurs[i] : if l >= largeurs[i] :
f += ligne[i] f += ligne[i]
else : else :
n = largeurs[i] - l n = largeurs[i] - l
f += u' '*(n/2) + ligne[i] + u' '*(n/2 + n%2) f += u' '*(n/2) + ligne[i] + u' '*(n/2 + n%2)
f+= sep_col + u'\n' f+= sep_col + u'\n'
# Final # Final
f = f.replace(u'\n',s,1) # Insertion du séparateur entète - corps f = f.replace(u'\n',s,1) # Insertion du séparateur entète - corps
@ -151,44 +151,44 @@ def prompt(prompt, defaut=''):
class anim : class anim :
""" Permet de créer une animation : """ Permet de créer une animation :
truc................./ truc................./
truc.................- truc.................-
truc.................\ truc.................\
truc.................| truc.................|
ou une barre de progression si le nombre total d'itérations est founi. ou une barre de progression si le nombre total d'itérations est founi.
""" """
def __init__(self,truc,iter=0) : def __init__(self,truc,iter=0) :
""" Affichage de : """ Affichage de :
truc.................""" truc................."""
self.txt = truc + '.'*(45-len(truc)) self.txt = truc + '.'*(45-len(truc))
self.c = 1 self.c = 1
self.iter = iter self.iter = iter
sys.stdout.write(self.txt) sys.stdout.write(self.txt)
sys.stdout.flush() sys.stdout.flush()
def reinit(self) : def reinit(self) :
""" Efface la ligne courrante et """ Efface la ligne courrante et
affiche : truc................. """ affiche : truc................. """
sys.stdout.write(el + self.txt) sys.stdout.write(el + self.txt)
if self.iter : if self.iter :
sys.stdout.write(' '*28) sys.stdout.write(' '*28)
sys.stdout.write(el + self.txt) sys.stdout.write(el + self.txt)
sys.stdout.flush() sys.stdout.flush()
def cycle(self) : def cycle(self) :
""" Efface la ligne courrante et """ Efface la ligne courrante et
affiche : truc..................? affiche : truc..................?
? caratère variant à chaque appel """ ? caratère variant à chaque appel """
sys.stdout.write(el + self.txt) sys.stdout.write(el + self.txt)
if self.iter!=0 : if self.iter!=0 :
sys.stdout.write('[') sys.stdout.write('[')
av = float(self.c) / float(self.iter) av = float(self.c) / float(self.iter)
n = int(20 * av) n = int(20 * av)
sys.stdout.write('='*n) sys.stdout.write('='*n)
sys.stdout.write('>') sys.stdout.write('>')
sys.stdout.write(' '*(20 - n)) sys.stdout.write(' '*(20 - n))
sys.stdout.write('] %3i%%' % int(100 * av) ) sys.stdout.write('] %3i%%' % int(100 * av) )
else : else :
sys.stdout.write('/-\|'[self.c%4]) sys.stdout.write('/-\|'[self.c%4])
sys.stdout.flush() sys.stdout.flush()
self.c += 1 self.c += 1

View file

@ -490,10 +490,10 @@ def reverse(bat) :
""" Retourne un dictionnaire : { prise : [ chambre(s) ] } """ """ Retourne un dictionnaire : { prise : [ chambre(s) ] } """
reverse={} reverse={}
for chbre, prise in chbre_prises[bat].items() : for chbre, prise in chbre_prises[bat].items() :
if reverse.has_key(prise) : if reverse.has_key(prise) :
reverse[prise] += [ chbre ] reverse[prise] += [ chbre ]
else : else :
reverse[prise] = [ chbre ] reverse[prise] = [ chbre ]
return reverse return reverse
def all_switchs(bat=None): def all_switchs(bat=None):
@ -517,7 +517,7 @@ def all_switchs(bat=None):
dup = map(lambda x: x[0], reverse(b).keys()) dup = map(lambda x: x[0], reverse(b).keys())
# dup contient des elements en double # dup contient des elements en double
for n in list(dict(zip(dup,[None]*len(dup)))): for n in list(dict(zip(dup,[None]*len(dup)))):
switchs.append("bat%s-%s.adm.crans.org" % (b, n)) switchs.append("bat%s-%s.adm.crans.org" % (b, n))
switchs.sort(cmp) switchs.sort(cmp)
return switchs return switchs
@ -528,18 +528,18 @@ def locaux_clubs() :
# Corespondance chbre -> nom du local club # Corespondance chbre -> nom du local club
locaux_clubs = { 'Bcl0' : 'Kfet' , locaux_clubs = { 'Bcl0' : 'Kfet' ,
'Bcl1' : 'Krobot', 'Bcl1' : 'Krobot',
'Gcl0' : 'Med' , 'Gcl0' : 'Med' ,
'Pcl0' : 'Bds' , 'Pcl0' : 'Bds' ,
'Hcl0' : 'Eileo', 'Hcl0' : 'Eileo',
'EXT' : 'EXT' } 'EXT' : 'EXT' }
# Ajout des locaux d'étage A, B et C # Ajout des locaux d'étage A, B et C
for b in 'ABC' : for b in 'ABC' :
for i in range(2,7) : for i in range(2,7) :
locaux_clubs['%scl%i' % ( b, i)] = '%i@%s' % (i, b) locaux_clubs['%scl%i' % ( b, i)] = '%i@%s' % (i, b)
# Ajout de ceux des H, I et J # Ajout de ceux des H, I et J
for b in 'HIJ' : for b in 'HIJ' :
for i in range(1,5) : for i in range(1,5) :
locaux_clubs['%scl%i' % ( b, i)] = '%i@%s' % (i, b) locaux_clubs['%scl%i' % ( b, i)] = '%i@%s' % (i, b)
# Supression du 2@B et 4@J # Supression du 2@B et 4@J
locaux_clubs.pop('Bcl2') locaux_clubs.pop('Bcl2')
locaux_clubs.pop('Jcl4') locaux_clubs.pop('Jcl4')

View file

@ -81,11 +81,11 @@ class home:
else : else :
print OK print OK
### Mail ### Mail
os.mkdir(home + '/Mail', 0700) os.mkdir(home + '/Mail', 0700)
os.chown(home + '/Mail', int(uid) ,config.gid) os.chown(home + '/Mail', int(uid) ,config.gid)
os.mkdir('/var/mail/' + login,0770) os.mkdir('/var/mail/' + login,0770)
os.chown('/var/mail/' + login, int(uid) ,8) os.chown('/var/mail/' + login, int(uid) ,8)
except : except :
print ERREUR print ERREUR

View file

@ -19,11 +19,11 @@ except:
class droits(gen_config) : class droits(gen_config) :
def restart(s) : def restart(s) :
# Rien à faire # Rien à faire
pass pass
def __str__(s): def __str__(s):
return "droits" return "droits"
class droits_ldap(crans_ldap,droits) : class droits_ldap(crans_ldap,droits) :
####### Les groupes ####### Les groupes
@ -32,9 +32,9 @@ class droits_ldap(crans_ldap,droits) :
# Quels droits donnent l'appartenacne à quel groupe ? # Quels droits donnent l'appartenacne à quel groupe ?
groupes = { 'adm' : [ u'Nounou' ] , groupes = { 'adm' : [ u'Nounou' ] ,
'respbats' : [ u'Câbleur' , u'Déconnecteur', u'Nounou' ] , 'respbats' : [ u'Câbleur' , u'Déconnecteur', u'Nounou' ] ,
'moderateurs' : [ u'Modérateur' ] , 'moderateurs' : [ u'Modérateur' ] ,
'disconnect' : [ u'Déconnecteur' ] , 'disconnect' : [ u'Déconnecteur' ] ,
'webcvs' : [ u'CVSWeb'] } 'webcvs' : [ u'CVSWeb'] }
####### Les ML ####### Les ML
# Le + devant un nom de ML indique une synchronisqtion # Le + devant un nom de ML indique une synchronisqtion
@ -42,95 +42,95 @@ class droits_ldap(crans_ldap,droits) :
# des abonnés si le droit est retiré # des abonnés si le droit est retiré
mailing_listes = { 'roots' : [ u'Nounou', u'Apprenti' ], mailing_listes = { 'roots' : [ u'Nounou', u'Apprenti' ],
'+nounou' : [ u'Nounou', u'Apprenti' ], '+nounou' : [ u'Nounou', u'Apprenti' ],
'respbats' : [ u'Câbleur', u'Nounou' ], 'respbats' : [ u'Câbleur', u'Nounou' ],
'+moderateurs' : [ u'Modérateur' ], '+moderateurs' : [ u'Modérateur' ],
'+disconnect' : [ u'Déconnecteur' ] } '+disconnect' : [ u'Déconnecteur' ] }
def build_group(self) : def build_group(self) :
""" Reconstruit les groupes dans la base LDAP """ """ Reconstruit les groupes dans la base LDAP """
self.anim.iter = len( self.groupes.keys() ) self.anim.iter = len( self.groupes.keys() )
for group, fonctions in self.groupes.items() : for group, fonctions in self.groupes.items() :
self.anim.cycle() self.anim.cycle()
# Qui doit être dans ce groupe ? # Qui doit être dans ce groupe ?
res = [] res = []
for f in fonctions : for f in fonctions :
res += self.search('droits=%s' % f)['adherent'] res += self.search('droits=%s' % f)['adherent']
# Récupération de la constitution du groupe actuel # Récupération de la constitution du groupe actuel
dn = 'cn=%s,%s' % (group, self.base_group_dn) dn = 'cn=%s,%s' % (group, self.base_group_dn)
data = self.conn.search_s(dn ,0,'objectClass=posixGroup')[0][1] data = self.conn.search_s(dn ,0,'objectClass=posixGroup')[0][1]
init_data = data.copy() init_data = data.copy()
# Supression de tout les membres # Supression de tout les membres
data['memberUid'] = [] data['memberUid'] = []
# Ajout des bonnes personnes # Ajout des bonnes personnes
for adher in res : for adher in res :
uid = preattr(adher.compte())[1] uid = preattr(adher.compte())[1]
if uid and uid not in data['memberUid'] : if uid and uid not in data['memberUid'] :
data['memberUid'].append(uid) data['memberUid'].append(uid)
# Sauvegarde # Sauvegarde
modlist = ldap.modlist.modifyModlist(init_data,data) modlist = ldap.modlist.modifyModlist(init_data,data)
self.conn.modify_s(dn,modlist) self.conn.modify_s(dn,modlist)
def print_liste(self,poste) : def print_liste(self,poste) :
""" Donne la liste des membres actifs """ """ Donne la liste des membres actifs """
for adh in self.search('droits=%s&chbre!=EXT' % poste)['adherent'] : for adh in self.search('droits=%s&chbre!=EXT' % poste)['adherent'] :
print "%s %s" % (adh.nom(), adh.prenom()) print "%s %s" % (adh.nom(), adh.prenom())
def sync_ML(self) : def sync_ML(self) :
self.anim.iter = len( self.mailing_listes.keys() ) self.anim.iter = len( self.mailing_listes.keys() )
for ML, fonctions in self.mailing_listes.items() : for ML, fonctions in self.mailing_listes.items() :
self.anim.cycle() self.anim.cycle()
if ML[0] == '+' : if ML[0] == '+' :
ML = ML[1:] ML = ML[1:]
only_add = 1 only_add = 1
else : else :
only_add = 0 only_add = 0
# Instance correspondant à la ML # Instance correspondant à la ML
mlist = MailList.MailList(ML) mlist = MailList.MailList(ML)
self.mlist_to_unlock = mlist self.mlist_to_unlock = mlist
# Qui doit être dans cette ML ? # Qui doit être dans cette ML ?
res = [] res = []
for f in fonctions : for f in fonctions :
res += self.search('droits=%s' % f)['adherent'] res += self.search('droits=%s' % f)['adherent']
# Liste des personnes déja inscrites # Liste des personnes déja inscrites
deja_inscrits = {} # { email en miniscules : email avec case n'importe comment } deja_inscrits = {} # { email en miniscules : email avec case n'importe comment }
for addr in mlist.getMemberCPAddresses(mlist.getMembers()): for addr in mlist.getMemberCPAddresses(mlist.getMembers()):
deja_inscrits[addr.lower()] = addr deja_inscrits[addr.lower()] = addr
# Mails à ajouter # Mails à ajouter
to_add = [] to_add = []
mail_traite = [] mail_traite = []
for adher in res : for adher in res :
mail = adher.mail().lower() mail = adher.mail().lower()
if mail in mail_traite : continue if mail in mail_traite : continue
mail_traite.append(mail) mail_traite.append(mail)
if mail.find('@') == -1 : mail += '@crans.org' if mail.find('@') == -1 : mail += '@crans.org'
if mail not in deja_inscrits.keys() : if mail not in deja_inscrits.keys() :
# Visiblement pas inscrit # Visiblement pas inscrit
to_add.append([ mail, adher.Nom() ]) to_add.append([ mail, adher.Nom() ])
else : else :
# L'adhérent est déja inscrit # L'adhérent est déja inscrit
deja_inscrits.pop(mail) deja_inscrits.pop(mail)
# Ajout # Ajout
for mail, nom in to_add : for mail, nom in to_add :
pw = Utils.MakeRandomPassword() pw = Utils.MakeRandomPassword()
userdesc = UserDesc( mail, nom, pw) userdesc = UserDesc( mail, nom, pw)
mlist.ApprovedAddMember(userdesc) mlist.ApprovedAddMember(userdesc)
if not only_add : if not only_add :
# Supression des personnes inscritees en trop # Supression des personnes inscritees en trop
for mail in deja_inscrits.values() : for mail in deja_inscrits.values() :
mlist.ApprovedDeleteMember(mail) mlist.ApprovedDeleteMember(mail)
mlist.Save() mlist.Save()
mlist.Unlock() mlist.Unlock()
self.mlist_to_unlock = None self.mlist_to_unlock = None
def gen_conf(self) : def gen_conf(self) :
self.anim = anim('\tconfiguration groupes') self.anim = anim('\tconfiguration groupes')
@ -170,10 +170,10 @@ class droits_openbsd(droits) :
""" """
master = "" master = ""
group = "wheel:*:0:root" group = "wheel:*:0:root"
self.anim.iter = 2 self.anim.iter = 2
for fonction in ("Nounou", "Apprenti"): for fonction in ("Nounou", "Apprenti"):
self.anim.cycle() self.anim.cycle()
# Qui doit être dans ce groupe ? # Qui doit être dans ce groupe ?
res = crans_ldap().search('droits=%s' % fonction)['adherent'] res = crans_ldap().search('droits=%s' % fonction)['adherent']
for a in res: for a in res:
if fonction == "Nounou": if fonction == "Nounou":
@ -234,13 +234,13 @@ class droits_openbsd(droits) :
if __name__ == '__main__' : if __name__ == '__main__' :
if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 : if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 :
print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0] print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0]
print "Génération de la liste des personnes avec le(s) droit(s) donné(s)." print "Génération de la liste des personnes avec le(s) droit(s) donné(s)."
sys.exit(255) sys.exit(255)
cl = droits() cl = droits()
for arg in sys.argv[1:] : for arg in sys.argv[1:] :
titre = "%s : " % arg titre = "%s : " % arg
print titre print titre
print "-" * len (titre) print "-" * len (titre)
cl.print_liste(unicode(arg,'iso-8859-1')) cl.print_liste(unicode(arg,'iso-8859-1'))

View file

@ -25,25 +25,25 @@ class exemptions(gen_config) :
restart_cmd = "" restart_cmd = ""
def __str__ (self) : def __str__ (self) :
return "exemptions" return "exemptions"
def _gen (self) : def _gen (self) :
machines = crans_ldap().search('exempt=*')['machine'] machines = crans_ldap().search('exempt=*')['machine']
pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans') pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans')
curseur = pgsql.cursor() curseur = pgsql.cursor()
requete="DELETE FROM exemptes" requete="DELETE FROM exemptes"
curseur.execute(requete) curseur.execute(requete)
for couple in self.base : for couple in self.base :
requete="INSERT INTO exemptes (ip_crans,ip_dest) VALUES ('%s','%s')" % (couple[0],couple[1]) requete="INSERT INTO exemptes (ip_crans,ip_dest) VALUES ('%s','%s')" % (couple[0],couple[1])
curseur.execute(requete) curseur.execute(requete)
for machine in machines : for machine in machines :
for destination in machine.exempt() : for destination in machine.exempt() :
requete="INSERT INTO exemptes (ip_crans,ip_dest) VALUES ('%s','%s')" % (machine.ip(),destination) requete="INSERT INTO exemptes (ip_crans,ip_dest) VALUES ('%s','%s')" % (machine.ip(),destination)
curseur.execute(requete) curseur.execute(requete)
pgsql.commit() pgsql.commit()

View file

@ -44,23 +44,23 @@ class base_reconfigure :
if not to_do : if not to_do :
if debug : print 'Lecture services à redémarrer dans la base LDAP' if debug : print 'Lecture services à redémarrer dans la base LDAP'
auto = 1 auto = 1
to_do = {} to_do = {}
# Création de la liste de ce qu'il y a à faire # Création de la liste de ce qu'il y a à faire
for serv in db.services_to_restart() : for serv in db.services_to_restart() :
# Services spéciaux portant sur plusieurs machines # Services spéciaux portant sur plusieurs machines
to_add = self.__service_develop.get(serv.nom,[]) to_add = self.__service_develop.get(serv.nom,[])
if to_add : if to_add :
for nom in to_add : for nom in to_add :
for t in serv.start : for t in serv.start :
db.services_to_restart(nom,serv.args,t) db.services_to_restart(nom,serv.args,t)
if time() > t : if time() > t :
to_do[nom] = serv.args to_do[nom] = serv.args
db.services_to_restart('-' + serv.nom) db.services_to_restart('-' + serv.nom)
else : else :
for t in serv.start : for t in serv.start :
if time() > t : if time() > t :
to_do[serv.nom] = serv.args to_do[serv.nom] = serv.args
break break
else : else :
auto = 0 auto = 0
if debug : print 'Services à redémarrer imposés (non lecture de la base LDAP)' if debug : print 'Services à redémarrer imposés (non lecture de la base LDAP)'
@ -87,8 +87,8 @@ class base_reconfigure :
reste = db.services_to_restart() reste = db.services_to_restart()
if reste : if reste :
print "Reste à faire :" print "Reste à faire :"
for s in reste : for s in reste :
print '\t%s' % s print '\t%s' % s
else : else :
print "Plus rien à faire" print "Plus rien à faire"
@ -290,7 +290,7 @@ if __name__ == '__main__' :
elif opt == '--list' : elif opt == '--list' :
print 'Services à redémarrer :' print 'Services à redémarrer :'
for s in db.services_to_restart() : for s in db.services_to_restart() :
print '\t%s' % s print '\t%s' % s
sys.exit(0) sys.exit(0)
elif opt == '--reconnect' : elif opt == '--reconnect' :

View file

@ -15,30 +15,30 @@ class squid(gen_config) :
restart_cmd = '/etc/init.d/squid reload' restart_cmd = '/etc/init.d/squid reload'
def __str__(self) : def __str__(self) :
return str(self.__class__).replace('_','-').split('.')[2] return str(self.__class__).replace('_','-').split('.')[2]
def _gen(self) : def _gen(self) :
self._mklist() self._mklist()
def _mklist(self) : def _mklist(self) :
fic = self._open_conf(self.FICHIER) fic = self._open_conf(self.FICHIER)
# recherche_bl : # recherche_bl :
# 1 : search sur champ blacklist et clubs compris # 1 : search sur champ blacklist et clubs compris
# 0 : search plus général et clubs exclus # 0 : search plus général et clubs exclus
if self.recherche_bl==1: if self.recherche_bl==1:
liste = self.db.search("paiement=ok&blacklist=*%s*"%self.chaine) liste = self.db.search("paiement=ok&blacklist=*%s*"%self.chaine)
l_proprio = liste["adherent"]+liste["club"] l_proprio = liste["adherent"]+liste["club"]
else: else:
l_proprio = self.db.search('paiement=ok&' + self.chaine)["adherent"] l_proprio = self.db.search('paiement=ok&' + self.chaine)["adherent"]
self.anim.iter=len(l_proprio) self.anim.iter=len(l_proprio)
for proprio in l_proprio : for proprio in l_proprio :
self.anim.cycle() self.anim.cycle()
if self.recherche_bl==0 or self.chaine in proprio.blacklist_actif(): if self.recherche_bl==0 or self.chaine in proprio.blacklist_actif():
# Pas la peine de renvoyer les machines complètement bloqués # Pas la peine de renvoyer les machines complètement bloqués
for m in proprio.machines(): for m in proprio.machines():
if not 'bloq' in m.blacklist_actif(): if not 'bloq' in m.blacklist_actif():
fic.write(m.Nom()+'\n') fic.write(m.Nom()+'\n')
fic.close() fic.close()
class squid_upload(squid) : class squid_upload(squid) :
@ -66,17 +66,17 @@ class squid_carte(squid) :
recherche_bl = 0 recherche_bl = 0
if not bl_carte_et_actif : if not bl_carte_et_actif :
# Inutile de relancer squid si la blacklist n'est pas activée # Inutile de relancer squid si la blacklist n'est pas activée
restart_cmd = '' restart_cmd = ''
def _gen(self) : def _gen(self) :
# Liste vide si la blacklist n'est pas activée # Liste vide si la blacklist n'est pas activée
if not bl_carte_et_actif : if not bl_carte_et_actif :
fic = self._open_conf(self.FICHIER) fic = self._open_conf(self.FICHIER)
# on vide la blackliste # on vide la blackliste
fic.close() fic.close()
return return
self._mklist() self._mklist()
class squid_chbre(squid) : class squid_chbre(squid) :
""" Genère le fichier blacklist-chbre pour squid """ """ Genère le fichier blacklist-chbre pour squid """

View file

@ -170,164 +170,164 @@ class autostatus(gen_config) :
# FIN DE LA CONFIGURATION # FIN DE LA CONFIGURATION
def __str__ (self) : def __str__ (self) :
return "autostatus" return "autostatus"
def make_config (self, dico ) : def make_config (self, dico ) :
""" """
Transforme le dico en suite lignes de configuration Transforme le dico en suite lignes de configuration
""" """
liste = dico.keys() liste = dico.keys()
liste.sort() liste.sort()
append = "" append = ""
for i in liste : for i in liste :
append = append + " ".join( dico[i] ) + "\n" append = append + " ".join( dico[i] ) + "\n"
return append.encode('iso-8859-15') return append.encode('iso-8859-15')
def mail_contact (self, nom) : def mail_contact (self, nom) :
# retourne le mail à qui envoyer les avis pour un serveur # retourne le mail à qui envoyer les avis pour un serveur
if nom in self.contact.keys() : if nom in self.contact.keys() :
return self.contact[nom] return self.contact[nom]
else : else :
return 'nobody' return 'nobody'
def _gen (self) : def _gen (self) :
# machines crans # machines crans
################ ################
machines = crans().machines() machines = crans().machines()
# tri des machines par type # tri des machines par type
bornes = {} bornes = {}
switchs = {} switchs = {}
serveurs = {} serveurs = {}
ferme = {} ferme = {}
# tri des machines # tri des machines
for m in machines : for m in machines :
# machine exclue # machine exclue
if m.nom() in self.exclude : if m.nom() in self.exclude :
continue continue
# les bornes # les bornes
if m.canal() : if m.canal() :
# C'est une borne # C'est une borne
if m.info() : if m.info() :
# on regarde si c'est une borne de batiment # on regarde si c'est une borne de batiment
if ( m.info()[0][0:3] == "Au " ) and ( len(m.info()[0]) == 5 ) : if ( m.info()[0][0:3] == "Au " ) and ( len(m.info()[0]) == 5 ) :
bornes[ "1-" + m.info()[0][4]+m.info()[0][3] + "-" + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] bornes[ "1-" + m.info()[0][4]+m.info()[0][3] + "-" + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
else : else :
bornes[ "2-" + m.info()[0] + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] bornes[ "2-" + m.info()[0] + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
else : else :
# on met les bornes non définies à la fin (ordre alphabétique) # on met les bornes non définies à la fin (ordre alphabétique)
bornes[ "3-" + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Inutilise' ] bornes[ "3-" + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Inutilise' ]
# les switchs # les switchs
elif m.info() and 'switch' in m.info()[0].lower() : elif m.info() and 'switch' in m.info()[0].lower() :
# est ce que c'est un batiment # est ce que c'est un batiment
if 'bat' == m.nom()[0:3] : if 'bat' == m.nom()[0:3] :
index = '1-' + m.nom().split(".")[0] index = '1-' + m.nom().split(".")[0]
else : else :
index = '0-' + m.nom().split(".")[0] index = '0-' + m.nom().split(".")[0]
# on ajoute au dictionnaire # on ajoute au dictionnaire
switchs[ index ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] switchs[ index ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
# la ferme # la ferme
elif '.ferme.crans.org' in m.nom() : elif '.ferme.crans.org' in m.nom() :
nom = ".".join(m.nom().split(".")[0:2]) nom = ".".join(m.nom().split(".")[0:2])
if m.info() : if m.info() :
ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
else : else :
ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ] ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ]
# les serveurs # les serveurs
else : else :
if ".wifi.crans.org" in m.nom() : if ".wifi.crans.org" in m.nom() :
nom = m.nom().split(".")[0] + ".wifi" nom = m.nom().split(".")[0] + ".wifi"
else : else :
nom = m.nom().split(".")[0] nom = m.nom().split(".")[0]
if m.info() : if m.info() :
serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
else : else :
serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ] serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ]
# route vers l'extérieur # route vers l'extérieur
######################## ########################
# on récupère la route vers l'extérieur # on récupère la route vers l'extérieur
traceroute = commands.getoutput("/usr/bin/traceroute www.free.fr 2> /dev/null | sed 's/\*//g' | sed 's/ */ /g' | sed 's/^ //g' | sed 's/[(,)]//g' | cut -d ' ' -f 2,3").split("\n") traceroute = commands.getoutput("/usr/bin/traceroute www.free.fr 2> /dev/null | sed 's/\*//g' | sed 's/ */ /g' | sed 's/^ //g' | sed 's/[(,)]//g' | cut -d ' ' -f 2,3").split("\n")
# initialisation des variables # initialisation des variables
in_renater = 0 in_renater = 0
route_to_ext = '' route_to_ext = ''
depends_to_ext = '' depends_to_ext = ''
for routeur in traceroute : for routeur in traceroute :
# on commence à rentrer dans la chaine des routeurs renater # on commence à rentrer dans la chaine des routeurs renater
if 'renater.fr' in routeur : if 'renater.fr' in routeur :
in_renater = 1 in_renater = 1
# on est plus dans les routeurs renater donc on arrête # on est plus dans les routeurs renater donc on arrête
if in_renater and not 'renater.fr' in routeur : if in_renater and not 'renater.fr' in routeur :
continue continue
# ajout du routeur # ajout du routeur
# ip # ip
tmp_ip = routeur.split(' ')[1] tmp_ip = routeur.split(' ')[1]
# nom & desciption # nom & desciption
if routeur.split(' ')[1] in self.infos_routeurs.keys() : if routeur.split(' ')[1] in self.infos_routeurs.keys() :
tmp_name = self.infos_routeurs[tmp_ip][0] tmp_name = self.infos_routeurs[tmp_ip][0]
tmp_desc = self.infos_routeurs[tmp_ip][1] tmp_desc = self.infos_routeurs[tmp_ip][1]
else : else :
tmp_name = routeur.split(' ')[0].split('.')[0] tmp_name = routeur.split(' ')[0].split('.')[0]
tmp_desc = 'Pas de description' tmp_desc = 'Pas de description'
# dépendances # dépendances
if not depends_to_ext : if not depends_to_ext :
tmp_depends = 'none' tmp_depends = 'none'
depends_to_ext = tmp_name depends_to_ext = tmp_name
else : else :
tmp_depends = depends_to_ext tmp_depends = depends_to_ext
depends_to_ext += ',' + tmp_name depends_to_ext += ',' + tmp_name
# on l'ajoute à la route # on l'ajoute à la route
if route_to_ext : if route_to_ext :
route_to_ext += '\n' route_to_ext += '\n'
route_to_ext += '%s %s %s %s %s' % (tmp_name, tmp_ip, tmp_depends,self.mail_contact(tmp_name),tmp_desc) route_to_ext += '%s %s %s %s %s' % (tmp_name, tmp_ip, tmp_depends,self.mail_contact(tmp_name),tmp_desc)
# services extérieurs # services extérieurs
##################### #####################
services_exterieurs = {} services_exterieurs = {}
for key in self.services_exterieurs.keys() : for key in self.services_exterieurs.keys() :
s = self.services_exterieurs[key] s = self.services_exterieurs[key]
if s[2] : if s[2] :
services_exterieurs[ key ] = [ s[0] + ':' + str(s[2]), s[1] , depends_to_ext, s[4] , s[3] ] services_exterieurs[ key ] = [ s[0] + ':' + str(s[2]), s[1] , depends_to_ext, s[4] , s[3] ]
else : else :
services_exterieurs[ key ] = [ s[0] , s[1] , depends_to_ext, s[4] , s[3] ] services_exterieurs[ key ] = [ s[0] , s[1] , depends_to_ext, s[4] , s[3] ]
# génération du fichier # génération du fichier
####################### #######################
file = self._open_conf(self.CONFFILE, "#") file = self._open_conf(self.CONFFILE, "#")
# génère le dictionnaire pour les modifications # génère le dictionnaire pour les modifications
dico = {} dico = {}
dico['switchs'] = self.make_config(switchs) dico['switchs'] = self.make_config(switchs)
dico['bornes'] = self.make_config(bornes) dico['bornes'] = self.make_config(bornes)
dico['serveurs'] = self.make_config(serveurs) dico['serveurs'] = self.make_config(serveurs)
dico['ferme'] = self.make_config(ferme) dico['ferme'] = self.make_config(ferme)
dico['route'] = route_to_ext.encode('iso-8859-15') dico['route'] = route_to_ext.encode('iso-8859-15')
dico['exterieur'] = self.make_config(services_exterieurs) dico['exterieur'] = self.make_config(services_exterieurs)
# on écrit dans le fichier de configuration # on écrit dans le fichier de configuration
file.write( self.matrice % dico ) file.write( self.matrice % dico )
# on ferme le fichier # on ferme le fichier
file.close() file.close()

View file

@ -6,12 +6,12 @@
argument : nom du switch argument : nom du switch
procédure de configuration initiale : procédure de configuration initiale :
* mot de passe admin (password manager user-name <username>) * mot de passe admin (password manager user-name <username>)
* upgrade firmware (copy tftp flash 138.231.136.7 <file>) * upgrade firmware (copy tftp flash 138.231.136.7 <file>)
* reboot (boot) * reboot (boot)
* génération clef ssh (crypto key generate ssh) * génération clef ssh (crypto key generate ssh)
* copie fichier de conf (copy tftp startup-config 138.231.136.7 <file>) * copie fichier de conf (copy tftp startup-config 138.231.136.7 <file>)
* faire le stacking et le snmpv3 à la main * faire le stacking et le snmpv3 à la main
pour les reconfiguration juste copier le fichier de conf pour les reconfiguration juste copier le fichier de conf
""" """
@ -116,153 +116,153 @@ exit
rad_template = "radius-server host %s\n" rad_template = "radius-server host %s\n"
def __init__(self,truc): def __init__(self,truc):
""" truc est soit : """ truc est soit :
* une _liste_ de chambres => reconfig de ces chambres * une _liste_ de chambres => reconfig de ces chambres
* un _tulpe_ de noms de switch => reconfig de ces swiths""" * un _tulpe_ de noms de switch => reconfig de ces swiths"""
self.db = crans_ldap() # connexion LDAP self.db = crans_ldap() # connexion LDAP
if type(truc) == list : if type(truc) == list :
# On enlève les chambres "CRA", "????" et EXT qui n'ont pas besion de config # On enlève les chambres "CRA", "????" et EXT qui n'ont pas besion de config
self.chbres = [ch for ch in truc if (ch not in [ "CRA", "????", "EXT" ]) ] self.chbres = [ch for ch in truc if (ch not in [ "CRA", "????", "EXT" ]) ]
self.switch = None self.switch = None
else : else :
self.chbres = None self.chbres = None
self.switch = truc self.switch = truc
def __str__(self) : def __str__(self) :
return 'switchs' return 'switchs'
def restart(self) : def restart(self) :
if self.chbre : if self.chbre :
# Tout est déja fait # Tout est déja fait
return return
####### Vu qu'il n'y a pas de serveur tftp ici ####### Vu qu'il n'y a pas de serveur tftp ici
# on excécute pas le truc en dessous # on excécute pas le truc en dessous
#for switch in self.switch : #for switch in self.switch :
# self.aff = anim('\treboot de %s' % switch) # self.aff = anim('\treboot de %s' % switch)
# sw = hptools.switch(switch) # sw = hptools.switch(switch)
# sw.update() # sw.update()
def gen_conf(self) : def gen_conf(self) :
if self.chbres : if self.chbres :
self.chbres.sort() self.chbres.sort()
for chbre in self.chbres : for chbre in self.chbres :
self.configure_chbre(chbre) self.configure_chbre(chbre)
elif self.switch : elif self.switch :
for switch in self.switch : for switch in self.switch :
self.configure_switch(switch) self.configure_switch(switch)
def configure_chbre(self,chbre) : def configure_chbre(self,chbre) :
""" Recontigure la chambre fournie chambre """ """ Recontigure la chambre fournie chambre """
try : try :
bat = chbre[0].lower() bat = chbre[0].lower()
if bat in bat_switchs : if bat in bat_switchs :
prise = sw_chbre(chbre) prise = sw_chbre(chbre)
prise.reconfigure() # Vitesse et nom (juste au cas ou ca aurait changé) prise.reconfigure() # Vitesse et nom (juste au cas ou ca aurait changé)
elif bat in bat_manuels : elif bat in bat_manuels :
class prise_non_manageable : class prise_non_manageable :
def __init__(self,chbre) : def __init__(self,chbre) :
self.chbre = chbre self.chbre = chbre
def __mail(self,sujet) : def __mail(self,sujet) :
To = "clef%s@crans.org" % self.chbre[0].lower() To = "clef%s@crans.org" % self.chbre[0].lower()
From = To From = To
conn=smtplib.SMTP('localhost') conn=smtplib.SMTP('localhost')
txt_mail = "From: Crans scripts <%(From)s>\n" txt_mail = "From: Crans scripts <%(From)s>\n"
txt_mail+= "To: %(To)s\n" txt_mail+= "To: %(To)s\n"
txt_mail+= "Subject: (CRANS) %s\n\nMerci." % sujet txt_mail+= "Subject: (CRANS) %s\n\nMerci." % sujet
conn.sendmail(From, To , txt_mail % { 'From' : From, 'To' : To }) conn.sendmail(From, To , txt_mail % { 'From' : From, 'To' : To })
conn.quit() conn.quit()
def disable(self) : def disable(self) :
self.__mail("Chambre %s à débrancher." % self.chbre) self.__mail("Chambre %s à débrancher." % self.chbre)
def enable(self) : def enable(self) :
self.__mail("Chambre %s à brancher." % self.chbre) self.__mail("Chambre %s à brancher." % self.chbre)
prise=prise_non_manageable(chbre) prise=prise_non_manageable(chbre)
else : else :
# Rien a faire # Rien a faire
print OK print OK
return True return True
a = self.db.search('chbre=%s&paiement=ok' % chbre) a = self.db.search('chbre=%s&paiement=ok' % chbre)
a = a['adherent'] + a['club'] a = a['adherent'] + a['club']
if a and 'bloq' not in a[0].blacklist_actif() : if a and 'bloq' not in a[0].blacklist_actif() :
# Il faut activer la prise # Il faut activer la prise
anim('\tactivation chbre %s' % chbre) anim('\tactivation chbre %s' % chbre)
prise.enable() prise.enable()
else : else :
# Il faut désactiver la prise # Il faut désactiver la prise
anim('\tdésactivation chbre %s' % chbre) anim('\tdésactivation chbre %s' % chbre)
prise.disable() prise.disable()
print OK print OK
except : except :
print ERREUR print ERREUR
if self.debug : if self.debug :
import traceback import traceback
traceback.print_exc() traceback.print_exc()
return False return False
return True return True
def configure_switch(self,switch) : def configure_switch(self,switch) :
self.aff = anim('\tconfiguration de %s' % switch) self.aff = anim('\tconfiguration de %s' % switch)
try: try:
warn = self.__configure_switch(switch) warn = self.__configure_switch(switch)
self.aff.reinit() self.aff.reinit()
if warn : if warn :
print WARNING print WARNING
if self.debug : if self.debug :
sys.stderr.write(warn) sys.stderr.write(warn)
else : else :
print OK print OK
except : except :
self.aff.reinit() self.aff.reinit()
print ERREUR print ERREUR
self._restore() self._restore()
return 1 return 1
def __configure_switch(self,switch) : def __configure_switch(self,switch) :
""" Génère le fichier de conf du switch donné """ """ Génère le fichier de conf du switch donné """
conn = hpswitch(switch) conn = hpswitch(switch)
### Récupération données du switch ### Récupération données du switch
# Batiment et num-Aéro du switch-b # Batiment et num-Aéro du switch-b
bat = switch[3].lower() bat = switch[3].lower()
sw_num = int(switch[5]) sw_num = int(switch[5])
# Conf radius # Conf radius
from secrets import radius_key from secrets import radius_key
shuffle(self.rad_servs) shuffle(self.rad_servs)
rad = self.rad_template * len(self.rad_servs) rad = self.rad_template * len(self.rad_servs)
params = { 'switch' : switch, 'bat' : bat.upper() , params = { 'switch' : switch, 'bat' : bat.upper() ,
'radius_key' : radius_key , 'radius_key' : radius_key ,
'radius-serveurs' : rad[:-1] % tuple(self.rad_servs)} 'radius-serveurs' : rad[:-1] % tuple(self.rad_servs)}
# Nombre de prises et modèle # Nombre de prises et modèle
nb_prises = conn.nb_prises() nb_prises = conn.nb_prises()
modele = conn.version() modele = conn.version()
if not nb_prises or not modele : if not nb_prises or not modele :
raise RuntimeError("Erreur : impossible de déterminer les caractéristiques du switch.") raise RuntimeError("Erreur : impossible de déterminer les caractéristiques du switch.")
params['modele'] = modele.split()[1] params['modele'] = modele.split()[1]
# IP # IP
params['ip'] = commands.getoutput("host %s" % switch).split()[-1] params['ip'] = commands.getoutput("host %s" % switch).split()[-1]
### Configuration prises ### Configuration prises
params['INTERFACES_CONF'] = '' params['INTERFACES_CONF'] = ''
# Dictionnaire prise -> chambre # Dictionnaire prise -> chambre
prise_chbres = reverse(bat) prise_chbres = reverse(bat)
# Prises occupées par des machines du Cr@ns # Prises occupées par des machines du Cr@ns
crans_prises={} crans_prises={}
for m in self.db.search('prise=%s%i*' % (bat.upper(), sw_num))['machine'] : for m in self.db.search('prise=%s%i*' % (bat.upper(), sw_num))['machine'] :
try: crans_prises[m.prise()].append(m) try: crans_prises[m.prise()].append(m)
except: crans_prises[m.prise()] = [ m ] except: crans_prises[m.prise()] = [ m ]
self.aff.iter = nb_prises+1 self.aff.iter = nb_prises+1
# Param-Aètres à affecter-b # Param-Aètres à affecter-b
for key in ( 'uplinks', 'non_uplinks', 'prises_filtrage_mac' ) : for key in ( 'uplinks', 'non_uplinks', 'prises_filtrage_mac' ) :
@ -273,17 +273,17 @@ exit
'default_tagged' : [] , 'default_untagged' : [] } 'default_tagged' : [] , 'default_untagged' : [] }
# G-Aénération de la conf de chaque prise-b # G-Aénération de la conf de chaque prise-b
for prise in range(1,nb_prises+1): for prise in range(1,nb_prises+1):
self.aff.cycle() self.aff.cycle()
# Conf par d-Aéfaut : activée, autonégociation-b # Conf par d-Aéfaut : activée, autonégociation-b
prise_params = { 'prise' : prise , 'speed' : '', 'etat' : '' } prise_params = { 'prise' : prise , 'speed' : '', 'etat' : '' }
annu_prise = '%i%02i' % (sw_num, prise) # prise telle que notée dans l'annuaire annu_prise = '%i%02i' % (sw_num, prise) # prise telle que notée dans l'annuaire
if uplink_prises[bat].has_key(int(annu_prise)) : if uplink_prises[bat].has_key(int(annu_prise)) :
### Prise d'uplink ### Prise d'uplink
prise_params['nom'] = uplink_prises[bat][int(annu_prise)] prise_params['nom'] = uplink_prises[bat][int(annu_prise)]
params['uplinks'].append(prise) params['uplinks'].append(prise)
vlans['default_untagged'].append(prise) vlans['default_untagged'].append(prise)
vlans['adm_tagged'].append(prise) vlans['adm_tagged'].append(prise)
vlans['wifi_tagged'].append(prise) vlans['wifi_tagged'].append(prise)
@ -292,31 +292,31 @@ exit
params['non_uplinks'].append(prise) params['non_uplinks'].append(prise)
if crans_prises.has_key("%s%s" % (bat.upper(), annu_prise)) : if crans_prises.has_key("%s%s" % (bat.upper(), annu_prise)) :
### Prise réservée à l'association ### Prise réservée à l'association
wifi=0 wifi=0
adm=0 adm=0
autres=0 autres=0
for m in crans_prises["%s%s" % (bat.upper(), annu_prise)] : for m in crans_prises["%s%s" % (bat.upper(), annu_prise)] :
if m.canal() : wifi+=1 if m.canal() : wifi+=1
elif m.Nom().find('.adm.crans.org')!=-1 : adm+=1 elif m.Nom().find('.adm.crans.org')!=-1 : adm+=1
else : autres+=1 else : autres+=1
if autres==0 and adm==0 : if autres==0 and adm==0 :
# Vlan wifi uniquement # Vlan wifi uniquement
if wifi == 1 : if wifi == 1 :
prise_params['nom'] = "Wifi_%s" % m.nom().split(".")[0] prise_params['nom'] = "Wifi_%s" % m.nom().split(".")[0]
else : else :
prise_params['nom'] = "Wifi" prise_params['nom'] = "Wifi"
vlans['wifi_untagged'].append(prise) vlans['wifi_untagged'].append(prise)
elif wifi==0 and autres==0 : elif wifi==0 and autres==0 :
# Vlan adm uniquement # Vlan adm uniquement
if amd == 1 : if amd == 1 :
prise_params['nom'] = m.nom().split(".")[0] prise_params['nom'] = m.nom().split(".")[0]
else : else :
prise_params['nom'] = "Uplink_adm" prise_params['nom'] = "Uplink_adm"
vlans['adm_untagged'].append(prise) vlans['adm_untagged'].append(prise)
else : else :
# Tous les vlans # Tous les vlans
prise_params['nom'] = "Prise_crans" prise_params['nom'] = "Prise_crans"
vlans['default_untagged'].append(prise) vlans['default_untagged'].append(prise)
vlans['adm_tagged'].append(prise) vlans['adm_tagged'].append(prise)
@ -337,7 +337,7 @@ exit
# Prise non référencée dans l'annuaire # Prise non référencée dans l'annuaire
prise_params['nom'] = "Pas_dans_l'annuaire" prise_params['nom'] = "Pas_dans_l'annuaire"
prise_params['etat']='\n disable' prise_params['etat']='\n disable'
params['INTERFACES_CONF'] += self.interface_template % prise_params params['INTERFACES_CONF'] += self.interface_template % prise_params
continue continue
params['prises_filtrage_mac'].append(prise) params['prises_filtrage_mac'].append(prise)
@ -358,48 +358,48 @@ exit
prise_params['etat']='' prise_params['etat']=''
break break
params['INTERFACES_CONF'] += self.interface_template % prise_params params['INTERFACES_CONF'] += self.interface_template % prise_params
# Petite verif # Petite verif
if not params['uplinks'] or not params['non_uplinks'] : if not params['uplinks'] or not params['non_uplinks'] :
raise RuntimeError('Switch sans uplink ou sans prise adhérent.') raise RuntimeError('Switch sans uplink ou sans prise adhérent.')
def mk_list(liste_prise) : def mk_list(liste_prise) :
""" """
transforme une liste de prises en une chaine pour le switch transforme une liste de prises en une chaine pour le switch
exemple : 1, 3, 4, 5, 6, 7, 9, 10, 11, 12 => 1,3-7,9-12 exemple : 1, 3, 4, 5, 6, 7, 9, 10, 11, 12 => 1,3-7,9-12
""" """
if not liste_prise : return '' if not liste_prise : return ''
liste_prise.sort() liste_prise.sort()
# initialisation # initialisation
i = liste_prise.pop(0) i = liste_prise.pop(0)
groupe = [ i, i ] groupe = [ i, i ]
result = [] result = []
liste_prise.append(9999) # apparaitra jamais dans la liste liste_prise.append(9999) # apparaitra jamais dans la liste
while liste_prise : while liste_prise :
nouveau = liste_prise.pop(0) nouveau = liste_prise.pop(0)
if nouveau == groupe[1] + 1 : if nouveau == groupe[1] + 1 :
groupe[1] += 1 groupe[1] += 1
else : else :
# Ajout du groupe au résultat # Ajout du groupe au résultat
if groupe[0] == groupe[1] : if groupe[0] == groupe[1] :
result.append(str(groupe[0])) result.append(str(groupe[0]))
else : else :
result.append('-'.join(map(str,groupe))) result.append('-'.join(map(str,groupe)))
# Réinit de groupe # Réinit de groupe
groupe = [ nouveau, nouveau ] groupe = [ nouveau, nouveau ]
return ','.join(result) return ','.join(result)
# Saut de ligne parasite # Saut de ligne parasite
params['INTERFACES_CONF'] = params['INTERFACES_CONF'][:-1] params['INTERFACES_CONF'] = params['INTERFACES_CONF'][:-1]
# Conversion des listes # Conversion des listes
for key in [ 'prises_filtrage_mac', 'uplinks', 'non_uplinks' ] : for key in [ 'prises_filtrage_mac', 'uplinks', 'non_uplinks' ] :
params[key] = mk_list(params[key]) params[key] = mk_list(params[key])
for key, prises in vlans.items() : for key, prises in vlans.items() :
vlans[key]=mk_list(prises) vlans[key]=mk_list(prises)
@ -414,19 +414,19 @@ exit
# Ecriture # Ecriture
fd = self._open_conf(self.CONF_REP + switch + '.conf') fd = self._open_conf(self.CONF_REP + switch + '.conf')
fd.write(self.config % params) fd.write(self.config % params)
fd.close() fd.close()
if __name__ == '__main__' : if __name__ == '__main__' :
if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 : if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 :
print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0] print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0]
print "Génération du fichier de configuration des switchs donnés." print "Génération du fichier de configuration des switchs donnés."
sys.exit(255) sys.exit(255)
if sys.argv[1] == 'all' : if sys.argv[1] == 'all' :
switchs = all_switchs() switchs = all_switchs()
else : else :
switchs = tuple(sys.argv[1:]) switchs = tuple(sys.argv[1:])
sw = switch(switchs) sw = switch(switchs)
sw.debug = 1 sw.debug = 1
sw.reconfigure() sw.reconfigure()

View file

@ -49,11 +49,11 @@ class conf_wifi_ng(gen_config) :
invite().machines() invite().machines()
bornes = self.db.search('host=*.wifi.crans.org&ipsec!=*')['machine'] bornes = self.db.search('host=*.wifi.crans.org&ipsec!=*')['machine']
print OK print OK
self.gen_isakmpd(clients) self.gen_isakmpd(clients)
self.gen_macip(clients, bornes) self.gen_macip(clients, bornes)
self.gen_bornes(bornes) self.gen_bornes(bornes)
self.anim=anim('\tfin reconfigurations') self.anim=anim('\tfin reconfigurations')
def gen_bornes(self, bornes): def gen_bornes(self, bornes):
"""Génération de la configuration des bornes""" """Génération de la configuration des bornes"""
@ -64,7 +64,7 @@ class conf_wifi_ng(gen_config) :
COMMON = "%s/common" % ROOT COMMON = "%s/common" % ROOT
DEFAULT = "%s/default" % ROOT DEFAULT = "%s/default" % ROOT
for borne in bornes: for borne in bornes:
self.anim=anim('\treconfiguration de %s' % borne.nom()) self.anim=anim('\treconfiguration de %s' % borne.nom())
# Il s'agit de faire l'union du répertoire common et du # Il s'agit de faire l'union du répertoire common et du
# répertoire propre (s'il existe) ou alors du répertoire default # répertoire propre (s'il existe) ou alors du répertoire default
# On supprime le répertoire de travail # On supprime le répertoire de travail
@ -134,7 +134,7 @@ NVRAM_wl0_radio=%(ON)d
self.anim.cycle() self.anim.cycle()
if 'bloq' in machine.blacklist_actif() : continue if 'bloq' in machine.blacklist_actif() : continue
fd.write("%s %s\n" % (machine.mac(), machine.ip())) fd.write("%s %s\n" % (machine.mac(), machine.ip()))
self.anim.reinit() self.anim.reinit()
print OK print OK
def gen_isakmpd(self, clients): def gen_isakmpd(self, clients):
@ -240,5 +240,5 @@ Netmask= 0.0.0.0
fd.write(blocs) fd.write(blocs)
fd.write(net_crans) fd.write(net_crans)
fd.close() fd.close()
self.anim.reinit() self.anim.reinit()
print OK print OK

View file

@ -395,27 +395,27 @@ if __name__ == '__main__' :
print "Usage : %s [[-c commande1] -c commande2...] [-U firmware] regex " print "Usage : %s [[-c commande1] -c commande2...] [-U firmware] regex "
print "Envoi les commandes données au switchs matchant la regex" print "Envoi les commandes données au switchs matchant la regex"
print "si aucune commande est founie lit l'entree standart" print "si aucune commande est founie lit l'entree standart"
print "L'envoi de firmware ne fait pas rebooter le switch" print "L'envoi de firmware ne fait pas rebooter le switch"
sys.exit(0) sys.exit(0)
elif opt=='-c' : elif opt=='-c' :
cmds.append(val) cmds.append(val)
elif opt=='-U' : elif opt=='-U' :
firmware=val firmware=val
# Quels switchs ? # Quels switchs ?
switchs=[] switchs=[]
if arg : if arg :
re=sre.compile(arg[0]) re=sre.compile(arg[0])
for sw in all_switchs() : for sw in all_switchs() :
if re.match(sw) : if re.match(sw) :
switchs.append(sw) switchs.append(sw)
if not switchs : if not switchs :
print "Aucun switch trouvé" print "Aucun switch trouvé"
print "Note : il faut une _regex_ (!= wilcards au sens du shell)" print "Note : il faut une _regex_ (!= wilcards au sens du shell)"
sys.exit(3) sys.exit(3)
if not cmds and not firmware : if not cmds and not firmware :
cmds=map(str.strip,sys.stdin.readlines()) cmds=map(str.strip,sys.stdin.readlines())
@ -429,11 +429,11 @@ if __name__ == '__main__' :
for sw in switchs : for sw in switchs :
print sw print sw
try: try:
# Au cas ou le switch ne répondrai pas # Au cas ou le switch ne répondrai pas
s = hpswitch(sw) s = hpswitch(sw)
if firmware : if firmware :
s.upgrade(firmware) s.upgrade(firmware)
for cmd in cmds : for cmd in cmds :
print s.send_cmd(cmd) print s.send_cmd(cmd)
except : except :

View file

@ -185,16 +185,16 @@ def format_mac(mac) :
class service : class service :
""" Défini un service à redémarrer """ """ Défini 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
liste d'horaires de démarages """ liste d'horaires de démarages """
self.nom=nom self.nom=nom
self.args=args self.args=args
self.start=map(int,start) self.start=map(int,start)
def __str__(self) : def __str__(self) :
return "%s(%s) à partir du %s" % (self.nom, \ return "%s(%s) à partir du %s" % (self.nom, \
','.join(self.args), \ ','.join(self.args), \
' et '.join(map(lambda t:time.strftime(date_format,time.gmtime(t)), self.start))) ' et '.join(map(lambda t:time.strftime(date_format,time.gmtime(t)), self.start)))
class crans_ldap : class crans_ldap :
@ -234,9 +234,9 @@ class crans_ldap :
def __del__(self) : def __del__(self) :
# Destruction des locks résiduels # Destruction des locks résiduels
if hasattr(self,'_locks') : if hasattr(self,'_locks') :
for lock in self._locks : for lock in self._locks :
self.remove_lock(lock) self.remove_lock(lock)
def connect(self): def connect(self):
""" Initialisation des connexion vers le serveur LDAP """ """ Initialisation des connexion vers le serveur LDAP """
@ -368,16 +368,16 @@ class crans_ldap :
if l != lockid : if l != lockid :
# C'est locké par un autre process que le notre # C'est locké par un autre process que le notre
# il tourne encore ? # il tourne encore ?
if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) : if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) :
# Il ne tourne plus # Il ne tourne plus
self.remove_lock(res[0]) # delock self.remove_lock(res[0]) # delock
return self.lock(item,valeur) # relock return self.lock(item,valeur) # relock
raise EnvironmentError(u'Objet (%s=%s) locké, patienter.' % (item, valeur), l) raise EnvironmentError(u'Objet (%s=%s) locké, patienter.' % (item, valeur), l)
else : else :
if not hasattr(self,'_locks') : if not hasattr(self,'_locks') :
self._locks = [lock_dn] self._locks = [lock_dn]
else : else :
self._locks.append(lock_dn) self._locks.append(lock_dn)
def remove_lock(self,lockdn) : def remove_lock(self,lockdn) :
""" Destruction d'un lock """ Destruction d'un lock
@ -385,11 +385,11 @@ class crans_ldap :
# Mettre des verifs ? # Mettre des verifs ?
if lockdn!='*' : if lockdn!='*' :
self.conn.delete_s(lockdn) self.conn.delete_s(lockdn)
try: try:
self._locks.remove(lockdn) self._locks.remove(lockdn)
except: except:
# Pas grave si ca foire, le lock n'y est plus # Pas grave si ca foire, le lock n'y est plus
pass pass
else : else :
locks = self.list_locks() locks = self.list_locks()
for l in locks : for l in locks :
@ -403,78 +403,78 @@ class crans_ldap :
""" Si new = None retourne la liste des services à redémarrer """ Si new = None retourne la liste des services à redémarrer
Si new est fourni et ne commence pas par - ajoute le service à la liste Si new est fourni et ne commence pas par - ajoute le service à la liste
avec les arguments args (args doit être une liste). avec les arguments args (args doit être une liste).
start indique la date (secondes depuis epoch) à partir du moment ou start indique la date (secondes depuis epoch) à partir du moment ou
cette action doit être effectué cette action doit être effectué
Si new commence par - supprime le service si son start est plus vieux que maintenant Si new commence par - supprime le service si son start est plus vieux que maintenant
Si new commence par -- supprime dans condition. Si new commence par -- supprime dans condition.
""" """
if new : new = preattr(new)[1] if new : new = preattr(new)[1]
# Quels services sont déjà à redémarrer ? # Quels services sont déjà à redémarrer ?
serv = {} # { service : [ arguments ] } serv = {} # { service : [ arguments ] }
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',[])))
# Retourne la liste des services à redémarrer # Retourne la liste des services à redémarrer
if not new : return services if not new : return services
# Effacement d'un service # Effacement d'un service
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() < int(date) : if time.time() < 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 :
# Supression # Supression
try : self.conn.delete_s(remove_dn) try : self.conn.delete_s(remove_dn)
except : pass except : pass
# Si n'existe pas => Erreur mais le résultat est la. # Si n'existe pas => Erreur mais le résultat est la.
return return
serv_dn = 'cn=%s,%s' % ( new, self.base_services ) serv_dn = 'cn=%s,%s' % ( new, self.base_services )
# 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 = []
new_args = [] new_args = []
# Nouveaux arguments ? # Nouveaux arguments ?
for arg in args : for arg in args :
if arg not in serv[new] : if arg not in serv[new] :
new_args.append(arg) new_args.append(arg)
if new_args : if new_args :
modlist += ldap.modlist.modifyModlist({ 'args' : serv[new]}, { 'args' : serv[new] + new_args }) modlist += ldap.modlist.modifyModlist({ 'args' : serv[new]}, { 'args' : serv[new] + new_args })
new_date = [] new_date = []
# Nouvelle date ? # Nouvelle date ?
for date in start : for date in start :
if date not in serv_dates[new] : if date not in serv_dates[new] :
new_date.append(date) new_date.append(date)
if new_date : if new_date :
modlist += ldap.modlist.modifyModlist({'start' : serv_dates[new]}, { 'start' : serv_dates[new] + new_date }) modlist += ldap.modlist.modifyModlist({'start' : serv_dates[new]}, { 'start' : serv_dates[new] + new_date })
if modlist : if modlist :
try : try :
@ -484,11 +484,11 @@ class crans_ldap :
pass pass
# else rien à faire # else rien à faire
else : else :
# Entrée non présente -> ajout # Entrée non présente -> ajout
modlist = ldap.modlist.addModlist({ 'objectClass' : 'service' , modlist = ldap.modlist.addModlist({ 'objectClass' : 'service' ,
'cn' : new , 'cn' : new ,
'args' : args , 'args' : args ,
'start' : start } ) 'start' : start } )
try : try :
self.conn.add_s(serv_dn,modlist) self.conn.add_s(serv_dn,modlist)
except ldap.ALREADY_EXISTS : except ldap.ALREADY_EXISTS :
@ -533,8 +533,8 @@ class crans_ldap :
el = '(%s=%s*)' % ( champ, expr) el = '(%s=%s*)' % ( champ, expr)
elif champ == 'macAddress' : elif champ == 'macAddress' :
# Formatage adresse mac # Formatage adresse mac
try: el = '(macAddress=%s)' % format_mac(expr) try: el = '(macAddress=%s)' % format_mac(expr)
except : pass except : pass
elif champ == 'paiement' and expr == 'ok' : elif champ == 'paiement' and expr == 'ok' :
# Paiement donnant droit à une connexion maintenant ? # Paiement donnant droit à une connexion maintenant ?
# il doit avoir payé pour # il doit avoir payé pour
@ -620,14 +620,14 @@ class crans_ldap :
if not r['machine'] and not r['adherent'] and not r['club'] : if not r['machine'] and not r['adherent'] and not r['club'] :
# Pas de réponses # Pas de réponses
return result return result
elif len(conds) == 1 : elif len(conds) == 1 :
# Filtre sur un seul champ # Filtre sur un seul champ
# => on retourne tout # => on retourne tout
for i in filtres : for i in filtres :
if not r[i] : continue if not r[i] : continue
for res in r[i] : for res in r[i] :
result[i].append(globals()[i](res,mode,self.conn)) result[i].append(globals()[i](res,mode,self.conn))
elif not r['adherent'] and not r['club'] : elif not r['adherent'] and not r['club'] :
# Il n'y avait seulement un filtre machine # Il n'y avait seulement un filtre machine
# => on retourne uniquement les machines trouvées # => on retourne uniquement les machines trouvées
for m in r['machine'] : for m in r['machine'] :
@ -810,22 +810,22 @@ 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
if debut == fin : if debut == fin :
raise ValueError(u'Dates de début et fin identiques') raise ValueError(u'Dates de début et fin identiques')
# On d-Aépasse la fin de sanction d'1min pour être sur quelle périmé.-b # On d-Aépasse la fin de sanction d'1min pour être sur quelle périmé.-b
fin=fin+60 fin=fin+60
@ -841,15 +841,15 @@ class base_classes_crans(crans_ldap) :
if self._data['blacklist'] != liste : if self._data['blacklist'] != liste :
self._data['blacklist']=liste self._data['blacklist']=liste
self.modifs.append('blacklist_' + new[2]) self.modifs.append('blacklist_' + new[2])
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 :
if debut not in self._blacklist_restart[new[2]] : if debut not in self._blacklist_restart[new[2]] :
self._blacklist_restart[new[2]].append(debut) self._blacklist_restart[new[2]].append(debut)
if fin!=-1 and fin not in self._blacklist_restart[new[2]] : if fin!=-1 and fin not in self._blacklist_restart[new[2]] :
self._blacklist_restart[new[2]].append(fin) self._blacklist_restart[new[2]].append(fin)
return liste return liste
@ -926,12 +926,12 @@ class base_classes_crans(crans_ldap) :
else : else :
modif = modif.replace("solde", "credit %s Euros" % str(-diff) ) modif = modif.replace("solde", "credit %s Euros" % str(-diff) )
if 'droits' in self.modifs: if 'droits' in self.modifs:
anciens_droits = self._init_data.get('droits',[]) anciens_droits = self._init_data.get('droits',[])
nouveaux_droits = self._data.get('droits',[]) nouveaux_droits = self._data.get('droits',[])
droits_ajoutes = ''.join( [ '+%s' % decode(d) for d in nouveaux_droits if d not in anciens_droits ] ) droits_ajoutes = ''.join( [ '+%s' % decode(d) for d in nouveaux_droits if d not in anciens_droits ] )
droits_enleves = ''.join( [ '-%s' % decode(d) for d in anciens_droits if d not in nouveaux_droits ] ) droits_enleves = ''.join( [ '-%s' % decode(d) for d in anciens_droits if d not in nouveaux_droits ] )
modif = modif.replace("droits", "droits : " + droits_ajoutes + droits_enleves ) modif = modif.replace("droits", "droits : " + droits_ajoutes + droits_enleves )
timestamp = localtime() timestamp = localtime()
hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur ) hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur )
@ -996,9 +996,9 @@ class base_classes_crans(crans_ldap) :
### Génération de la liste de services à redémarrer ### Génération de la liste de services à redémarrer
# Quasiement tout est traité dans les classes filles. # Quasiement tout est traité dans les classes filles.
if hasattr(self,"_blacklist_restart") : if hasattr(self,"_blacklist_restart") :
for n,t in self._blacklist_restart.items() : for n,t in self._blacklist_restart.items() :
self.services_to_restart("blacklist_%s"%n,[],t) self.services_to_restart("blacklist_%s"%n,[],t)
# Reinitialisation # Reinitialisation
self._init_data = self._data.copy() self._init_data = self._data.copy()
@ -2182,8 +2182,8 @@ class machine(base_classes_crans) :
def exempt(self,new=None) : def exempt(self,new=None) :
""" """
Liste des réseaux vers lesquels on ne compte pas l'upload Liste des réseaux vers lesquels on ne compte pas l'upload
Cette liste est transférée dans la base postgres de komaz Cette liste est transférée dans la base postgres de komaz
Pour ajouter un réseau new doit être la chaîne Pour ajouter un réseau new doit être la chaîne
représentant le réseau à ajouter représentant le réseau à ajouter
Pour modifier new doit être une liste de la forme : Pour modifier new doit être une liste de la forme :
@ -2384,7 +2384,7 @@ class machine(base_classes_crans) :
self.services_to_restart('conf_wifi_ng') self.services_to_restart('conf_wifi_ng')
# Reconfiguration clients wifi ? # Reconfiguration clients wifi ?
if self.__typ in ('wifi','borne') and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs or 'macAddress' in self.modifs ) : if self.__typ in ('wifi','borne') and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs or 'macAddress' in self.modifs ) :
self.services_to_restart('conf_wifi_ng') self.services_to_restart('conf_wifi_ng')
# Regénération blackliste nécessaire ? # Regénération blackliste nécessaire ?
@ -2398,9 +2398,9 @@ class machine(base_classes_crans) :
self.services_to_restart('autostatus') self.services_to_restart('autostatus')
self.services_to_restart('mail_modif',['ip=%s' % self.ip()]) self.services_to_restart('mail_modif',['ip=%s' % self.ip()])
# Synchronisation avec la base pgsql pour les exemptions # Synchronisation avec la base pgsql pour les exemptions
if 'exempt' in self.modifs or 'ipHostNumber' in self.modifs : if 'exempt' in self.modifs or 'ipHostNumber' in self.modifs :
self.services_to_restart('exemptions') self.services_to_restart('exemptions')
# Remise à zéro # Remise à zéro
self.modifs=[] self.modifs=[]

View file

@ -18,8 +18,8 @@ License: Python Software Foundation License
Noah Spurrier Noah Spurrier
$Revision: 1.1 $ $Revision: 1.2 $
$Date: 2005-03-05 15:43:59 $ $Date: 2005-10-18 08:38:22 $
""" """
@ -43,7 +43,7 @@ Currently pexpect is intended for UNIX operating systems."""
__version__ = '0.999' __version__ = '0.999'
__revision__ = '$Revision: 1.1 $' __revision__ = '$Revision: 1.2 $'
__all__ = ['ExceptionPexpect', 'EOF', 'TIMEOUT', 'spawn', 'run', __all__ = ['ExceptionPexpect', 'EOF', 'TIMEOUT', 'spawn', 'run',
'__version__', '__revision__'] '__version__', '__revision__']
@ -682,8 +682,8 @@ class spawn:
else: else:
raise raise
except TIMEOUT: except TIMEOUT:
self.before = incoming self.before = incoming
self.after = TIMEOUT self.after = TIMEOUT
if TIMEOUT in pattern_list: if TIMEOUT in pattern_list:
#self.buffer = '' #self.buffer = ''
return pattern_list.index(TIMEOUT) return pattern_list.index(TIMEOUT)
@ -737,16 +737,16 @@ class spawn:
incoming = incoming + c incoming = incoming + c
except EOF: except EOF:
self.before = incoming self.before = incoming
self.after = EOF self.after = EOF
if EOF in pattern_list: if EOF in pattern_list:
#self.buffer = '' #self.buffer = ''
return pattern_list.index(EOF) return pattern_list.index(EOF)
else: else:
raise raise
except TIMEOUT: except TIMEOUT:
self.before = incoming self.before = incoming
self.after = TIMEOUT self.after = TIMEOUT
if TIMEOUT in pattern_list: if TIMEOUT in pattern_list:
#self.buffer = '' #self.buffer = ''
return pattern_list.index(TIMEOUT) return pattern_list.index(TIMEOUT)

View file

@ -19,22 +19,22 @@ from ldap_crans import mailexist
def load(file) : def load(file) :
""" Charge l'objet (adhérent, machine ou club contenu dans le fichier fourni """ """ Charge l'objet (adhérent, machine ou club contenu dans le fichier fourni """
try : try :
fd=open(file,'rb') fd=open(file,'rb')
except : except :
print "Impossible d'ouvrir le fichier demandé." print "Impossible d'ouvrir le fichier demandé."
sys.exit(1) sys.exit(1)
obj = cPickle.load(fd) obj = cPickle.load(fd)
try : try :
# Si machine vérif si le proprio est encore dans la base # Si machine vérif si le proprio est encore dans la base
test_proprio = obj.proprietaire() test_proprio = obj.proprietaire()
if test_proprio.Nom() != obj.proprio : if test_proprio.Nom() != obj.proprio :
raise raise
# Propriétaire encore dans la base => on récupère les infos de la base # Propriétaire encore dans la base => on récupère les infos de la base
del obj.proprio del obj.proprio
except : except :
pass pass
### Modifs pour permettre une restauration ### Modifs pour permettre une restauration
# On supprime les infos de aid, mid ou cid # On supprime les infos de aid, mid ou cid
@ -56,23 +56,23 @@ aff(obj)
def restore_adher(adh) : def restore_adher(adh) :
if adh.compte() and mailexist(adh.compte()) : if adh.compte() and mailexist(adh.compte()) :
print "AVERTISSEMENT : le login %s à déja été réattribué." % adh.compte() print "AVERTISSEMENT : le login %s à déja été réattribué." % adh.compte()
print " il faudra recréer un compte avec un login différent" print " il faudra recréer un compte avec un login différent"
prompt('Appuyez sur ENTREE pour continuer') prompt('Appuyez sur ENTREE pour continuer')
adh._data['mail'] = [] adh._data['mail'] = []
modif_adher(adh) modif_adher(adh)
def restore_machine(machine) : def restore_machine(machine) :
try : try :
obj.proprio # crash si l'adhérent est encore dans la base obj.proprio # crash si l'adhérent est encore dans la base
# L'adhérent est plus dans la base # L'adhérent est plus dans la base
t = prompt("Ratacher la machine à un [C]lub ou un [A]dhérent ?") t = prompt("Ratacher la machine à un [C]lub ou un [A]dhérent ?")
t = t.lower() t = t.lower()
if t in 'ac' : if t in 'ac' :
i = prompt("Entrez l'%sid auquel ratacher la machine : %sid =" % (t,t) ) i = prompt("Entrez l'%sid auquel ratacher la machine : %sid =" % (t,t) )
machine.dn = '%sid=%s,%s' % (t, i, machine.dn.split(',',1)[1] ) machine.dn = '%sid=%s,%s' % (t, i, machine.dn.split(',',1)[1] )
except : except :
pass pass
set_machine(machine) set_machine(machine)
def restore_club(club) : def restore_club(club) :

View file

@ -16,7 +16,7 @@ for droit in [ u'Nounou', u'Apprenti', u'Mod
txt = '%s\n' % droit txt = '%s\n' % droit
for adh in adhs : for adh in adhs :
noms.append(u'%s' % adh.Nom().encode('iso-8859-1')) noms.append(u'%s' % adh.Nom().encode('iso-8859-1'))
txt += u' %s' % '\n '.join(noms) txt += u' %s' % '\n '.join(noms)

View file

@ -15,9 +15,9 @@ txts = []
for m in machines : for m in machines :
# on vérifie qu'on l'a pas encore traité # on vérifie qu'on l'a pas encore traité
if m.ip() in done : if m.ip() in done :
continue continue
if m.proprietaire().__class__ == crans : if m.proprietaire().__class__ == crans :
continue continue
done.append(m.ip()) done.append(m.ip())
# texte pour la machine # texte pour la machine
@ -25,13 +25,13 @@ for m in machines :
txt += u'Propriétaire : %s\n' % m.proprietaire().Nom().encode('iso-8859-1') txt += u'Propriétaire : %s\n' % m.proprietaire().Nom().encode('iso-8859-1')
txt += u'Machine : %s\n' % m.nom() txt += u'Machine : %s\n' % m.nom()
if m.portTCPin() : if m.portTCPin() :
txt += u'ports TCP in : %s\n' % m.portTCPin() txt += u'ports TCP in : %s\n' % m.portTCPin()
if m.portTCPout() : if m.portTCPout() :
txt += u'ports TCP out : %s\n' % m.portTCPout() txt += u'ports TCP out : %s\n' % m.portTCPout()
if m.portUDPin() : if m.portUDPin() :
txt += u'ports UDP in : %s\n' % m.portUDPin() txt += u'ports UDP in : %s\n' % m.portUDPin()
if m.portUDPout() : if m.portUDPout() :
txt += u'ports UDP out : %s\n' % m.portUDPout() txt += u'ports UDP out : %s\n' % m.portUDPout()
txts.append(txt.strip()) txts.append(txt.strip())

View file

@ -14,9 +14,9 @@ txts = []
for c in comptes : for c in comptes :
if not c.compte() : if not c.compte() :
continue continue
quota = getoutput('quota %s | grep "/dev/" | awk \'{ print $1" "$3" "$4 }\'' % c.compte() ) quota = getoutput('quota %s | grep "/dev/" | awk \'{ print $1" "$3" "$4 }\'' % c.compte() )
if quota != '/dev/sda1 400000 600000\n/dev/sda2 102400 153600' and quota != '/dev/sda2 102400 153600\n/dev/sda1 400000 600000' : if quota != '/dev/sda1 400000 600000\n/dev/sda2 102400 153600' and quota != '/dev/sda2 102400 153600\n/dev/sda1 400000 600000' :
txts.append( '%s (%s)\n%s' % (c.Nom(), c.compte(), quota) ) txts.append( '%s (%s)\n%s' % (c.Nom(), c.compte(), quota) )
print '\n- - - - - - = = = = = = # # # # # # # # = = = = = = - - - - - -\n'.join(txts).encode('iso-8859-1') print '\n- - - - - - = = = = = = # # # # # # # # = = = = = = - - - - - -\n'.join(txts).encode('iso-8859-1')

View file

@ -13,7 +13,7 @@ txts = []
for a in adherents : for a in adherents :
if a.solde() == 0 : if a.solde() == 0 :
continue continue
# texte pour l'adhérent # texte pour l'adhérent
txt = u'' txt = u''

View file

@ -25,7 +25,7 @@ class interroge_switch (threading.Thread) :
sw = hpswitch(self.switch) sw = hpswitch(self.switch)
prise = sw.where_is_mac(mac) prise = sw.where_is_mac(mac)
if prise != None : if prise != None :
print "%-10s => prise %-2s : %s" % (self.switch.encode('iso-8859-15').replace('.adm.crans.org',''), str(prise), sw.nom(None, prise)) print "%-10s => prise %-2s : %s" % (self.switch.encode('iso-8859-15').replace('.adm.crans.org',''), str(prise), sw.nom(None, prise))
# on onterroge trois fois car il donne pas toujours les clients # on onterroge trois fois car il donne pas toujours les clients
for switch in ['backbone'] + all_switchs(): for switch in ['backbone'] + all_switchs():

View file

@ -29,10 +29,10 @@ mac_done=[]
def done (mac) : def done (mac) :
global mac_done global mac_done
if mac in mac_done : if mac in mac_done :
return True return True
else : else :
mac_done.append(mac) mac_done.append(mac)
return False return False
# liste des résultats # liste des résultats
results = [] results = []
@ -40,40 +40,40 @@ results = []
# classe d'interrogation des bornes # classe d'interrogation des bornes
class interroge_borne (threading.Thread) : class interroge_borne (threading.Thread) :
def __init__ (self, db, borne, mac = None) : def __init__ (self, db, borne, mac = None) :
threading.Thread.__init__(self) threading.Thread.__init__(self)
self.borne = borne self.borne = borne
self.mac = mac self.mac = mac
self.db = db self.db = db
self.start() self.start()
def aff_client (self, mac, rssi) : def aff_client (self, mac, rssi) :
if done(mac) : if done(mac) :
return return
res = db.search("mac=%s" % mac)['machine'] res = db.search("mac=%s" % mac)['machine']
if not res: if not res:
client_nom = '????' client_nom = '????'
coul_rssi = 'rouge' coul_rssi = 'rouge'
rssi = 0 rssi = 0
else: else:
# On va choisir la bonne couleur pour le RSSI # On va choisir la bonne couleur pour le RSSI
if rssi > -88: if rssi > -88:
coul_rssi = 'vert' coul_rssi = 'vert'
elif rssi > -93: elif rssi > -93:
coul_rssi = 'jaune' coul_rssi = 'jaune'
else: else:
coul_rssi = 'rouge' coul_rssi = 'rouge'
global results global results
results.append('%-10s %-30s (%-15s, RSSI: %s)' % (self.borne.nom().split('.')[0], res[0].proprietaire().Nom(), res[0].nom().split('.')[0],coul("%d" % rssi, coul_rssi))) results.append('%-10s %-30s (%-15s, RSSI: %s)' % (self.borne.nom().split('.')[0], res[0].proprietaire().Nom(), res[0].nom().split('.')[0],coul("%d" % rssi, coul_rssi)))
def run (self) : def run (self) :
nom = self.borne.nom() nom = self.borne.nom()
if not borne_etat(nom) : if not borne_etat(nom) :
return return
clients = borne_clients_canal(nom)['mac-rssi'] clients = borne_clients_canal(nom)['mac-rssi']
for (mac, rssi) in clients : for (mac, rssi) in clients :
if not self.mac.upper() or self.mac == mac.upper() : if not self.mac.upper() or self.mac == mac.upper() :
self.aff_client(mac,rssi) self.aff_client(mac,rssi)
# on onterroge trois fois car il donne pas toujours les clients # on onterroge trois fois car il donne pas toujours les clients
for i in range(0,3) : for i in range(0,3) :
@ -81,7 +81,7 @@ for i in range(0,3) :
resultat = {} resultat = {}
bornes = db.search('canal=*')['machine'] bornes = db.search('canal=*')['machine']
for borne in bornes : for borne in bornes :
interroge_borne(db, borne, mac) interroge_borne(db, borne, mac)
# on attend la fin de threads # on attend la fin de threads
while len(threading.enumerate()) > 1 : while len(threading.enumerate()) > 1 :

View file

@ -251,20 +251,20 @@ def list_bornes(bornes) :
# Données # Données
try : try :
l = b.info()[0] l = b.info()[0]
if len(l) > 11 : if len(l) > 11 :
l = l[0:11] l = l[0:11]
except : except :
l = u'????' l = u'????'
if borne_etat(b.nom()): if borne_etat(b.nom()):
etat = ok etat = ok
else: else:
etat = nok etat = nok
if '-' in b.puissance() : if '-' in b.puissance() :
puiss = coul(b.puissance(),'rouge') puiss = coul(b.puissance(),'rouge')
else : else :
puiss = b.puissance() puiss = b.puissance()
data.append((b.id() , b.nom().split('.')[0], b.ip(), b.mac(), etat, b.canal(), puiss, b.prise(),l )) data.append((b.id() , b.nom().split('.')[0], b.ip(), b.mac(), etat, b.canal(), puiss, b.prise(),l ))
@ -752,7 +752,7 @@ def prise_etat(chbre) :
# Switch non manageable ou down # Switch non manageable ou down
f += u', erreur de communication avec le switch' f += u', erreur de communication avec le switch'
except : except :
f = u'info prise non dispo : erreur prog' f = u'info prise non dispo : erreur prog'
return f return f

View file

@ -23,13 +23,13 @@ def GrabInfos(aDB):
maison = os.listdir('/home') maison = os.listdir('/home')
for login in maison: for login in maison:
compte = CompteRec.CCompte(login) compte = CompteRec.CCompte(login)
if compte: # il y a un .info, un .plan ou un .www : if compte: # il y a un .info, un .plan ou un .www :
aDB.Put(login,compte) aDB.Put(login,compte)
i = i - 1 i = i - 1
if not i: break # en debogage, on ne mouline pas tous les comptes ! if not i: break # en debogage, on ne mouline pas tous les comptes !

View file

@ -37,230 +37,230 @@ class CCompte:
Plan = None Plan = None
URL = None # nom de fichier relatif de la page Web URL = None # nom de fichier relatif de la page Web
# en général .www/index.html # en général .www/index.html
# ou alors URL # ou alors URL
def __init__(self,login = ""): def __init__(self,login = ""):
""" Initialisation. """ Initialisation.
Cette méthode analyse le contenu du compte (login) et remplit Cette méthode analyse le contenu du compte (login) et remplit
self en conséquence. Il est renvoyé 0 dans self.Actif si le compte self en conséquence. Il est renvoyé 0 dans self.Actif si le compte
ne contient ni .info ni .plan. """ ne contient ni .info ni .plan. """
self.Actif = 0 self.Actif = 0
self.Compte = strip(login) self.Compte = strip(login)
if not login : return # en principe, on est en de-shelvage ... if not login : return # en principe, on est en de-shelvage ...
Path = "/home/" + login + "/" Path = "/home/" + login + "/"
try: # lecture du .info try: # lecture du .info
f_info = open(Path + ".info","r") f_info = open(Path + ".info","r")
info = f_info.readlines() info = f_info.readlines()
self.ParseInfo(info,login) self.ParseInfo(info,login)
except: except:
# faut probablement gueuler (sauf si le fichier est # faut probablement gueuler (sauf si le fichier est
# légitimement absent) # légitimement absent)
pass pass
if not (self.URL): if not (self.URL):
url = "" url = ""
# rien mis ? on essaye index.html et index.htm dans .www/ : # rien mis ? on essaye index.html et index.htm dans .www/ :
if os.path.isfile("/home/"+login+"/www/index.html"): if os.path.isfile("/home/"+login+"/www/index.html"):
url = "/~"+login+"/index.html" url = "/~"+login+"/index.html"
elif os.path.isfile("/home/"+login+"/www/index.htm"): elif os.path.isfile("/home/"+login+"/www/index.htm"):
url = "/~"+login+"/index.htm" url = "/~"+login+"/index.htm"
elif os.path.isfile("/home/"+login+"/www/default.htm"): elif os.path.isfile("/home/"+login+"/www/default.htm"):
url = "/~"+login+"/default.htm" url = "/~"+login+"/default.htm"
self.URL = url self.URL = url
try: # lecture du .plan try: # lecture du .plan
f_plan = open(Path + ".plan","r") f_plan = open(Path + ".plan","r")
self.Plan = f_plan.readlines()[:30] self.Plan = f_plan.readlines()[:30]
self.Active = 1 self.Active = 1
except: except:
pass pass
try: # lecture du .project try: # lecture du .project
f_project = open(Path + ".project","r") f_project = open(Path + ".project","r")
self.Projet = f_project.readlines()[:30] self.Projet = f_project.readlines()[:30]
self.Active = 1 self.Active = 1
except: except:
pass pass
# à ce stade, l'objet est prêt à l'emploi # à ce stade, l'objet est prêt à l'emploi
def ParseInfo (self,info , login): def ParseInfo (self,info , login):
""" Analyse un fichier .info. """ Analyse un fichier .info.
cette routine analyse un fichier .info et transfère ses cette routine analyse un fichier .info et transfère ses
informations si elles sont cohérentes. informations si elles sont cohérentes.
Les erreurs sont envoyees a self.DisplayError Les erreurs sont envoyees a self.DisplayError
""" """
nom = None nom = None
compte = None compte = None
pseudo = None pseudo = None
email = login + "@crans.org" email = login + "@crans.org"
logo = None logo = None
photo = None photo = None
devise = None devise = None
projet = None projet = None
section = None section = None
adresse = None adresse = None
telephone = None telephone = None
url = None url = None
version = 1 version = 1
for ligne in info : for ligne in info :
if lstrip(ligne)[:1] == '#': continue # commentaire if lstrip(ligne)[:1] == '#': continue # commentaire
ligne = rstrip(ligne) # vire le \012 final ligne = rstrip(ligne) # vire le \012 final
spl_ligne = split(ligne,":") spl_ligne = split(ligne,":")
champ = lower(strip(spl_ligne[0])) champ = lower(strip(spl_ligne[0]))
valeur = strip(join(spl_ligne[1:],":")) valeur = strip(join(spl_ligne[1:],":"))
try: try:
if champ=="compte": compte = strip(valeur) if champ=="compte": compte = strip(valeur)
elif champ=="nom": nom = valeur elif champ=="nom": nom = valeur
elif champ=="pseudo": pseudo = valeur elif champ=="pseudo": pseudo = valeur
elif champ=="email": email = valeur elif champ=="email": email = valeur
elif champ=="logo": logo = valeur elif champ=="logo": logo = valeur
elif champ=="photo": photo = valeur elif champ=="photo": photo = valeur
elif champ=="devise": devise = valeur elif champ=="devise": devise = valeur
elif champ=="section": section = valeur elif champ=="section": section = valeur
elif champ=="adresse": adresse = valeur elif champ=="adresse": adresse = valeur
elif champ=="telephone": telephone = valeur elif champ=="telephone": telephone = valeur
elif champ=="url" : url = valeur elif champ=="url" : url = valeur
elif champ=="version" : version = atoi(strip(valeur)) elif champ=="version" : version = atoi(strip(valeur))
except: except:
erreur = [" une erreur est survenue sur le champ "+champ+ erreur = [" une erreur est survenue sur le champ "+champ+
". Il y a toutes les chances que tu n'aie pas " ". Il y a toutes les chances que tu n'aie pas "
" respecté la syntaxe de .info. \012", " respecté la syntaxe de .info. \012",
" selon toutes probabilités, une autre erreur " " selon toutes probabilités, une autre erreur "
"va se déclencher... on laisse courir.\012", "va se déclencher... on laisse courir.\012",
" (non critique)","\012"] " (non critique)","\012"]
self.DisplayError(login,erreur) self.DisplayError(login,erreur)
pass pass
if (url) and (url[:7] != "http://") and (url[:1] != "/"): if (url) and (url[:7] != "http://") and (url[:1] != "/"):
# c'est un nom de fichier.... on verifie qu'il commence par .www # c'est un nom de fichier.... on verifie qu'il commence par .www
if url[:5] != ".www/" : if url[:5] != ".www/" :
erreur = ["Le champ url doit etre un URL ou un nom de fichier" erreur = ["Le champ url doit etre un URL ou un nom de fichier"
"commencant par .www/ \012","(non critique) \012", "commencant par .www/ \012","(non critique) \012",
"\012"] "\012"]
self.DisplayError(login,erreur) self.DisplayError(login,erreur)
else: # c'est bon.. on en fait un url relatif au site... else: # c'est bon.. on en fait un url relatif au site...
url = "/~"+login+url[:4] url = "/~"+login+url[:4]
pass pass
if strip(compte) != strip(login): if strip(compte) != strip(login):
erreur = ["Le champ 'Compte' et le login ne correspondent pas !", erreur = ["Le champ 'Compte' et le login ne correspondent pas !",
" (fatal) ",""] " (fatal) ",""]
self.DisplayError(login,erreur) self.DisplayError(login,erreur)
raise SyntaxError raise SyntaxError
if version < 1: if version < 1:
erreur = ["La version du fichier (champ Version) est inférieure ", erreur = ["La version du fichier (champ Version) est inférieure ",
"a 1 ", "a 1 ",
"(non critique)",""] "(non critique)",""]
self.DisplayError(login,erreur) self.DisplayError(login,erreur)
#raise SyntaxError #raise SyntaxError
if version > 1: if version > 1:
erreur = ["Ce mkinfos est probablement obsolète ou une erreur " erreur = ["Ce mkinfos est probablement obsolète ou une erreur "
" existe sur le champ Version. ", " existe sur le champ Version. ",
" (non critique)",""] " (non critique)",""]
self.DisplayError(login,erreur) self.DisplayError(login,erreur)
self.Compte = compte self.Compte = compte
self.Actif = 1 self.Actif = 1
self.Pseudo = pseudo self.Pseudo = pseudo
self.Email = email self.Email = email
self.Logo = logo self.Logo = logo
self.Photo = photo self.Photo = photo
self.Devise = devise self.Devise = devise
self.Section = section self.Section = section
self.Projet = projet self.Projet = projet
self.Adresse = adresse self.Adresse = adresse
self.Telephone = telephone self.Telephone = telephone
self.Nom = nom self.Nom = nom
self.URL = url self.URL = url
if logo: if logo:
try: try:
self.FindLogo() self.FindLogo()
except: except:
erreur = ["Erreur a la récupération du logo", erreur = ["Erreur a la récupération du logo",
"(non critique)", "(non critique)",
""] ""]
self.DisplayError(login,erreur) self.DisplayError(login,erreur)
pass pass
def DisplayError(self, login, errorlines): def DisplayError(self, login, errorlines):
""" Affiche une erreur de compilation du .info de 'login'. """ Affiche une erreur de compilation du .info de 'login'.
errorlines contient un tableau de chaines de caracteres. errorlines contient un tableau de chaines de caracteres.
En general, on changera cette routine (par exemple pour En general, on changera cette routine (par exemple pour
envoyer un mail a 'login' envoyer un mail a 'login'
""" """
print "Erreur dans .info , compte =",login print "Erreur dans .info , compte =",login
for i in errorlines: for i in errorlines:
print i print i
print "" print ""
def FindLogo(self): def FindLogo(self):
""" Récupere le logo. """ Récupere le logo.
Cette routine récupere le logo contenu dans le champ Logo du compte Cette routine récupere le logo contenu dans le champ Logo du compte
'account' et le stocke dans $InfoDir/$login.logo.extension 'account' et le stocke dans $InfoDir/$login.logo.extension
Le champ Logo du compte est alors mis à jour. Le champ Logo du compte est alors mis à jour.
""" """
import urllib # urllib.urlopen() import urllib # urllib.urlopen()
import posixpath # posixpath.splitext() import posixpath # posixpath.splitext()
# Où sont stockés les logos # Où sont stockés les logos
InfoDir = "/home/httpd/html/info-2/" InfoDir = "/home/httpd/html/info-2/"
InfoPath = "/info-2/" InfoPath = "/info-2/"
if not self.Logo: if not self.Logo:
return # rien a faire ! return # rien a faire !
logopath = self.Logo logopath = self.Logo
self.Logo = "" self.Logo = ""
olddir = os.getcwd() olddir = os.getcwd()
os.chdir("/home/"+self.Compte) os.chdir("/home/"+self.Compte)
try: try:
rf = urllib.urlopen(logopath) rf = urllib.urlopen(logopath)
base,ext = posixpath.splitext(logopath) base,ext = posixpath.splitext(logopath)
logoname = self.Compte + ".logo" + ext logoname = self.Compte + ".logo" + ext
f = open(InfoDir + logoname,"w") f = open(InfoDir + logoname,"w")
data = rf.read(-1) # tout d'un coup ! data = rf.read(-1) # tout d'un coup !
f.write(data) # hop ! f.write(data) # hop !
# on ferme ! # on ferme !
f.close() f.close()
rf = None rf = None
# bon on peut mettre a jour le compte maintenant ! # bon on peut mettre a jour le compte maintenant !
self.Logo = InfoPath + logoname self.Logo = InfoPath + logoname
finally: finally:
os.chdir(olddir) os.chdir(olddir)

View file

@ -22,15 +22,15 @@ class CInfoDb:
db = None db = None
def __init__(self,filename,mode="rw"): def __init__(self,filename,mode="rw"):
self.db = shelve.open(filename,mode) self.db = shelve.open(filename,mode)
def __del__(self): def __del__(self):
self.db.close() self.db.close()
def Put(self,name,obj): def Put(self,name,obj):
""" Ajoute un element.""" """ Ajoute un element."""
self.db[name] = obj self.db[name] = obj
def Get(self,name): def Get(self,name):
""" recupere un element. """ """ recupere un element. """
return self.db[name] return self.db[name]

View file

@ -13,7 +13,7 @@ import sys
import commands import commands
#Excluded = ['snepa','lasauce','cineclub','innomine','hubris','gmpcad', #Excluded = ['snepa','lasauce','cineclub','innomine','hubris','gmpcad',
# 'jdr','coope','asme','sono','rilem','krobot'] # 'jdr','coope','asme','sono','rilem','krobot']
Excluded = [] Excluded = []
@ -50,38 +50,38 @@ for key in keys:
#sys.stderr.write('%s\n'%key) #sys.stderr.write('%s\n'%key)
try: try:
if compte.URL and not (compte.Compte in Excluded): if compte.URL and not (compte.Compte in Excluded):
s = ' <td align="center" valign="center" width="25%">\n\ s = ' <td align="center" valign="center" width="25%">\n\
<font style="font-size: x-small" face="Verdana, Tahoma, Arial, Helvetica, sans-serif" color="#000000" >\n' <font style="font-size: x-small" face="Verdana, Tahoma, Arial, Helvetica, sans-serif" color="#000000" >\n'
if compte.Logo : l = compte.Logo if compte.Logo : l = compte.Logo
else: l = "/images/crans-mini.jpg" else: l = "/images/crans-mini.jpg"
url = compte.URL url = compte.URL
s = s + ' <a href="' + url + '"><img src="'+l+'" alt="*" border=0></a><br>' s = s + ' <a href="' + url + '"><img src="'+l+'" alt="*" border=0></a><br>'
if compte.Nom: nom = compte.Nom if compte.Nom: nom = compte.Nom
else: nom = compte.Compte else: nom = compte.Compte
s = s + '\n <b> <a href="' + url + '">' + nom + '</a></b><br>' s = s + '\n <b> <a href="' + url + '">' + nom + '</a></b><br>'
if compte.Pseudo: if compte.Pseudo:
s = s + '\n «'+compte.Pseudo+'»<br>' s = s + '\n «'+compte.Pseudo+'»<br>'
if compteur == 0: if compteur == 0:
print " </tr>\n <tr>" print " </tr>\n <tr>"
print s, # qu'il y ait ou non un pseudo !!! print s, # qu'il y ait ou non un pseudo !!!
if compte.Devise: if compte.Devise:
s = '\n <font style="font-size: xx-small"><i>'+compte.Devise+'</i></font>' s = '\n <font style="font-size: xx-small"><i>'+compte.Devise+'</i></font>'
print s, print s,
print '\n </font>\n </td>' print '\n </font>\n </td>'
compteur = (compteur + 1)%4 compteur = (compteur + 1)%4
except: except:
pass pass
print " </tr>\n\ print " </tr>\n\
</table>\n\ </table>\n\

View file

@ -17,12 +17,12 @@ def chap_ok(password, challenge, clear_pass) :
retourne False sinon retourne False sinon
""" """
try : try :
challenge = binascii.a2b_hex(challenge.replace('0x','')) challenge = binascii.a2b_hex(challenge.replace('0x',''))
password = binascii.a2b_hex(password.replace('0x','')) password = binascii.a2b_hex(password.replace('0x',''))
if md5.new(password[0] + clear_pass + challenge).digest() == password[1:] : if md5.new(password[0] + clear_pass + challenge).digest() == password[1:] :
return True return True
except : except :
pass pass
return False return False
@ -31,29 +31,29 @@ if __name__ == '__main__' :
mac=os.getenv('USER_NAME','').replace('"','') mac=os.getenv('USER_NAME','').replace('"','')
if not chap_ok(os.getenv('CHAP_PASSWORD'), os.getenv('CHAP_CHALLENGE'), mac) : if not chap_ok(os.getenv('CHAP_PASSWORD'), os.getenv('CHAP_CHALLENGE'), mac) :
sys.stdout.write("Echec test CHAP") sys.stdout.write("Echec test CHAP")
sys.exit(-1) sys.exit(-1)
# Mac dans la base LDAP # Mac dans la base LDAP
m=crans_ldap().search('mac=%s'%mac)['machine'] m=crans_ldap().search('mac=%s'%mac)['machine']
if len(m)!=1 : if len(m)!=1 :
sys.stdout.write("Pb recherche mac (nb résultat !=1)") sys.stdout.write("Pb recherche mac (nb résultat !=1)")
sys.exit(-1) sys.exit(-1)
# N'appartient pas au Crans (évite les spoof) # N'appartient pas au Crans (évite les spoof)
proprio=m[0].proprietaire() proprio=m[0].proprietaire()
# if proprio.__class__ == crans : # if proprio.__class__ == crans :
# sys.stdout.write("Machine du crans") # sys.stdout.write("Machine du crans")
# sys.exit(-1) # sys.exit(-1)
# Paiment ok ? # Paiment ok ?
paid=max(proprio.paiement()+[0]) paid=max(proprio.paiement()+[0])
if dat[1]==9 : if dat[1]==9 :
# En septembre les anciennes adhésion sont OK # En septembre les anciennes adhésion sont OK
ann_scol -= 1 ann_scol -= 1
if ann_scol > paid : if ann_scol > paid :
sys.stdout.write("Echec test LDAP") sys.stdout.write("Echec test LDAP")
sys.exit(-1) sys.exit(-1)
# C'est bon # C'est bon
sys.stdout.write("Acces OK") sys.stdout.write("Acces OK")

View file

@ -17,23 +17,23 @@ def identification ( password ) :
#si le fichier existe le code est bon (evite les problemes par rapport au fait de #si le fichier existe le code est bon (evite les problemes par rapport au fait de
# stocker les codes dans un fichier # stocker les codes dans un fichier
if password in os.listdir('/var/impression/codes'): if password in os.listdir('/var/impression/codes'):
if password in os.listdir('/var/impression/codes'): if password in os.listdir('/var/impression/codes'):
os.remove("/var/impression/codes/%s" %password) os.remove("/var/impression/codes/%s" %password)
return 1 return 1
else : else :
return 0 return 0
if __name__ == '__main__' : if __name__ == '__main__' :
# on récupère le code dans les variables d'environement # on récupère le code dans les variables d'environement
try : try :
code = os.getenv('USER_PASSWORD','').replace('"','') code = os.getenv('USER_PASSWORD','').replace('"','')
except : except :
code = '' code = ''
# test de l'authentification # test de l'authentification
if identification(code) : if identification(code) :
# c'est bon # c'est bon
sys.exit(0) sys.exit(0)
else : else :
# c'est pas bon # c'est pas bon
sys.exit(1) sys.exit(1)

View file

@ -1,14 +1,14 @@
#! /usr/bin/env python #! /usr/bin/env python
# -*- coding: iso-8859-15 -*- # -*- coding: iso-8859-15 -*-
# $Id: secours.py,v 1.2 2005-08-27 11:56:50 pauget Exp $ # $Id: secours.py,v 1.3 2005-10-18 08:38:22 bernat Exp $
""" Script de reconfigure des services en connexion de secours """ Script de reconfigure des services en connexion de secours
Arguments : Arguments :
test : teste la connexion et passe en secours si besoin test : teste la connexion et passe en secours si besoin
normal : force la connexion normale normal : force la connexion normale
secours : force la connexion de secours secours : force la connexion de secours
auto : permet la modification automatique de l'état auto : permet la modification automatique de l'état
Sans argument configure les services comme indiqué dans etat_maitre Sans argument configure les services comme indiqué dans etat_maitre
Frédéric Pauget août 2005 Frédéric Pauget août 2005
@ -27,7 +27,7 @@ if hostname == 'rouge' :
cmds = [ '/etc/init.d/postfix restart' , '/etc/init.d/bind9 reload' ] cmds = [ '/etc/init.d/postfix restart' , '/etc/init.d/bind9 reload' ]
elif hostname == 'sila' : elif hostname == 'sila' :
fichiers = { '/etc/bind/named.conf.options' : '//' , fichiers = { '/etc/bind/named.conf.options' : '//' ,
'/etc/squid/squid.conf' : '#' } '/etc/squid/squid.conf' : '#' }
cmds = [ '/etc/init.d/squid reload' , '/etc/init.d/bind9 reload' ] cmds = [ '/etc/init.d/squid reload' , '/etc/init.d/bind9 reload' ]
elif hostname == 'bleu' : elif hostname == 'bleu' :
fichiers = { '/etc/postfix/main.cf' : '#' } fichiers = { '/etc/postfix/main.cf' : '#' }
@ -70,34 +70,34 @@ def edit(file,comment,etat) :
new = '' new = ''
reste = 0 # Nombre de lignes restant à traiter reste = 0 # Nombre de lignes restant à traiter
while line : while line :
l = line.rstrip() l = line.rstrip()
mo = sre.match('^(.*)'+signal+'(|-.)$',l) mo = sre.match('^(.*)'+signal+'(|-.)$',l)
if (mo and len(mo.group(1)) > 1) or reste: if (mo and len(mo.group(1)) > 1) or reste:
# Ligne pour secours # Ligne pour secours
if not sre.match('^' + comment,l) and etat == 'normal': if not sre.match('^' + comment,l) and etat == 'normal':
# On est actuellement configuré en secours # On est actuellement configuré en secours
# Il faut passer en normal # Il faut passer en normal
new += comment + line new += comment + line
elif sre.match('^' + comment,l) and etat == 'secours' : elif sre.match('^' + comment,l) and etat == 'secours' :
# On est actuellement configuré en normal # On est actuellement configuré en normal
# Il faut passer en secours # Il faut passer en secours
new += line.replace(comment,'',1) new += line.replace(comment,'',1)
else : else :
# Rien à faire, on est bien configuré # Rien à faire, on est bien configuré
new += line new += line
if reste : if reste :
reste -= 1 reste -= 1
elif mo and len(mo.group(1)) == 0: elif mo and len(mo.group(1)) == 0:
# On a une ligne avec secours uniquement, c'est les n # On a une ligne avec secours uniquement, c'est les n
# prochaines lignes qui font foi # prochaines lignes qui font foi
try : reste = int(mo.group(2)[1:]) try : reste = int(mo.group(2)[1:])
except : reste = 1 except : reste = 1
new += line
else :
# Ligne normale
new += line new += line
else :
# Ligne normale
new += line
line = fd.readline() line = fd.readline()
fd.close() fd.close()
@ -109,45 +109,45 @@ if __name__ == '__main__' :
etat_maitre, mode = map(str.strip,open(path+'/etat_maitre').readlines()) etat_maitre, mode = map(str.strip,open(path+'/etat_maitre').readlines())
nouvel_etat = etat_maitre nouvel_etat = etat_maitre
try: try:
etat_actuel = open('%s/etat_%s' % (path,hostname)).readline().strip() etat_actuel = open('%s/etat_%s' % (path,hostname)).readline().strip()
except : except :
etat_actuel = None etat_actuel = None
if len(sys.argv) == 2 : if len(sys.argv) == 2 :
if sys.argv[1] == 'secours' : if sys.argv[1] == 'secours' :
print "Connexion de secours forcée." print "Connexion de secours forcée."
nouvel_etat = 'secours' nouvel_etat = 'secours'
mode = 'manuel' mode = 'manuel'
open(path+'/etat_maitre','w').write('%s\n%s'% (nouvel_etat,mode)) open(path+'/etat_maitre','w').write('%s\n%s'% (nouvel_etat,mode))
elif sys.argv[1] == 'normal' : elif sys.argv[1] == 'normal' :
print "Connexion normale forcée." print "Connexion normale forcée."
nouvel_etat = 'normal' nouvel_etat = 'normal'
mode = 'manuel' mode = 'manuel'
open(path+'/etat_maitre','w').write('%s\n%s'% (nouvel_etat,mode)) open(path+'/etat_maitre','w').write('%s\n%s'% (nouvel_etat,mode))
elif sys.argv[1] in ( 'auto', 'test' ) : elif sys.argv[1] in ( 'auto', 'test' ) :
if sys.argv[1] == 'auto' : if sys.argv[1] == 'auto' :
mode = 'auto' mode = 'auto'
if mode != 'auto' : if mode != 'auto' :
print 'Mode manuel, passer en mode auto pour tester' print 'Mode manuel, passer en mode auto pour tester'
sys.exit(1) sys.exit(1)
# On choisi le mode de connexion # On choisi le mode de connexion
if normal_ok() : nouvel_etat = 'normal' if normal_ok() : nouvel_etat = 'normal'
else : nouvel_etat = 'secours' else : nouvel_etat = 'secours'
if nouvel_etat != etat_maitre or sys.argv[1] == 'auto' : if nouvel_etat != etat_maitre or sys.argv[1] == 'auto' :
open(path + '/etat_maitre','w').write('%s\n%s'% (nouvel_etat,mode)) open(path + '/etat_maitre','w').write('%s\n%s'% (nouvel_etat,mode))
print "Mode %s" % mode print "Mode %s" % mode
if nouvel_etat == etat_actuel : if nouvel_etat == etat_actuel :
print etat_actuel print etat_actuel
else : else :
# Il faut changer # Il faut changer
sys.stderr.write("Passage en mode %s\n" % nouvel_etat) # Ecriture sur stderr pour le cron sys.stderr.write("Passage en mode %s\n" % nouvel_etat) # Ecriture sur stderr pour le cron
for f, c in fichiers.items() : for f, c in fichiers.items() :
try: try:
print 'Edition de %s' % f print 'Edition de %s' % f
@ -155,7 +155,7 @@ if __name__ == '__main__' :
except: except:
import traceback import traceback
traceback.print_exc() traceback.print_exc()
open('%s/etat_%s' % (path,hostname),'w').write(nouvel_etat) open('%s/etat_%s' % (path,hostname),'w').write(nouvel_etat)
for c in cmds : for c in cmds :
os.system(c) os.system(c)

View file

@ -84,12 +84,12 @@ infections = curseur.fetchall()
liste_virus="" liste_virus=""
for i in range(1,len(infections)): for i in range(1,len(infections)):
IP=infections[i][0] IP=infections[i][0]
print IP print IP
try: try:
hostname = socket.gethostbyaddr("%s"%IP)[0] hostname = socket.gethostbyaddr("%s"%IP)[0]
except socket.herror: except socket.herror:
continue continue
liste_virus+="%s\n"%(str(hostname)) liste_virus+="%s\n"%(str(hostname))
# Machines utilisant des protocoles P2P : # Machines utilisant des protocoles P2P :
@ -102,10 +102,10 @@ for i in range(0,len(p2p)):
IP=p2p[i][0] IP=p2p[i][0]
protocole = p2p[i][1] protocole = p2p[i][1]
hostname = socket.gethostbyaddr("%s"%IP)[0] hostname = socket.gethostbyaddr("%s"%IP)[0]
requete = "SELECT COUNT(ip_src) from p2p where date > timestamp 'now' - interval '1 day' and ip_src='%s'"%IP requete = "SELECT COUNT(ip_src) from p2p where date > timestamp 'now' - interval '1 day' and ip_src='%s'"%IP
curseur.execute(requete) curseur.execute(requete)
paquets=curseur.fetchall() paquets=curseur.fetchall()
liste_p2p+="%10s\t%20s\t%s\n"%(str(protocole),str(hostname),str(paquets[0][0])) liste_p2p+="%10s\t%20s\t%s\n"%(str(protocole),str(hostname),str(paquets[0][0]))
############# #############
@ -157,7 +157,7 @@ corps = message %{'From':expediteur,
'liste_virus':liste_virus, 'liste_virus':liste_virus,
'liste_exemptes':liste_exemptes, 'liste_exemptes':liste_exemptes,
'liste_serveurs':liste_serveurs, 'liste_serveurs':liste_serveurs,
'seuil':5} 'seuil':5}
#corps = corps.encode('iso 8859-15') #corps = corps.encode('iso 8859-15')
mail.sendmail('disconnect@crans.org','disconnect@crans.org',corps) mail.sendmail('disconnect@crans.org','disconnect@crans.org',corps)

View file

@ -19,7 +19,7 @@ elif os.getuid() != 101 :
def usage(erreur=None) : def usage(erreur=None) :
if erreur : if erreur :
print erreur print erreur
print """Usage : print """Usage :
%(p)s start [<numero carte> [<transpondeur>]]: %(p)s start [<numero carte> [<transpondeur>]]:
démarrage le transpondeur donné sur la carte donnée, démarrage le transpondeur donné sur la carte donnée,

View file

@ -69,7 +69,7 @@ def gen_sap() :
ip, port, nom_chaine = line.strip().split(':') ip, port, nom_chaine = line.strip().split(':')
file.write(chaine_template % { file.write(chaine_template % {
'nom' : nom_chaine, 'nom' : nom_chaine,
'langue': nom_chaine.split()[0], 'langue': nom_chaine.split()[0],
'ip' : ip, 'ip' : ip,
'port' : port} ) 'port' : port} )
ok=1 ok=1
@ -117,9 +117,9 @@ if __name__ == '__main__' :
signal.signal(signal.SIGINT,term) signal.signal(signal.SIGINT,term)
while 1 : while 1 :
try : try :
gen_sap() gen_sap()
except no_data : except no_data :
# Rien n'est diffusé # Rien n'est diffusé
kill() kill()
else : else :

View file

@ -64,10 +64,10 @@ pids=%(pids)s
mumudvb = "/usr/local/bin/mumudvb " mumudvb = "/usr/local/bin/mumudvb "
def __cmp__(a,b) : def __cmp__(a,b) :
for attr in ( 'card', 'freq', 'chaines' ) : for attr in ( 'card', 'freq', 'chaines' ) :
if getattr(a,attr) != getattr(b,attr) : if getattr(a,attr) != getattr(b,attr) :
return -2 return -2
return 0 return 0
def __init__(self,card) : def __init__(self,card) :
""" Initalisation card est le numéro (entier) de la carte """ Initalisation card est le numéro (entier) de la carte

View file

@ -1,5 +1,5 @@
#! /usr/bin/env python #! /usr/bin/env python
# -*- coding: iso8859-15 -*- # -*- coding: iso-8859-15 -*-
""" Défini les transpondeurs à associer à chacune des cartes """ """ Défini les transpondeurs à associer à chacune des cartes """
@ -10,29 +10,29 @@ host = gethostname()
transpondeurs = { 'canard' : [ TNT_R4_498000(0) , transpondeurs = { 'canard' : [ TNT_R4_498000(0) ,
Hotbird_12476(1) , Hotbird_12476(1) ,
Hotbird_10911(2) , Hotbird_10911(2) ,
Hotbird_12597(3) , Hotbird_12597(3) ,
Hotbird_12577(4) ], Hotbird_12577(4) ],
'lapin' : [ Hotbird_11242(0) , 'lapin' : [ Hotbird_11242(0) ,
Hotbird_11604(1) , Hotbird_11604(1) ,
TNT_R1_586000(2) , TNT_R1_586000(2) ,
TNT_R6_562000(3) , TNT_R6_562000(3) ,
TNT_R2_474000(4) , TNT_R2_474000(4) ,
TNT_R3_522000(5) ], TNT_R3_522000(5) ],
'oie' : [ Hotbird_12245(0) , 'oie' : [ Hotbird_12245(0) ,
Hotbird_11137(1) , Hotbird_11137(1) ,
Hotbird_10873(2) , Hotbird_10873(2) ,
Hotbird_11304(3) , Hotbird_11304(3) ,
Hotbird_11623(4) ] Hotbird_11623(4) ]
} }
conf = transpondeurs.get(host,[]) conf = transpondeurs.get(host,[])
if __name__ == '__main__' : if __name__ == '__main__' :
import sys import sys
if len(sys.argv) == 2 : if len(sys.argv) == 2 :
conf = transpondeurs.get(sys.argv[1],[]) conf = transpondeurs.get(sys.argv[1],[])
for t in conf : for t in conf :
print t print t
for chaine in t.chaines.values() : for chaine in t.chaines.values() :
print '\t%s' % chaine print '\t%s' % chaine

View file

@ -12,13 +12,13 @@ sys.stdout.write('Nom d\'utilisateur (au format prenom.nom) : ')
while True : while True :
user = sys.stdin.readline().strip() user = sys.stdin.readline().strip()
if user : if user :
break break
while True : while True :
pass1 = getpass('Mot de passe : ') pass1 = getpass('Mot de passe : ')
pass2 = getpass('Retappez le mot de passe : ') pass2 = getpass('Retappez le mot de passe : ')
if pass1 == pass2 : if pass1 == pass2 :
break break
print 'Les deux mot de passe ne correpondent pas !' print 'Les deux mot de passe ne correpondent pas !'
f = open('/usr/scripts/wifiweb/utilisateurs.py','a+') f = open('/usr/scripts/wifiweb/utilisateurs.py','a+')

View file

@ -34,7 +34,7 @@ action = form.getvalue('action','auth')
try : try :
url = os.environ['HTTP_REFERER'] url = os.environ['HTTP_REFERER']
if '?' in url : if '?' in url :
url = url.split('?')[0] url = url.split('?')[0]
except : except :
url = '' url = ''
@ -63,13 +63,13 @@ def message_nok (texte) :
def bouton (url='', sid='', action='', caption='') : def bouton (url='', sid='', action='', caption='') :
txt = '' txt = ''
if url : if url :
txt += '<form action="%s" method="POST">\n' % url txt += '<form action="%s" method="POST">\n' % url
else : else :
txt += '<form method="POST">\n' txt += '<form method="POST">\n'
if sid : if sid :
txt += '<input type="hidden" name="sid" value="%s">\n' % sid txt += '<input type="hidden" name="sid" value="%s">\n' % sid
if action : if action :
txt += '<input type="hidden" name="action" value="%s">' % action txt += '<input type="hidden" name="action" value="%s">' % action
txt += '<input type="submit" value="%s">\n</form>' % caption txt += '<input type="submit" value="%s">\n</form>' % caption
return txt return txt
@ -84,7 +84,7 @@ if action == 'valid-auth' :
sess.data['user'] = form.getvalue('user','') sess.data['user'] = form.getvalue('user','')
sess.data['password'] = sha.new(form.getvalue('password','')).hexdigest() sess.data['password'] = sha.new(form.getvalue('password','')).hexdigest()
if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) : if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) :
log(sess.data['user'] + ' s\'est connecté' ) log(sess.data['user'] + ' s\'est connecté' )
action = 'index' action = 'index'
if not sess.data.has_key('user') or not sess.data.has_key('password') : if not sess.data.has_key('user') or not sess.data.has_key('password') :
@ -93,25 +93,25 @@ if not sess.data.has_key('user') or not sess.data.has_key('password') :
if action != 'auth' : if action != 'auth' :
if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) : if users.has_key( sess.data['user'] + ':' + sess.data['password'] ) :
# droits de l'utilisateur # droits de l'utilisateur
######################### #########################
# construction de la liste des bornes modifiables # construction de la liste des bornes modifiables
bornes_modifiables = [] bornes_modifiables = []
if len(users[ sess.data['user'] + ':' + sess.data['password'] ]) : if len(users[ sess.data['user'] + ':' + sess.data['password'] ]) :
for lieu in users[ sess.data['user'] + ':' + sess.data['password'] ] : for lieu in users[ sess.data['user'] + ':' + sess.data['password'] ] :
for borne in db.search('canal=*&info=<lieu>%s*' % lieu )['machine'] : for borne in db.search('canal=*&info=<lieu>%s*' % lieu )['machine'] :
nom = borne.nom().encode('iso-8859-15').split('.')[0] nom = borne.nom().encode('iso-8859-15').split('.')[0]
if nom not in bornes_modifiables : if nom not in bornes_modifiables :
bornes_modifiables.append(nom) bornes_modifiables.append(nom)
else : else :
# erreur d'authentification # erreur d'authentification
########################### ###########################
log(sess.data['user'] + ' erreur d\'authentification' ) log(sess.data['user'] + ' erreur d\'authentification' )
page.add('<font color="red">Erreur d\'authentification !</font><br><br>') page.add('<font color="red">Erreur d\'authentification !</font><br><br>')
action = 'auth' action = 'auth'
###################################################### ######################################################
# page : authentification # page : authentification
@ -136,33 +136,33 @@ if action == 'auth' :
if action == 'desactive' and bornes_modifiables : if action == 'desactive' and bornes_modifiables :
if form.getvalue('borne','') in bornes_modifiables : if form.getvalue('borne','') in bornes_modifiables :
log(sess.data['user'] + ' a désactivé %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a désactivé %s' % form.getvalue('borne','') )
page.add('<font color="blue">La borne <b>%s</b> sera d&eacute;sactiv&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') ) page.add('<font color="blue">La borne <b>%s</b> sera d&eacute;sactiv&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') )
borne = db.search('host=%s.wifi.crans.org' % form.getvalue('borne',''), 'w' )['machine'][0] borne = db.search('host=%s.wifi.crans.org' % form.getvalue('borne',''), 'w' )['machine'][0]
if int(borne.puissance()) > 0 : if int(borne.puissance()) > 0 :
borne.puissance(-int(borne.puissance())) borne.puissance(-int(borne.puissance()))
borne.save() borne.save()
action = 'liste-bornes' action = 'liste-bornes'
else : else :
log(sess.data['user'] + ' a tenté de désactiver %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a tenté de désactiver %s' % form.getvalue('borne','') )
action = 'erreur-droits' action = 'erreur-droits'
###################################################### ######################################################
# activation d'un borne # activation d'un borne
if action == 'active' and bornes_modifiables : if action == 'active' and bornes_modifiables :
if form.getvalue('borne','') in bornes_modifiables : if form.getvalue('borne','') in bornes_modifiables :
log(sess.data['user'] + ' a activé %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a activé %s' % form.getvalue('borne','') )
page.add('<font color="blue">La borne <b>%s</b> sera r&eacute;activ&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') ) page.add('<font color="blue">La borne <b>%s</b> sera r&eacute;activ&eacute;e dans quelques instants</font><br><br>' % form.getvalue('borne','') )
borne = db.search('host=%s.wifi.crans.org' % form.getvalue('borne',''),'w' )['machine'][0] borne = db.search('host=%s.wifi.crans.org' % form.getvalue('borne',''),'w' )['machine'][0]
if int(borne.puissance()) < 0 : if int(borne.puissance()) < 0 :
borne.puissance(int(borne.puissance().replace('-',''))) borne.puissance(int(borne.puissance().replace('-','')))
borne.save() borne.save()
action = 'liste-bornes' action = 'liste-bornes'
else : else :
log(sess.data['user'] + ' a tenté d\'activer %s' % form.getvalue('borne','') ) log(sess.data['user'] + ' a tenté d\'activer %s' % form.getvalue('borne','') )
page.add('<font color="red">Vous n\'&ecirc;tes pas authoris&eacute; à modifier la borne <b>%s</b></font><br><br>' % form.getvalue('borne','') ) page.add('<font color="red">Vous n\'&ecirc;tes pas authoris&eacute; à modifier la borne <b>%s</b></font><br><br>' % form.getvalue('borne','') )
action = 'erreur-droits' action = 'erreur-droits'
###################################################### ######################################################
# page : liste des bornes # page : liste des bornes
@ -171,41 +171,41 @@ if action == 'liste-bornes' and bornes_modifiables :
page.sous_titre('Liste des bornes') page.sous_titre('Liste des bornes')
for b in bornes_modifiables : for b in bornes_modifiables :
try : try :
borne = db.search('host=%s.wifi.crans.org' % b)['machine'][0] borne = db.search('host=%s.wifi.crans.org' % b)['machine'][0]
except : except :
log('borne non existante : %s' % b) log('borne non existante : %s' % b)
continue continue
# formulaire # formulaire
page.add('<form method=\"POST\">') page.add('<form method=\"POST\">')
page.add('<input type="hidden" name="sid" value="%s">' % sid ) page.add('<input type="hidden" name="sid" value="%s">' % sid )
page.add('<input type="hidden" name="borne" value="%s">' % b) page.add('<input type="hidden" name="borne" value="%s">' % b)
# titre # titre
if '-' in borne.puissance() : if '-' in borne.puissance() :
# réactivation # réactivation
page.add('<b><u>%s</u></b> <font color="red">(borne d&eacute;sactiv&eacute;e)</font>' % borne.Nom().encode('iso-8859-15')) page.add('<b><u>%s</u></b> <font color="red">(borne d&eacute;sactiv&eacute;e)</font>' % borne.Nom().encode('iso-8859-15'))
page.add('<input type="hidden" name="action" value="active">') page.add('<input type="hidden" name="action" value="active">')
else : else :
# désctivation # désctivation
page.add('<b><u>%s</u></b> <font color="green">(borne activ&eacute;e)</font>' % borne.Nom().encode('iso-8859-15')) page.add('<b><u>%s</u></b> <font color="green">(borne activ&eacute;e)</font>' % borne.Nom().encode('iso-8859-15'))
page.add('<input type="hidden" name="action" value="desactive">') page.add('<input type="hidden" name="action" value="desactive">')
page.add('<br>') page.add('<br>')
# commentaires # commentaires
page.add('<table><tr><td width=\"20\">&nbsp;</td><td>') page.add('<table><tr><td width=\"20\">&nbsp;</td><td>')
page.add('<br>'.join( filter(lambda x : re.match("^\<.*\>", x) == None, borne.info() ) ).encode('iso-8859-15')) page.add('<br>'.join( filter(lambda x : re.match("^\<.*\>", x) == None, borne.info() ) ).encode('iso-8859-15'))
page.add('</td></tr></table>') page.add('</td></tr></table>')
# bouton de validation # bouton de validation
if '-' in borne.puissance() : if '-' in borne.puissance() :
page.add('<input type="submit" value="R&eacute;activer %s">' % b) page.add('<input type="submit" value="R&eacute;activer %s">' % b)
else : else :
page.add('<input type="submit" value="D&eacute;sactiver %s">' % b) page.add('<input type="submit" value="D&eacute;sactiver %s">' % b)
# fin du formulaire # fin du formulaire
page.add('</form>') page.add('</form>')
# menu de fin de page # menu de fin de page
page.add( "<center><table><tr><td>%s</td><td>%s</td><td>%s</td></tr></center>" % ( bouton(url,sid,'liste-bornes','Actualiser'), bouton_menu, bouton_quitter ) ) page.add( "<center><table><tr><td>%s</td><td>%s</td><td>%s</td></tr></center>" % ( bouton(url,sid,'liste-bornes','Actualiser'), bouton_menu, bouton_quitter ) )
@ -228,7 +228,7 @@ if action == 'index' :
# menu principal # menu principal
page.sous_titre("Menu principal") page.sous_titre("Menu principal")
if bornes_modifiables : if bornes_modifiables :
page.add('<a href="?sid=%s&action=liste-bornes">Activation/d&eacute;sactivation d\'une borne</a><br>' % sid ) page.add('<a href="?sid=%s&action=liste-bornes">Activation/d&eacute;sactivation d\'une borne</a><br>' % sid )
# menu de bas de page # menu de bas de page
page.add("<center>%s</center>" % bouton_quitter ) page.add("<center>%s</center>" % bouton_quitter )

View file

@ -7,85 +7,85 @@ from time import time
class session : class session :
def __init__ (self, sid = None) : def __init__ (self, sid = None) :
""" """
Si sid est fournit, on regarde si la session est valide ; Si sid est fournit, on regarde si la session est valide ;
on soulève un exeption si il y a un problème on soulève un exeption si il y a un problème
Si sid n'est pas fourni un créé une nouvelle session Si sid n'est pas fourni un créé une nouvelle session
""" """
self.save = True self.save = True
if sid : if sid :
# on vérifie la validité # on vérifie la validité
if not os.access( self._sess_file(sid), os.W_OK ) : if not os.access( self._sess_file(sid), os.W_OK ) :
raise ValueError, 'Session inconnue' raise ValueError, 'Session inconnue'
# on exporte le sid # on exporte le sid
self.sid = sid self.sid = sid
# on lit les données # on lit les données
self.data = {} self.data = {}
f = open(self._sess_file(sid)) f = open(self._sess_file(sid))
for i in f.readlines() : for i in f.readlines() :
if not i.strip() : if not i.strip() :
continue continue
key = i.split(' ')[0] key = i.split(' ')[0]
value = ' '.join(i.split(' ')[1:]).strip() value = ' '.join(i.split(' ')[1:]).strip()
self.data[key] = value self.data[key] = value
if int(self.data['perime']) < int(time()) : if int(self.data['perime']) < int(time()) :
self.destroy() self.destroy()
raise ValueError, 'Session périmée' raise ValueError, 'Session périmée'
else : else :
# on créé un nouveau sid # on créé un nouveau sid
self.data = {} self.data = {}
ok = False ok = False
while not ok : while not ok :
sid = ''.join( [ random.choice('abcdefghijklmnopqrstuvwxyz0123456789') for i in range(0,30) ]) sid = ''.join( [ random.choice('abcdefghijklmnopqrstuvwxyz0123456789') for i in range(0,30) ])
# est ce que la session existe ? # est ce que la session existe ?
if not os.path.exists(self._sess_file(sid)) : if not os.path.exists(self._sess_file(sid)) :
# on créé un nouveau fichier avec un timeout de 60 # on créé un nouveau fichier avec un timeout de 60
f = os.open(self._sess_file(sid), os.O_WRONLY + os.O_CREAT , 0600) f = os.open(self._sess_file(sid), os.O_WRONLY + os.O_CREAT , 0600)
f f
# on valide # on valide
ok = True ok = True
self.sid = sid self.sid = sid
# on initialise les données # on initialise les données
self.data = {'timeout' : '600'} self.data = {'timeout' : '600'}
def _sess_file (self, sid = None) : def _sess_file (self, sid = None) :
""" Retourne le nom du fichier correspondant à la session """ """ Retourne le nom du fichier correspondant à la session """
if not sid : if not sid :
sid = self.sid sid = self.sid
return '/tmp/pysession-%s' % sid return '/tmp/pysession-%s' % sid
def __del__ (self) : def __del__ (self) :
""" On enregsitre la session à la destruction de l'instance """ """ On enregsitre la session à la destruction de l'instance """
if self.save : if self.save :
# epok de peromption # epok de peromption
self.data['perime'] = str(int(time() + int(self.data['timeout']))) self.data['perime'] = str(int(time() + int(self.data['timeout'])))
f = open(self._sess_file(), 'w') f = open(self._sess_file(), 'w')
for k in self.data.keys() : for k in self.data.keys() :
f.write( '%s %s\n' % (k,self.data[k]) ) f.write( '%s %s\n' % (k,self.data[k]) )
f.close() f.close()
def destroy(self) : def destroy(self) :
""" Supprime la session """ """ Supprime la session """
self.save = False self.save = False
os.remove( self._sess_file() ) os.remove( self._sess_file() )
# on supprime toutes les vieilles sessions # on supprime toutes les vieilles sessions
for file in os.listdir('/tmp') : for file in os.listdir('/tmp') :
if file[0:10] == 'pysession-' : if file[0:10] == 'pysession-' :
#print file[10:] #print file[10:]
try : try :
s = session(file[10:]) s = session(file[10:])
s.save = False s.save = False
except : except :
continue continue

View file

@ -16,10 +16,10 @@ def Cellule(texte, couleur, f) :
def execute(macro, text) : def execute(macro, text) :
try : try :
f = open('/usr/scripts/secours/etat_maitre') f = open('/usr/scripts/secours/etat_maitre')
if f.readline().strip() == 'normal' : if f.readline().strip() == 'normal' :
return Cellule('Nous sommes actuellement en connexion normale.','lime',macro.formatter) return Cellule('Nous sommes actuellement en connexion normale.','lime',macro.formatter)
else : else :
return Cellule('Nous sommes actuellement en connexion de secours.','red',macro.formatter) return Cellule('Nous sommes actuellement en connexion de secours.','red',macro.formatter)
except : except :
return Cellule('Impossible de déterminer l\'état de la connexion.','yellow',macro.formatter) return Cellule('Impossible de déterminer l\'état de la connexion.','yellow',macro.formatter)