From b77ad783b16857e017b0d224936ebbe209968098 Mon Sep 17 00:00:00 2001 From: bernat Date: Thu, 10 Mar 2005 10:44:02 +0100 Subject: [PATCH] Detabification darcs-hash:20050310094402-d1718-ce1d8a54b2086e8554e3b250d4d64c6b59917e5e.gz --- gestion/gen_confs/bind.py | 188 +++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index 8ff8245e..b0eed897 100755 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -14,7 +14,7 @@ from iptools import AddrInNet, AddrInNets class dns(gen_config) : """ Génération des fichiers de configuration de bind9 : - * fichier DNS_CONF qui contient les définitions de zone conformément + * fichier DNS_CONF qui contient les définitions de zone conformément à zone_template. Ce fichier doit être inclus à partir de la config statique de bind * les fichiers de zones, ce sont eux qui contiennent les données du @@ -56,7 +56,7 @@ $TTL 86400 21600 ; refresh (s) 3600 ; retry (s) 1209600 ; expire (s) - 86400 ; TTL (s) + 86400 ; TTL (s) ) """ @@ -85,37 +85,37 @@ zone "%(NOM_zone)s" { ######################################FIN PARTIE DE CONFIGURATION def __str__(self) : - return "DNS" + return "DNS" def gen_slave(self) : - """ Génération du fichier de config de zone pour les esclaves """ - zones = self.zones_direct - - # Ajout des zones reverse - for net in self.zones_reverse : - print net - n = map(int,net.split('/')[0].split('.')[:3]) - print n - while 1 : - n[2] += 1 - print n - if not AddrInNet("%d.%d.%d.1" % tuple(n),net): - break - else : - n.reverse() - zones.append("%d.%d.%d.in-addr.arpa" % tuple(n)) - n.reverse() - - # Ecriture - fd = self._open_conf(self.DNS_CONF,'//') - for zone in zones : - fd.write(self.zone_template_slave % { 'NOM_zone' : zone, - 'FICHIER_zone' : self.DNS_DIR + 'db.' + zone }) - + """ Génération du fichier de config de zone pour les esclaves """ + zones = self.zones_direct + + # Ajout des zones reverse + for net in self.zones_reverse : + print net + n = map(int,net.split('/')[0].split('.')[:3]) + print n + while 1 : + n[2] += 1 + print n + if not AddrInNet("%d.%d.%d.1" % tuple(n),net): + break + else : + n.reverse() + zones.append("%d.%d.%d.in-addr.arpa" % tuple(n)) + n.reverse() + + # Ecriture + fd = self._open_conf(self.DNS_CONF,'//') + for zone in zones : + fd.write(self.zone_template_slave % { 'NOM_zone' : zone, + 'FICHIER_zone' : self.DNS_DIR + 'db.' + zone }) + fd.close() - + def _gen(self) : - ### Génération du numéro de série + ### Génération du numéro de série # Le + 1000.... s'explique pas l'idée précédente et peu pratique d'avoir # le numéro de série du type AAAAMMJJNN (année, mois, jour, incrément par jour) serial = time.time() + 1000000000 @@ -137,69 +137,69 @@ zone "%(NOM_zone)s" { direct = {} # format : { zone : [ lignes correspondantes] } reverse = {} warnings = '' - - self.anim.iter=len(self.machines) - for machine in self.machines : - self.anim.cycle() - - # Calculs préliminaires - try : - nom , zone = machine.nom().split('.',1) - zone = zone.encode('iso-8859-1') - except : - warnings += u'Machine ignorée (mid=%s) : format nom incorrect (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.nom().encode('iso-8859-1') ) - continue + + self.anim.iter=len(self.machines) + for machine in self.machines : + self.anim.cycle() - # Le direct - if zone in self.zones_direct : - ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() ) - try : direct[zone] += ligne - except : direct[zone] = ligne - elif self.verbose : - warnings += u'Résolution directe ignorée (mid=%s) : zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), zone.encode('iso-8859-1') ) + # Calculs préliminaires + try : + nom , zone = machine.nom().split('.',1) + zone = zone.encode('iso-8859-1') + except : + warnings += u'Machine ignorée (mid=%s) : format nom incorrect (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.nom().encode('iso-8859-1') ) + continue - # Le direct avec alias - for alias in machine.alias() : - # Cas particulier : nom de l'alias = nom de la zone - if alias in self.zones_direct : - ligne = "@\tIN\tA\t%s\n" % machine.ip() - ligne = ligne.encode('iso-8859-1') - alias = alias.encode('iso-8859-1') - try : direct[alias] += ligne - except : direct[alias] = ligne - continue - - # Bon format ? - alias_l = alias.split('.') - ok = 0 - for i in range(len(alias_l)) : - zone_essai = '.'.join(alias_l[i:]) - if zone_essai in self.zones_direct : - # On est autoritaire sur cette zone - # On place donc l'alias dans le fichier de cette zone - zone = zone_essai - nom = '.'.join(alias_l[:i]) - ok = 1 - break - if not ok : - warnings += u'Alias ignoré (mid=%s) : %s\n' % ( machine.id().encode('iso-8859-1'), alias.encode('iso-8859-1') ) - continue - zone = zone.encode('iso-8859-1') - ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom() ) - try : direct[zone] += ligne - except : direct[zone] = ligne - - # Le reverse - if AddrInNets(machine.ip(), self.zones_reverse) : - base_ip = machine.ip().split('.') - base_ip.reverse() - zone = "%s.%s.%s.in-addr.arpa" % tuple(base_ip[1:]) - zone = zone.encode('iso-8859-1') - ligne = '%s\tIN\tPTR\t%s.\n' % (base_ip[0],machine.nom()) - try : reverse[zone] += ligne - except : reverse[zone] = ligne - elif self.verbose : - warnings += u'Résolution inverse ignorée (mid=%s) : ip sur zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.ip().encode('iso-8859-1') ) + # Le direct + if zone in self.zones_direct : + ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() ) + try : direct[zone] += ligne + except : direct[zone] = ligne + elif self.verbose : + warnings += u'Résolution directe ignorée (mid=%s) : zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), zone.encode('iso-8859-1') ) + + # Le direct avec alias + for alias in machine.alias() : + # Cas particulier : nom de l'alias = nom de la zone + if alias in self.zones_direct : + ligne = "@\tIN\tA\t%s\n" % machine.ip() + ligne = ligne.encode('iso-8859-1') + alias = alias.encode('iso-8859-1') + try : direct[alias] += ligne + except : direct[alias] = ligne + continue + + # Bon format ? + alias_l = alias.split('.') + ok = 0 + for i in range(len(alias_l)) : + zone_essai = '.'.join(alias_l[i:]) + if zone_essai in self.zones_direct : + # On est autoritaire sur cette zone + # On place donc l'alias dans le fichier de cette zone + zone = zone_essai + nom = '.'.join(alias_l[:i]) + ok = 1 + break + if not ok : + warnings += u'Alias ignoré (mid=%s) : %s\n' % ( machine.id().encode('iso-8859-1'), alias.encode('iso-8859-1') ) + continue + zone = zone.encode('iso-8859-1') + ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom() ) + try : direct[zone] += ligne + except : direct[zone] = ligne + + # Le reverse + if AddrInNets(machine.ip(), self.zones_reverse) : + base_ip = machine.ip().split('.') + base_ip.reverse() + zone = "%s.%s.%s.in-addr.arpa" % tuple(base_ip[1:]) + zone = zone.encode('iso-8859-1') + ligne = '%s\tIN\tPTR\t%s.\n' % (base_ip[0],machine.nom()) + try : reverse[zone] += ligne + except : reverse[zone] = ligne + elif self.verbose : + warnings += u'Résolution inverse ignorée (mid=%s) : ip sur zone non autoritaire (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.ip().encode('iso-8859-1') ) ### Ajouts pour les fichiers de résolution directs for zone in direct.keys() : @@ -230,8 +230,8 @@ zone "%(NOM_zone)s" { if __name__ == '__main__' : from socket import gethostname if gethostname().split(".")[0] == 'zamok' : - print "Ce serveur est maître !, utiliser generate." + print "Ce serveur est maître !, utiliser generate." else : - print "Reconfiguration de bind en esclave (penser à le relancer)." - c = dns() - c.gen_slave() + print "Reconfiguration de bind en esclave (penser à le relancer)." + c = dns() + c.gen_slave()