diff --git a/gestion/gen_confs/generate.py b/gestion/gen_confs/generate.py index 8ba45d3d..80110cd1 100755 --- a/gestion/gen_confs/generate.py +++ b/gestion/gen_confs/generate.py @@ -46,9 +46,9 @@ make_lock('auto_generate','Big lock',nowait=1) ##### Options fournies ? try : if len(sys.argv) > 1 : - options, arg = getopt.getopt(sys.argv[1:], 'h', args_autorises) + options, arg = getopt.getopt(sys.argv[1:], 'h', args_autorises) else : - options, arg = ( [],'') + options, arg = ( [],'') except getopt.error, msg : sys.stderr.write('%s\n' % msg) sys.exit(255) @@ -58,54 +58,54 @@ to_do = {} for opt, val in options : if opt == '--quiet' : - debug = 0 - + debug = 0 + elif opt == '--remove' : - for serv in val.split('&') : - print 'Supression de %s' % serv - db.services_to_restart('-%s' % serv) - sys.exit(0) - + for serv in val.split('&') : + print 'Supression de %s' % serv + db.services_to_restart('-%s' % serv) + sys.exit(0) + elif opt == '--list' : - print 'Services à redémarrer :' - print db.services_to_restart() - sys.exit(0) - + print 'Services à redémarrer :' + print db.services_to_restart() + sys.exit(0) + elif opt == '--reconnect' : - # Personnes à reconnecter - print 'Recheche personnes en fin de sanction.' - hier = strftime('%d/%m/%Y %H:%M'.split()[0],localtime(time()-60*60*24)) - c = db.search('blacklist=*,%s*' % hier) - services = [] - for a_reco in c['adherent'] + c['machine'] + c['club'] : - for bl in a_reco.blacklist() : - fin, sanction = bl.split(',')[1:3] - if fin.split()[0] == hier and sanction not in services : - services.append(sanction) - for s in services : - print "Ajout de blacklist_%s pour reconfiguration" % s - db.services_to_restart('blacklist_%s' % s.encode()) - sys.exit(0) - + # Personnes à reconnecter + print 'Recheche personnes en fin de sanction.' + hier = strftime('%d/%m/%Y %H:%M'.split()[0],localtime(time()-60*60*24)) + c = db.search('blacklist=*,%s*' % hier) + services = [] + for a_reco in c['adherent'] + c['machine'] + c['club'] : + for bl in a_reco.blacklist() : + fin, sanction = bl.split(',')[1:3] + if fin.split()[0] == hier and sanction not in services : + services.append(sanction) + for s in services : + print "Ajout de blacklist_%s pour reconfiguration" % s + db.services_to_restart('blacklist_%s' % s.encode()) + sys.exit(0) + elif opt=='--add' : - # Ajout d'un item dans les services à redémarrer - for serv in val.split('&') : - if serv.find(',')!=-1 : - serv, arg = serv.split(',',1) - arg = arg.split(',') - else : - arg = [] - - print 'Ajout de %s (%s)' % ( serv, arg ) - db.services_to_restart(serv, arg) - sys.exit(0) - + # Ajout d'un item dans les services à redémarrer + for serv in val.split('&') : + if serv.find(',')!=-1 : + serv, arg = serv.split(',',1) + arg = arg.split(',') + else : + arg = [] + + print 'Ajout de %s (%s)' % ( serv, arg ) + db.services_to_restart(serv, arg) + sys.exit(0) + elif opt =='-h' or opt == '--help' : - print __doc__ % { 'prog' : sys.argv[0].split('/')[-1] , 'options' : '\n\t'.join(args_autorises) } - sys.exit(0) - + print __doc__ % { 'prog' : sys.argv[0].split('/')[-1] , 'options' : '\n\t'.join(args_autorises) } + sys.exit(0) + elif len(opt)>2 and opt[:2]=='--' : - to_do[opt[2:]] = val.split('&') + to_do[opt[2:]] = val.split('&') ##### Lecture de la base LDAP si besion ce qu'il y a a faire et préparation if not to_do : @@ -123,32 +123,32 @@ if hostname == 'zamok': if auto : db.services_to_restart('-del_user') cprint('Archivage fichiers utilisateur','gras') for args in to_do['del_user'] : - anim('\t' + args) - try : - login, home = args.split(',') - if not login or not home : - raise ValueError('Argument invalide') - warn = '' - f = config.cimetiere + '/files/' + strftime('%Y-%m-%d-%Hh%Mm_') + login + '.tar.bz2' - status, output = commands.getstatusoutput("tar cjf '%s' '%s' /var/spool/mail/%s" % ( f,home,login) ) - if ( status != 512 and status!=0 ) or not os.path.isfile(f) : - # La 512 est si un des paths n'exite pas. - raise OSError(output) - if os.path.isdir(home) and os.stat(home)[4] >= 500 : - shutil.rmtree(home) - else : - warn += '%s incorrect\n' % home - if os.path.isfile('/var/spool/mail/' + login ) : - os.unlink('/var/spool/mail/' + login) - else : - warn += '/var/spool/mail/%s incorrect\n' % login - - if warn : + anim('\t' + args) + try : + login, home = args.split(',') + if not login or not home : + raise ValueError('Argument invalide') + warn = '' + f = config.cimetiere + '/files/' + strftime('%Y-%m-%d-%Hh%Mm_') + login + '.tar.bz2' + status, output = commands.getstatusoutput("tar cjf '%s' '%s' /var/spool/mail/%s" % ( f,home,login) ) + if ( status != 512 and status!=0 ) or not os.path.isfile(f) : + # La 512 est si un des paths n'exite pas. + raise OSError(output) + if os.path.isdir(home) and os.stat(home)[4] >= 500 : + shutil.rmtree(home) + else : + warn += '%s incorrect\n' % home + if os.path.isfile('/var/spool/mail/' + login ) : + os.unlink('/var/spool/mail/' + login) + else : + warn += '/var/spool/mail/%s incorrect\n' % login + + if warn : print WARNING if debug : sys.stderr.write(warn) - else : - print OK + else : + print OK except : print ERREUR # On devra le refaire la prochaine fois @@ -163,30 +163,30 @@ if hostname == 'zamok': for args in to_do['home'] : anim('\t' + args) try : - home, uid, login = args.split(',') - ### Home - if not os.path.exists(home) : - # Le home n'existe pas - os.mkdir(home, 0755) - os.chown(home, int(uid) ,config.gid) - elif os.path.isdir(home) : - # Il y un répertoire existant - # Bon UID ? - stat = os.stat(home) - if stat[4] != int(uid) or stat[5] != config.gid : - # Le home n'est pas à la bonne personne - raise OSError('home existant') - - ### Mail - try : - os.mkdir(home + '/Mail', 0700) - os.chown(home + '/Mail', int(uid) ,config.gid) - except : - # Pas grave - pass - - ### Quota - status, output = commands.getstatusoutput('/usr/sbin/edquota -p pauget %s' % login ) + home, uid, login = args.split(',') + ### Home + if not os.path.exists(home) : + # Le home n'existe pas + os.mkdir(home, 0755) + os.chown(home, int(uid) ,config.gid) + elif os.path.isdir(home) : + # Il y un répertoire existant + # Bon UID ? + stat = os.stat(home) + if stat[4] != int(uid) or stat[5] != config.gid : + # Le home n'est pas à la bonne personne + raise OSError('home existant') + + ### Mail + try : + os.mkdir(home + '/Mail', 0700) + os.chown(home + '/Mail', int(uid) ,config.gid) + except : + # Pas grave + pass + + ### Quota + status, output = commands.getstatusoutput('/usr/sbin/edquota -p pauget %s' % login ) if status : print WARNING if debug : @@ -200,12 +200,12 @@ if hostname == 'zamok': if debug : import traceback traceback.print_exc() - + if 'mail_bienvenue' in to_do.keys() : if auto : db.services_to_restart('-mail_bienvenue') cprint('Envoi mail de bienvenue','gras') for mail in to_do['mail_bienvenue'] : - anim('\t' + mail) + anim('\t' + mail) try : From = "respbats@crans.org" To = mail @@ -216,11 +216,11 @@ if hostname == 'zamok': print OK except Exception, c: print ERREUR - if auto : db.services_to_restart('mail_bienvenue',[mail]) + if auto : db.services_to_restart('mail_bienvenue',[mail]) if debug : import traceback traceback.print_exc() - + if 'ML-ENS' in to_do.keys() : if auto : db.services_to_restart('-ML-ENS') cprint('Inscription ML-ENS','gras') @@ -239,27 +239,27 @@ if hostname == 'zamok': if 'droits' in to_do.keys() : if auto : db.services_to_restart('-droits') db.services_to_restart('droits-nectaris') - try: + try: from gen_confs.droits import droits a = droits() - a.uids = to_do['droits'] + a.uids = to_do['droits'] a.debug = debug a.reconfigure() except: if auto : db.services_to_restart('droits',to_do['droits']) - + if 'blacklist_upload' in to_do.keys() : - if auto : db.services_to_restart('-blacklist_upload') - db.services_to_restart('bl_squid_upload') - db.services_to_restart('firewall-komaz-blacklist') - try: - from gen_confs.firewall import bl_upload_fw - a = bl_upload_fw() - a.debug = debug - a.reconfigure() - except: - if auto: db.services_to_restart('blacklist_upload') - + if auto : db.services_to_restart('-blacklist_upload') + db.services_to_restart('bl_squid_upload') + db.services_to_restart('firewall-komaz-blacklist') + try: + from gen_confs.firewall import bl_upload_fw + a = bl_upload_fw() + a.debug = debug + a.reconfigure() + except: + if auto: db.services_to_restart('blacklist_upload') + if 'switch' in to_do.keys() : if auto : db.services_to_restart('-switch') try: @@ -268,44 +268,44 @@ if hostname == 'zamok': a.debug = debug a.reconfigure() except: - if auto : db.services_to_restart('switch',to_do['switch']) - sys.stdout.write('Erreur dans la config des switchs.\n') - if debug : - import traceback - traceback.print_exc() + if auto : db.services_to_restart('switch',to_do['switch']) + sys.stdout.write('Erreur dans la config des switchs.\n') + if debug : + import traceback + traceback.print_exc() if 'mail_modification_machine' in to_do.keys() : - + cprint('Modification d\'une machine : envoi d\'un mail à roots@crans.org','gras') - try : - from mail import mail_details + try : + from mail import mail_details - # liste des machines - machines = [] - for ip in to_do['mail_modification_machine'] : - anim('\t' + ip) - print OK - 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 + # liste des machines + machines = [] + for ip in to_do['mail_modification_machine'] : + anim('\t' + ip) + print OK + 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 + except : + print ERREUR if 'autostatus' in to_do.keys() : if auto : db.services_to_restart('-autostatus') - try: - from autostatus import autostatus - a = autostatus() - a.debug = debug - a.reconfigure() - except: - if auto : db.services_to_restart('autostatus') + try: + from autostatus import autostatus + a = autostatus() + a.debug = debug + a.reconfigure() + except: + if auto : db.services_to_restart('autostatus') # Les services suivants ont besoin de la liste des machines # On va donc la lire une seule fois pour leur passer ensuite @@ -346,7 +346,7 @@ elif hostname == 'nectaris': except: if auto : db.services_to_restart('conf_wifi') sys.stdout.write('Erreur dans la config du wifi.\n') - + if 'dhcp-nectaris' in to_do.keys() : from gen_confs.dhcpd import dhcp inst.append([dhcp(),"dhcp-nectaris"]) @@ -365,7 +365,7 @@ elif hostname == 'nectaris': # Pas terrible : on va redemarrer les bornes qui ont redemarré correctement if auto : db.services_to_restart('bornes_wifi', to_do['bornes_wifi']) sys.stdout.write('Erreur dans la config des bornes wifi.\n') - + if 'droits-nectaris' in to_do.keys(): if auto : db.services_to_restart('-droits-nectaris') try: @@ -375,97 +375,97 @@ elif hostname == 'nectaris': a.reconfigure() except: if auto : db.services_to_restart('droits-nectaris') - sys.stdout.write('Erreur dans la config des droits sur nectaris.\n') + sys.stdout.write('Erreur dans la config des droits sur nectaris.\n') if restart_wifi_update: os.system("cd / ; systrace -d /etc/systrace/wifi-update -A /usr/local/bin/twistd --syslog -o -y /usr/scripts/gestion/wifi-update.py --pidfile=/var/run/wifi-update.pid") elif hostname == 'sila' : if 'bl_carte_etudiant' in to_do.keys() : - if auto : db.services_to_restart('-bl_carte_etudiant') - try: - from gen_confs.squid import squid_carte - a = squid_carte() - a.debug = debug - a.reconfigure() - except: - if auto: db.services_to_restart('bl_carte_etudiant') + if auto : db.services_to_restart('-bl_carte_etudiant') + try: + from gen_confs.squid import squid_carte + a = squid_carte() + a.debug = debug + a.reconfigure() + except: + if auto: db.services_to_restart('bl_carte_etudiant') if 'blacklist_virus' in to_do.keys() : - if auto : db.services_to_restart('-blacklist_virus') - try: - from gen_confs.squid import squid_virus - a = squid_virus() - a.debug = debug - a.reconfigure() - except: - if auto: db.services_to_restart('blacklist_virus') + if auto : db.services_to_restart('-blacklist_virus') + try: + from gen_confs.squid import squid_virus + a = squid_virus() + a.debug = debug + a.reconfigure() + except: + if auto: db.services_to_restart('blacklist_virus') if 'blacklist_warez' in to_do.keys() : - if auto : db.services_to_restart('-blacklist_warez') - try: - from gen_confs.squid import squid_warez - a = squid_warez() - a.debug = debug - a.reconfigure() - except: - if auto: db.services_to_restart('blacklist_warez') - + if auto : db.services_to_restart('-blacklist_warez') + try: + from gen_confs.squid import squid_warez + a = squid_warez() + a.debug = debug + a.reconfigure() + except: + if auto: db.services_to_restart('blacklist_warez') + if 'bl_squid_upload' in to_do.keys() : - if auto : db.services_to_restart('-bl_squid_upload') - try: - from gen_confs.squid import squid_upload - a = squid_upload() - a.debug = debug - a.reconfigure() - except: - if auto: db.services_to_restart('bl_squid_upload') + if auto : db.services_to_restart('-bl_squid_upload') + try: + from gen_confs.squid import squid_upload + a = squid_upload() + a.debug = debug + a.reconfigure() + except: + if auto: db.services_to_restart('bl_squid_upload') if 'bl_chbre_invalide' in to_do.keys() : - if auto : db.services_to_restart('-bl_chbre_invalide') - try: - from gen_confs.squid import squid_chbre - a = squid_chbre() - a.debug = debug - a.reconfigure() - except: - if auto: db.services_to_restart('bl_chbre_invalide') + if auto : db.services_to_restart('-bl_chbre_invalide') + try: + from gen_confs.squid import squid_chbre + a = squid_chbre() + a.debug = debug + a.reconfigure() + except: + if auto: db.services_to_restart('bl_chbre_invalide') elif hostname == 'komaz' : if 'firewall-komaz' in to_do.keys() or \ 'firewall-komaz-ports' in to_do.keys() or \ 'firewall-komaz-blacklist' in to_do.keys() : - from firewall_komaz import firewall_komaz - fw = firewall_komaz() - fw.debug = debug - - cprint('Reconfiguration firewall','gras') - if 'firewall-komaz' in to_do.keys() : - if auto : db.services_to_restart('-firewall-komaz') - try : - fw.mac_ip_maj(to_do['firewall-komaz']) - except : - if auto : db.services_to_restart('firewall-komaz',to_do['firewall-komaz']) - - if 'firewall-komaz-ports' in to_do.keys() : - if auto : db.services_to_restart('-firewall-komaz-ports') - try : - fw.port_maj(to_do['firewall-komaz-ports']) - except : - if auto : db.services_to_restart('firewall-komaz-ports',to_do['firewall-komaz-ports']) - - if 'firewall-komaz-blacklist' in to_do.keys() : - if auto : db.services_to_restart('-firewall-komaz-blacklist') - try : - fw.blacklist() - except : - if auto : db.services_to_restart('firewall-komaz-blacklist',to_do['firewall-komaz-blacklist']) - + from firewall_komaz import firewall_komaz + fw = firewall_komaz() + fw.debug = debug + + cprint('Reconfiguration firewall','gras') + if 'firewall-komaz' in to_do.keys() : + if auto : db.services_to_restart('-firewall-komaz') + try : + fw.mac_ip_maj(to_do['firewall-komaz']) + except : + if auto : db.services_to_restart('firewall-komaz',to_do['firewall-komaz']) + + if 'firewall-komaz-ports' in to_do.keys() : + if auto : db.services_to_restart('-firewall-komaz-ports') + try : + fw.port_maj(to_do['firewall-komaz-ports']) + except : + if auto : db.services_to_restart('firewall-komaz-ports',to_do['firewall-komaz-ports']) + + if 'firewall-komaz-blacklist' in to_do.keys() : + if auto : db.services_to_restart('-firewall-komaz-blacklist') + try : + fw.blacklist() + except : + if auto : db.services_to_restart('firewall-komaz-blacklist',to_do['firewall-komaz-blacklist']) + # On indique que les services seront a priori redemarrés if auto : for i in inst: db.services_to_restart("-%s" % i[1]) -## On fait ce qu'il reste à faire +## On fait ce qu'il reste à faire if inst : # Récolte des données @@ -498,8 +498,8 @@ if inst : except : # Erreur, il faudra relancer le service la prochaine fois if auto : db.services_to_restart('%s' % i[1]) - sys.stdout.write('Erreur dans la config de %s.\n' % i[1]) - + sys.stdout.write('Erreur dans la config de %s.\n' % i[1]) + if debug : print 'Non traité ici mais signalé dans la base LDAP : \n\t', db.services_to_restart() diff --git a/gestion/mail.py b/gestion/mail.py index ecb32e13..81a3bd20 100755 --- a/gestion/mail.py +++ b/gestion/mail.py @@ -20,7 +20,7 @@ def mail_details (Objets, Subject = "Modifications dans la base LDAP", To = ['ro """ if not len(Objets) : - return True + return True base_txt_mail = """From: %(From)s To: %(To)s @@ -31,20 +31,20 @@ Subject: %(Subject)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 - + 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) + 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') }