Commit 608a39c6 authored by Valentin Samir's avatar Valentin Samir
Browse files

[bind] Alias de zone plus propre

On ajoute des alias de v6.zone.crans.org vers zone.v6.crans.org
vu que le reverse est déjà sur v6.zone.crans.org
parent 447d028d
......@@ -97,6 +97,13 @@ la base LDAP
'adm.crans.org': 'adm.v6.crans.org',
'ferme.crans.org': 'ferme.v6.crans.org',
}
zone_alias.update({
'wifi.v6.crans.eu': ['v6.wifi.crans.eu'],
'wifi.v6.crans.org': ['v6.wifi.crans.org'],
'adm.v6.crans.org': ['v6.adm.crans.org'],
'ferme.v6.crans.org': ['v6.ferme.crans.org'],
})
# Résolution inverse
zones_reverse = config.dns.zones_reverse
zones_v6_to_net = {
......@@ -273,6 +280,9 @@ zone "%(NOM_zone)s" {
""" Génération du fichier de config de zone pour les esclaves """
zones = self.zones_direct
zones.extend(self.zones_v4_to_v6.values())
zones.extend([z for l in self.zone_alias.values() for z in l])
zones = list(set(zones))
zones.sort()
# Ajout des zones reverse
for net in self.zones_reverse:
......@@ -311,7 +321,7 @@ zone "%(NOM_zone)s" {
### Serveurs de mail
MX='; Serveurs de mails\n'
for m in self.MXs :
MX += '%(zone)s.\t' # Sera remplacé par le nom de zone plus tard
MX += '@\t' # Sera remplacé par le nom de zone plus tard
MX += 'IN\tMX\t%s.\n' % m
MX += '\n'
......@@ -325,22 +335,6 @@ zone "%(NOM_zone)s" {
#direct["crans.org"] = "\n; irc.crans.org -> irc.rezosup.org\n"
#direct["crans.org"] += "irc\tIN\tCNAME\tirc.rezosup.org.\n\n"
### Ajout des parametres SPF
direct['crans.org'] +='; Parametres SPF\n'
direct['crans.org'] +='crans.org.\tIN\tTXT\t"v=spf1 a mx ?all"\n'
for m in self.MXs:
direct['crans.org'] +='%s.\tIN\tTXT\t"v=spf1 a ?all"\n' % m.split()[-1]
direct['crans.org'] += '\n'
direct['crans.ens-cachan.fr'] ='; Parametres SPF\n'
direct['crans.ens-cachan.fr'] +='crans.ens-cachan.fr.\tIN\tTXT\t"v=spf1 a:crans.org mx ?all"\n\n'
### Ajout d'eventuels champs SRV
direct['crans.org'] +='; Champs SRV\n'
for s in self.SRVs:
direct['crans.org'] += s + '\n'
direct['crans.org'] += '\n'
### Tri des machines
self.anim.iter=len(self.machines)
for machine in self.machines :
......@@ -376,9 +370,6 @@ zone "%(NOM_zone)s" {
direct[zone] = direct.get(zone, "") + ligne
if isinstance(machine,ldap_crans.BorneWifi):
direct['ap.crans.org'] = direct.get('ap.crans.org', "") + ligne
if zone in self.zone_alias:
for alias in self.zone_alias[zone]:
direct[alias] = direct.get(alias, "") + ligne
elif self.verbose and machine.nom() != "ftp.federez.net":
warnings += u'Résolution directe ignorée (mid=%s) : zone non autoritaire (%s)\n' % ( machine.id().encode('utf-8'), zone.encode('utf-8') )
......@@ -392,13 +383,6 @@ zone "%(NOM_zone)s" {
direct[zone_v6] = direct.get(zone_v6, "") + ligne
if machine.dnsIpv6():
direct[zone] = direct.get(zone, "") + ligne
if zone in self.zone_alias:
for alias in self.zone_alias[zone]:
if alias in self.zones_v4_to_v6:
alias_v6=self.zones_v4_to_v6[alias]
direct[alias_v6] = direct.get(alias_v6, "") + ligne
if machine.dnsIpv6():
direct[alias] = direct.get(alias, "") + ligne
# Reverse
zone_rev, length = self.reverse(net_v6, ipv6)
rev = '.'.join(ipv6.reverse_dns.split('.')[:length])
......@@ -414,24 +398,15 @@ zone "%(NOM_zone)s" {
ligne = "@\tIN\tA\t%s\n" % machine.ip()
ligne = ligne.encode('utf-8')
direct[alias] = direct.get(alias, "") + ligne
if alias in self.zone_alias:
for alias2 in self.zone_alias[alias]: direct[alias2] = direct.get(alias2, "") + ligne
if machine.dnsIpv6():
ligne = "@\tIN\tAAAA\t%s\n" % machine.ipv6()
ligne = ligne.encode('utf-8')
direct[alias]= direct.get(alias, "") + ligne
if alias in self.zone_alias:
for alias2 in self.zone_alias[alias]: direct[alias2] = direct.get(alias2, "") + ligne
if alias in self.zones_v4_to_v6:
ligne = "@\tIN\tAAAA\t%s\n" % machine.ipv6()
ligne = ligne.encode('utf-8')
zone6 = self.zones_v4_to_v6[alias]
direct[zone6] = direct.get(zone6, '') + ligne
if alias in self.zone_alias:
for alias2 in self.zone_alias[alias]:
if alias2 in self.zones_v4_to_v6:
alias26=self.zones_v4_to_v6[alias2]
direct[alias26] = direct.get(alias26, "") + ligne
continue
# Bon format ?
......@@ -456,12 +431,6 @@ zone "%(NOM_zone)s" {
zone6 = self.zones_v4_to_v6[zone]
ligne = "%s\tIN\tCNAME\t%s.\n" % ( nom, machine.nom6() )
direct[zone6] = direct.get(zone6, '') + ligne
if zone in self.zone_alias:
for alias in self.zone_alias[zone]:
direct[alias] = direct.get(alias, '') + ligne
if alias in self.zones_v4_to_v6:
alias6 = self.zones_v4_to_v6[alias]
direct[alias6] = direct.get(alias6, '') + ligne
# Le reverse
ip = machine.ip()
......@@ -480,13 +449,44 @@ zone "%(NOM_zone)s" {
### Ajouts pour les fichiers de résolution directs
for zone in direct.keys() :
# MXs
direct[zone] = MX % { 'zone' : zone } + direct[zone]
direct[zone] = MX + direct[zone]
### XXX: création de la zone inverse pour le /48 IPv6 complet du Cr@ns
full_net_v6 = self.zones_v6_to_net["##HACK##"]
zone_rev, length = self.reverse(full_net_v6, netaddr.IPNetwork(full_net_v6).first)
reverse[zone_rev] = reverse.get(zone_rev, "")
### Alias de zone
zone_todo = [zone for zone in self.zone_alias]
while zone_todo:
for zone in zone_todo:
for alias in self.zone_alias[zone]:
try:
direct[alias] = direct[zone]
zone_todo.remove(zone)
except KeyError:
pass
if alias in self.zones_v4_to_v6:
alias_v6=self.zones_v4_to_v6[alias]
zone_v6 = self.zones_v4_to_v6[zone]
direct[alias_v6] = direct[zone_v6]
### Ajout des parametres SPF
direct['crans.org'] +='; Parametres SPF\n'
direct['crans.org'] +='crans.org.\tIN\tTXT\t"v=spf1 a mx ?all"\n'
for m in self.MXs:
direct['crans.org'] +='%s.\tIN\tTXT\t"v=spf1 a ?all"\n' % m.split()[-1]
direct['crans.org'] += '\n'
direct['crans.ens-cachan.fr'] ='; Parametres SPF\n'
direct['crans.ens-cachan.fr'] +='crans.ens-cachan.fr.\tIN\tTXT\t"v=spf1 a:crans.org mx ?all"\n\n'
### Ajout d'eventuels champs SRV
direct['crans.org'] +='; Champs SRV\n'
for s in self.SRVs:
direct['crans.org'] += s + '\n'
direct['crans.org'] += '\n'
### Ajout des délégations de zones
for deleg in self.DELEG.keys():
nom, zone = deleg.split('.',1)
......@@ -496,14 +496,12 @@ zone "%(NOM_zone)s" {
for serv in self.DELEG[deleg]:
direct[zone] = direct[zone] + "%s\tIN\tNS\t%s\n" % ( nom, serv )
for zone in self.zones_direct:
for zone in direct.keys():
child, parent = zone.split('.',1)
if not zone in self.DELEG.keys() and parent in self.zones_direct:
if not zone in self.DELEG.keys() and parent in self.zones_direct + [z for l in self.zone_alias.values() for z in l] + self.zones_v4_to_v6.values():
for d in self.DNSs:
direct[parent] = direct.get(parent, "") + '%s\tIN\tNS %s\n' % (child, d)
if zone in self.zones_v4_to_v6.keys():
for d in self.DNSs:
direct[parent] = direct.get(parent, "") + '%s.\tIN\tNS %s\n' % (self.zones_v4_to_v6[zone], d)
direct[parent] = direct.get(parent, "") + '%s\tIN\tNS %s.\n' % (child, d)
### Ajout d'eventuel champs DS pour les délégation dnssec
for zone,ds in self.DS.items():
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment