diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index e7e4827e..2d7b68d1 100755 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -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():