[tv, dns] Mutualisation des noms de domaines

This commit is contained in:
Valentin Samir 2013-09-05 20:03:31 +02:00
parent 13995bfe92
commit 9131575122
4 changed files with 68 additions and 19 deletions

View file

@ -23,6 +23,9 @@ master_tv = master
#: DNS slaves de la zone tv
slaves_tv = slaves
#: Zone tv
zone_tv = 'tv.crans.org'
#: DNS en connexion de secours
secours_relay='10.231.136.14';

View file

@ -121,7 +121,7 @@ la base LDAP
DNSs_private = []
ip_master_DNS = config.dns.master
zone_multicast = 'tv.crans.org'
zone_multicast = config.dns.zone_tv
### Liste des délégations de zone
# Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici
@ -235,7 +235,8 @@ zone "%(NOM_zone)s" {
return all(ord(c) < 128 for c in s)
def gen_tv(self):
from unidecode import unidecode
sys.path.append('/usr/scripts')
import tv.dns
serial = time.time() + 1000000000
zone_reverse=netv4_to_arpa(config.NETs['multicast'][0])[0]
sap=open('/usr/scripts/var/tv/sap.txt').readlines()
@ -250,25 +251,17 @@ zone "%(NOM_zone)s" {
lignes_d +='@\tIN\tA\t%s\n' % '138.231.136.88'
for line in sap:
[nom,ip]=line.split(':')
nom=re.sub('TNT([0-9]*) ','',nom) # on enlève les TNT## des noms
nom=nom.replace('TNT%2lcn ','') # on enlève les TNT## des noms
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=unicode(nom.lower(), 'utf-8')
nom_ascii=unidecode(nom)
if not self.is_ascii(nom):
nom="xn--%s" % nom.encode('punycode')
else:
nom=None
nom=unicode(nom, 'utf-8')
nom_ascii=tv.dns.ascii(nom)
nom_punycode=tv.dns.punycode(nom)
try:
[ip1,ip2,ip3,ip4]=ip.strip().split('.')
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)
if nom_punycode:
lignes_d +='%s\tIN\tA\t%s' % (nom_punycode, ip)
except:
pass
raise
# Écriture de la zone directe
file = self.DNS_DIR + 'db.' + self.zone_multicast
fd = self._open_conf(file,';')
@ -562,8 +555,8 @@ if __name__ == '__main__' :
c.gen_slave()
if hostname == short_name(dns.DNSs[0]):
print "Ce serveur est également serveur maitre, mais la reconfiguration du DNS maitre se fait par generate."
elif hostname == short_name(dns.DELEG['tv.crans.org'][0][0:-1]):
print "Serveur maᅵtre pour tv.crans.org, génération de la zone"
elif hostname == short_name(dns.DELEG[config.dns.zone_tv][0][0:-1]):
print "Serveur maître pour tv.crans.org, génération de la zone"
c = dns()
c.gen_tv()
import subprocess

49
tv/dns.py Normal file
View file

@ -0,0 +1,49 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
sys.path.append('/usr/scripts')
import re
from unidecode import unidecode
from gestion.config import dns
def is_ascii(s):
return all(ord(c) < 128 for c in s)
def _sanitize(nom):
nom=re.sub('TNT([0-9]*) ','',nom) # on enlève les TNT## des noms
nom=nom.replace('TNT%2lcn ','') # on enlève les TNT## des noms
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
return nom.lower()
def _fqdn(bool):
if bool:
return ".%s" % dns.zone_tv
else:
return ""
def _check_unicode(nom):
if not isinstance(nom, unicode):
raise UnicodeError("%r should by an unicode string" % nom)
def punycode(nom, fqdn=False):
_check_unicode(nom)
if is_ascii(nom):
return None
else:
return "xn--%s%s" % (_sanitize(nom).encode('punycode'), _fqdn(fqdn))
def ascii(nom, fqdn=False):
_check_unicode(nom)
return "%s%s" % (unidecode(_sanitize(nom)), _fqdn(fqdn))
def idn(nom, fqdn=False, charset='utf-8'):
_check_unicode(nom)
if charset:
return "%s%s" % (_sanitize(nom).encode(charset), _fqdn(fqdn))
else:
return u"%s%s" % (_sanitize(nom), _fqdn(fqdn))

View file

@ -1,3 +1,7 @@
import sys
sys.path.append('/usr/scripts/')
import tv.dns
sys.path.pop()
Dependencies = ["Time"]
@ -28,7 +32,7 @@ def get_channel_list():
for a_line in s:
try:
ch_name, ch_ip = a_line.split(":")
url = "udp://@%s:1234" % ch_ip
url = unicode("udp://@%s:1234" % tv.dns.idn(unicode(ch_name, 'utf-8'), True), 'utf-8')
d = {
"name": ch_name,
"url": url,