Detabification
darcs-hash:20050310094402-d1718-ce1d8a54b2086e8554e3b250d4d64c6b59917e5e.gz
This commit is contained in:
parent
e0a760034c
commit
b77ad783b1
1 changed files with 94 additions and 94 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue