From cd4000b45d502be878bac2f701ce0fed385ac1ef Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Thu, 5 Sep 2013 10:07:23 +0200 Subject: [PATCH] [bind] Du punycode dans la zone tv \(^_^)/ --- gestion/gen_confs/bind.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index 16c9782d..47824e40 100755 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -229,11 +229,16 @@ zone "%(NOM_zone)s" { return ('.'.join(rev_dns_a[1:]), 1) elif n.version == 6: return ('.'.join(rev_dns_a[(128-n.prefixlen)/4:]), (128-n.prefixlen)/4) + + + def is_ascii(self, s): + return all(ord(c) < 128 for c in s) def gen_tv(self): + from unidecode import unidecode serial = time.time() + 1000000000 zone_reverse=netv4_to_arpa(config.NETs['multicast'][0])[0] - sap=open('/tmp/chaines_recup_sap.txt').readlines() + sap=open('/usr/scripts/var/tv/sap.txt').readlines() DNS='; DNS de la zone par ordre de priorité\n' for d in self.DELEG[self.zone_multicast] : @@ -250,11 +255,18 @@ zone "%(NOM_zone)s" { nom=nom.replace('&','and') # on enlève les TNT## des noms nom=re.sub(' +([^ ])','-\g<1>',nom) # on remplaces les espaces intérieur par un tiret nom=re.sub('[ .():,"\'+<>]','',nom) # on enlève tous les caractères illégaux - nom=nom.lower() + nom=unicode(nom.lower(), 'utf-8') + nom_ascii=unidecode(nom) + if not self.is_ascii(nom): + nom="xn--%s" % nom.encode('punycode') + else: + nom=None try: [ip1,ip2,ip3,ip4]=ip.strip().split('.') - lignes_r += '%s.%s.%s\tIN\tPTR\t%s.%s.\n' % (ip4,ip3,ip2,nom,self.zone_multicast) - lignes_d +='%s\tIN\tA\t%s' % (nom,ip) + lignes_r += '%s.%s.%s\tIN\tPTR\t%s.%s.\n' % (ip4,ip3,ip2,nom_ascii,self.zone_multicast) + lignes_d +='%s\tIN\tA\t%s' % (nom_ascii,ip) + if nom: + lignes_d +='%s\tIN\tA\t%s' % (nom,ip) except: pass # Écriture de la zone directe