[tv, dns] Mutualisation des noms de domaines
This commit is contained in:
parent
13995bfe92
commit
9131575122
4 changed files with 68 additions and 19 deletions
|
@ -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';
|
||||
|
||||
|
|
|
@ -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
49
tv/dns.py
Normal 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))
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue