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) :
|
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()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue