Detabification

darcs-hash:20050310094402-d1718-ce1d8a54b2086e8554e3b250d4d64c6b59917e5e.gz
This commit is contained in:
bernat 2005-03-10 10:44:02 +01:00
parent e0a760034c
commit b77ad783b1

View file

@ -14,7 +14,7 @@ from iptools import AddrInNet, AddrInNets
class dns(gen_config) : class dns(gen_config) :
""" """
Génération des fichiers de configuration de bind9 : 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 à zone_template. Ce fichier doit être inclus à partir de la config statique
de bind de bind
* les fichiers de zones, ce sont eux qui contiennent les données du * les fichiers de zones, ce sont eux qui contiennent les données du
@ -56,7 +56,7 @@ $TTL 86400
21600 ; refresh (s) 21600 ; refresh (s)
3600 ; retry (s) 3600 ; retry (s)
1209600 ; expire (s) 1209600 ; expire (s)
86400 ; TTL (s) 86400 ; TTL (s)
) )
""" """
@ -85,37 +85,37 @@ zone "%(NOM_zone)s" {
######################################FIN PARTIE DE CONFIGURATION ######################################FIN PARTIE DE CONFIGURATION
def __str__(self) : def __str__(self) :
return "DNS" return "DNS"
def gen_slave(self) : def gen_slave(self) :
""" Génération du fichier de config de zone pour les esclaves """ """ Génération du fichier de config de zone pour les esclaves """
zones = self.zones_direct zones = self.zones_direct
# Ajout des zones reverse # Ajout des zones reverse
for net in self.zones_reverse : for net in self.zones_reverse :
print net print net
n = map(int,net.split('/')[0].split('.')[:3]) n = map(int,net.split('/')[0].split('.')[:3])
print n print n
while 1 : while 1 :
n[2] += 1 n[2] += 1
print n print n
if not AddrInNet("%d.%d.%d.1" % tuple(n),net): if not AddrInNet("%d.%d.%d.1" % tuple(n),net):
break break
else : else :
n.reverse() n.reverse()
zones.append("%d.%d.%d.in-addr.arpa" % tuple(n)) zones.append("%d.%d.%d.in-addr.arpa" % tuple(n))
n.reverse() n.reverse()
# Ecriture # Ecriture
fd = self._open_conf(self.DNS_CONF,'//') fd = self._open_conf(self.DNS_CONF,'//')
for zone in zones : for zone in zones :
fd.write(self.zone_template_slave % { 'NOM_zone' : zone, fd.write(self.zone_template_slave % { 'NOM_zone' : zone,
'FICHIER_zone' : self.DNS_DIR + 'db.' + zone }) 'FICHIER_zone' : self.DNS_DIR + 'db.' + zone })
fd.close() fd.close()
def _gen(self) : 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 + 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) # le numéro de série du type AAAAMMJJNN (année, mois, jour, incrément par jour)
serial = time.time() + 1000000000 serial = time.time() + 1000000000
@ -137,69 +137,69 @@ zone "%(NOM_zone)s" {
direct = {} # format : { zone : [ lignes correspondantes] } direct = {} # format : { zone : [ lignes correspondantes] }
reverse = {} reverse = {}
warnings = '' warnings = ''
self.anim.iter=len(self.machines) self.anim.iter=len(self.machines)
for machine in self.machines : for machine in self.machines :
self.anim.cycle() 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
# Le direct # Calculs préliminaires
if zone in self.zones_direct : try :
ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() ) nom , zone = machine.nom().split('.',1)
try : direct[zone] += ligne zone = zone.encode('iso-8859-1')
except : direct[zone] = ligne except :
elif self.verbose : warnings += u'Machine ignorée (mid=%s) : format nom incorrect (%s)\n' % ( machine.id().encode('iso-8859-1'), machine.nom().encode('iso-8859-1') )
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') ) continue
# Le direct avec alias # Le direct
for alias in machine.alias() : if zone in self.zones_direct :
# Cas particulier : nom de l'alias = nom de la zone ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() )
if alias in self.zones_direct : try : direct[zone] += ligne
ligne = "@\tIN\tA\t%s\n" % machine.ip() except : direct[zone] = ligne
ligne = ligne.encode('iso-8859-1') elif self.verbose :
alias = alias.encode('iso-8859-1') 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') )
try : direct[alias] += ligne
except : direct[alias] = ligne # Le direct avec alias
continue for alias in machine.alias() :
# Cas particulier : nom de l'alias = nom de la zone
# Bon format ? if alias in self.zones_direct :
alias_l = alias.split('.') ligne = "@\tIN\tA\t%s\n" % machine.ip()
ok = 0 ligne = ligne.encode('iso-8859-1')
for i in range(len(alias_l)) : alias = alias.encode('iso-8859-1')
zone_essai = '.'.join(alias_l[i:]) try : direct[alias] += ligne
if zone_essai in self.zones_direct : except : direct[alias] = ligne
# On est autoritaire sur cette zone continue
# On place donc l'alias dans le fichier de cette zone
zone = zone_essai # Bon format ?
nom = '.'.join(alias_l[:i]) alias_l = alias.split('.')
ok = 1 ok = 0
break for i in range(len(alias_l)) :
if not ok : zone_essai = '.'.join(alias_l[i:])
warnings += u'Alias ignoré (mid=%s) : %s\n' % ( machine.id().encode('iso-8859-1'), alias.encode('iso-8859-1') ) if zone_essai in self.zones_direct :
continue # On est autoritaire sur cette zone
zone = zone.encode('iso-8859-1') # On place donc l'alias dans le fichier de cette zone
ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom() ) zone = zone_essai
try : direct[zone] += ligne nom = '.'.join(alias_l[:i])
except : direct[zone] = ligne ok = 1
break
# Le reverse if not ok :
if AddrInNets(machine.ip(), self.zones_reverse) : warnings += u'Alias ignoré (mid=%s) : %s\n' % ( machine.id().encode('iso-8859-1'), alias.encode('iso-8859-1') )
base_ip = machine.ip().split('.') continue
base_ip.reverse() zone = zone.encode('iso-8859-1')
zone = "%s.%s.%s.in-addr.arpa" % tuple(base_ip[1:]) ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom() )
zone = zone.encode('iso-8859-1') try : direct[zone] += ligne
ligne = '%s\tIN\tPTR\t%s.\n' % (base_ip[0],machine.nom()) except : direct[zone] = ligne
try : reverse[zone] += ligne
except : reverse[zone] = ligne # Le reverse
elif self.verbose : if AddrInNets(machine.ip(), self.zones_reverse) :
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') ) 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 ### Ajouts pour les fichiers de résolution directs
for zone in direct.keys() : for zone in direct.keys() :
@ -230,8 +230,8 @@ zone "%(NOM_zone)s" {
if __name__ == '__main__' : if __name__ == '__main__' :
from socket import gethostname from socket import gethostname
if gethostname().split(".")[0] == 'zamok' : if gethostname().split(".")[0] == 'zamok' :
print "Ce serveur est maître !, utiliser generate." print "Ce serveur est maître !, utiliser generate."
else : else :
print "Reconfiguration de bind en esclave (penser à le relancer)." print "Reconfiguration de bind en esclave (penser à le relancer)."
c = dns() c = dns()
c.gen_slave() c.gen_slave()