diff --git a/gestion/gen_confs/droits.py b/gestion/gen_confs/droits.py index b0d7d6c3..659989e1 100755 --- a/gestion/gen_confs/droits.py +++ b/gestion/gen_confs/droits.py @@ -218,18 +218,23 @@ class droits(crans_ldap,gen_config) : import traceback traceback.print_exc() - self.anim = anim('\tenvoi de mails à roots') + self.anim = anim('\tenvoi d\'un mail à roots') try : - self.mail(self.uids) + from mail import mail_details + adherents = [] + for uid in self.uids : + adherents += self.search('uid=%s' % uid)['adherent'] + mail_details(adherents, Subject = 'Modification des droits d\'un adherent') self.anim.reinit() print OK except : + self.services_to_restart('droits',self.uids) self.anim.reinit() print ERREUR - if self.debug : + if self.debug : import traceback - traceback.print_exc() - + traceback.print_exc() + elif gethostname().split(".")[0] == 'nectaris': self.anim = anim('\tconfiguration master.passwd') try: @@ -243,31 +248,6 @@ class droits(crans_ldap,gen_config) : import traceback traceback.print_exc() - def mail (self, uids) : - """ Envoi un mail à roots pour dire que certains droits ont changé """ - - # base du mail - From = "roots@crans.org" - To = "roots@crans.org" - base_txt_mail = """From: %(From)s -To: %(To)s -Subject: Modifications des droits d'un adhérent - -%(Texte)s""" - - # boucle pour chaque adhérent modifié - for uid in uids : - try : - adh = self.search('uid=%s' % uid)['adherent'] - - if len(adh): - adh = adh[0] - conn=smtplib.SMTP(smtpserv) - conn.sendmail(From, To , base_txt_mail % { 'From' : From, 'To' : To, 'Texte' : adher_details(adh).encode('iso8859-15') }) - conn.quit() - except : - self.services_to_restart('droits',[uid]) - if __name__ == '__main__' : if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 : print "%s " % sys.argv[0].split('/')[-1].split('.')[0] diff --git a/gestion/gen_confs/firewall_komaz.py b/gestion/gen_confs/firewall_komaz.py index 5fe6f914..a59b614c 100755 --- a/gestion/gen_confs/firewall_komaz.py +++ b/gestion/gen_confs/firewall_komaz.py @@ -496,7 +496,19 @@ class firewall_komaz : for tache in to_do : self.__exception_catcher(tache) - + + # envoi d'un mail à roots + try : + from mail import mail_details + machines = [] + db = crans_ldap() + for ip in ip_list : + machines += db.search('ipHostNumber=%s' % ip)['machine'] + mail_details(machines, Subject = 'Modification du firewall de komaz concernant une machine') + #mail_details(machines, To = 'quenelle', Subject = 'Modification du firewall du CR@NS', no_ascii = True) + except : + pass + def mac_ip_maj(self,ip_list) : """ Mise à jour de la correspondance MAC-IP pour les ip fournies """ ## Que faut-il faire ? diff --git a/gestion/gen_confs/generate.py b/gestion/gen_confs/generate.py index 69ba0b13..ac3edd53 100755 --- a/gestion/gen_confs/generate.py +++ b/gestion/gen_confs/generate.py @@ -275,34 +275,26 @@ if hostname == 'zamok': traceback.print_exc() if 'mail_modification_machine' in to_do.keys() : - from whos import machine_details - if auto : db.services_to_restart('-mail_modification_machine') - cprint('Modification d\'une machine : envoie d\'un mail à roots@crans.org','gras') - for ip in to_do['mail_modification_machine'] : - anim('\t' + ip) - try : - From = "roots@crans.org" - To = "roots@crans.org" - base_txt_mail = """From: %(From)s -To: %(To)s -Subject: Modifications sur une machine du CR@NS + + cprint('Modification d\'une machine : envoi d\'un mail à roots@crans.org','gras') -%(Texte)s""" - machine = db.search('ipHostNumber=%s' % ip)['machine'] - if len(machine): - machine = machine[0] - conn=smtplib.SMTP(smtpserv) - conn.sendmail(From, To , base_txt_mail % { 'From' : From, 'To' : To, 'Texte' : machine_details(machine).encode('iso8859-15') }) - conn.quit() - print OK - else: - print "Machine qui n'existe plus" - except Exception, c: - print ERREUR - if auto : db.services_to_restart('mail_modification_machine',[ip]) - if debug : - import traceback - traceback.print_exc() + try : + from mail import mail_details + + # liste des machines + machines = [] + for ip in to_do['mail_modification_machine'] : + anim('\t' + ip) + machines += db.search('ipHostNumber=%s' % ip)['machine'] + + # envoi du mail + mail_details(machines, Subject = 'Modification d\'une machine de l\'association') + + if auto : db.services_to_restart('-mail_modification_machine') + print OK + + except : + print ERREUR if 'autostatus' in to_do.keys() : if auto : db.services_to_restart('-autostatus') diff --git a/gestion/mail.py b/gestion/mail.py new file mode 100755 index 00000000..bfaa231b --- /dev/null +++ b/gestion/mail.py @@ -0,0 +1,53 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- + +# Licence : GPLv2 + +import sys, smtplib +sys.path.append('/usr/scripts/gestion') + +from ldap_crans import smtpserv +from whos import machine_details, club_details, adher_details +from ldap_crans import adherent, club, machine + +def mail_details (Objets, Subject = "Modifications dans la base LDAP", To = ['chove@crans.org'], From = 'roots@crans.org', no_ascii = False ) : + """ + Envoie un mail à toutes les personnes des 'To', avec les informations + détaillées des objets contenus dans 'Objets' (instances de la classe + adherent, machine ou club) + + Si no_ascii est à True, on vire la couleur + """ + + if not len(Objets) : + return True + + base_txt_mail = """From: %(From)s +To: %(To)s +Subject: %(Subject)s + +%(Text)s""" + + details = [] + + for i in Objets : + if i.__class__ == machine : + details.append(machine_details(i)) + elif i.__class__ == adherent : + details.append(adher_details(i)) + elif i.__class__ == club : + details.append(club_details(i)) + else : + ok = False + + texte = '\n\n- - - - = = = = # # # # # # = = = = - - - -\n\n'.join(details) + + if no_ascii : + import sre + texte = sre.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',texte) + + mail_complet = base_txt_mail % { 'From' : From, 'To' : ','.join(To), 'Subject' : Subject, 'Text' : texte.encode('iso8859-15') } + + conn=smtplib.SMTP(smtpserv) + conn.sendmail(From, To , mail_complet) + conn.quit()