Detabification massive.
darcs-hash:20051018083823-d1718-09c2df38cfb707d3c3679188b9b9a812009f4f7c.gz
This commit is contained in:
parent
3c54fb2904
commit
37b21339a6
40 changed files with 1473 additions and 1473 deletions
|
@ -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))
|
||||||
|
|
|
@ -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 :
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'))
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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' :
|
||||||
|
|
|
@ -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 """
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 :
|
||||||
|
|
|
@ -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=[]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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) :
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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())
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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''
|
||||||
|
|
|
@ -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():
|
||||||
|
|
|
@ -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 :
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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\
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 :
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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+')
|
||||||
|
|
|
@ -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ésactivée dans quelques instants</font><br><br>' % form.getvalue('borne','') )
|
page.add('<font color="blue">La borne <b>%s</b> sera désactivé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éactivée dans quelques instants</font><br><br>' % form.getvalue('borne','') )
|
page.add('<font color="blue">La borne <b>%s</b> sera réactivé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\'êtes pas authorisé à modifier la borne <b>%s</b></font><br><br>' % form.getvalue('borne','') )
|
page.add('<font color="red">Vous n\'êtes pas authorisé à 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ésactivée)</font>' % borne.Nom().encode('iso-8859-15'))
|
page.add('<b><u>%s</u></b> <font color="red">(borne désactivé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ée)</font>' % borne.Nom().encode('iso-8859-15'))
|
page.add('<b><u>%s</u></b> <font color="green">(borne activé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\"> </td><td>')
|
page.add('<table><tr><td width=\"20\"> </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éactiver %s">' % b)
|
page.add('<input type="submit" value="Réactiver %s">' % b)
|
||||||
else :
|
else :
|
||||||
page.add('<input type="submit" value="Désactiver %s">' % b)
|
page.add('<input type="submit" value="Dé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ésactivation d\'une borne</a><br>' % sid )
|
page.add('<a href="?sid=%s&action=liste-bornes">Activation/dé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 )
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue