#! /usr/bin/env python # -*- coding: iso-8859-15 -*- import sys, sre from socket import gethostname hostname = gethostname().split(".")[0] # Fichiers à modifier et chaine indiquant un commentaire dans ceux-ci if hostname == 'zamok' : fichiers = { '/etc/bind/named.conf.options' : '//' , '/etc/postfix/main.cf' : '#' } elif hostname == 'sila' : fichiers = { '/etc/bind/named.conf.options' : '//' , '/etc/squid/squid.conf' : '#' } else : print "Script sans effet sur cette machine." sys.exit(1) def edit(file,comment,secours) : """ Edite le fichier fourni en commentant (mode normal) ou décommentant (mode secours) les lignes signalées : * celles se terminant avec #POUR SECOURS * ou les n lignes (<10)suivant une qui commande par #POUR SECOURS-n (si le -n est omis une seule ligne est affectée)""" signal = '#POUR SECOURS' l = len(signal) fd = open(file) line = fd.readline() new = '' reste = 0 # Nombre de lignes restant à traiter while line : l = line.rstrip() mo = sre.match('^(.*)'+signal+'(|-.)$',l) if (mo and len(mo.group(1)) > 1) or reste: # Ligne pour secours if not sre.match('^' + comment,l) and not secours: # On est actuellement configuré en secours # Il faut passer en normal new += comment + line elif sre.match('^' + comment,l) and secours : # On est actuellement configuré en normal # Il faut passer en secours new += line.replace(comment,'',1) else : # Rien à faire, on est bien configuré new += line if reste : reste -= 1 elif mo and len(mo.group(1)) == 0: # On a une ligne avec secours uniquement, c'est les n # prochaines lignes qui font foi try : reste = int(mo.group(2)[1:]) except : reste = 1 new += line else : # Ligne normale new += line line = fd.readline() fd.close() # Ecriture de la nouvelle version fd = open(file,'w') fd.write(new) fd.close() def usage() : print 'Usage : %s 0 pour reconfigurer les services locaux en normal' % sys.argv[0] print ' %s 1 pour reconfigurer les services locaux en secours' % sys.argv[0] print 'Fichiers modifiés par le changement de mode : \n\t', '\n\t'.join(fichiers.keys()) if __name__ == '__main__' : if len(sys.argv) != 2 : usage() else : mode = sys.argv[1] if mode not in '01' : usage() else : mode = int(mode) for f, c in fichiers.items() : try : print 'Edition de %s' % f edit(f,c,mode) except : import traceback traceback.print_exc()