[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
|
#: DNS slaves de la zone tv
|
||||||
slaves_tv = slaves
|
slaves_tv = slaves
|
||||||
|
|
||||||
|
#: Zone tv
|
||||||
|
zone_tv = 'tv.crans.org'
|
||||||
|
|
||||||
#: DNS en connexion de secours
|
#: DNS en connexion de secours
|
||||||
secours_relay='10.231.136.14';
|
secours_relay='10.231.136.14';
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ la base LDAP
|
||||||
DNSs_private = []
|
DNSs_private = []
|
||||||
ip_master_DNS = config.dns.master
|
ip_master_DNS = config.dns.master
|
||||||
|
|
||||||
zone_multicast = 'tv.crans.org'
|
zone_multicast = config.dns.zone_tv
|
||||||
|
|
||||||
### Liste des délégations de zone
|
### Liste des délégations de zone
|
||||||
# Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici
|
# 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)
|
return all(ord(c) < 128 for c in s)
|
||||||
|
|
||||||
def gen_tv(self):
|
def gen_tv(self):
|
||||||
from unidecode import unidecode
|
sys.path.append('/usr/scripts')
|
||||||
|
import tv.dns
|
||||||
serial = time.time() + 1000000000
|
serial = time.time() + 1000000000
|
||||||
zone_reverse=netv4_to_arpa(config.NETs['multicast'][0])[0]
|
zone_reverse=netv4_to_arpa(config.NETs['multicast'][0])[0]
|
||||||
sap=open('/usr/scripts/var/tv/sap.txt').readlines()
|
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'
|
lignes_d +='@\tIN\tA\t%s\n' % '138.231.136.88'
|
||||||
for line in sap:
|
for line in sap:
|
||||||
[nom,ip]=line.split(':')
|
[nom,ip]=line.split(':')
|
||||||
nom=re.sub('TNT([0-9]*) ','',nom) # on enlève les TNT## des noms
|
nom=unicode(nom, 'utf-8')
|
||||||
nom=nom.replace('TNT%2lcn ','') # on enlève les TNT## des noms
|
nom_ascii=tv.dns.ascii(nom)
|
||||||
nom=nom.replace('&','and') # on enlève les TNT## des noms
|
nom_punycode=tv.dns.punycode(nom)
|
||||||
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
|
|
||||||
try:
|
try:
|
||||||
[ip1,ip2,ip3,ip4]=ip.strip().split('.')
|
[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_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)
|
lignes_d +='%s\tIN\tA\t%s' % (nom_ascii,ip)
|
||||||
if nom:
|
if nom_punycode:
|
||||||
lignes_d +='%s\tIN\tA\t%s' % (nom,ip)
|
lignes_d +='%s\tIN\tA\t%s' % (nom_punycode, ip)
|
||||||
except:
|
except:
|
||||||
pass
|
raise
|
||||||
# Écriture de la zone directe
|
# Écriture de la zone directe
|
||||||
file = self.DNS_DIR + 'db.' + self.zone_multicast
|
file = self.DNS_DIR + 'db.' + self.zone_multicast
|
||||||
fd = self._open_conf(file,';')
|
fd = self._open_conf(file,';')
|
||||||
|
@ -562,8 +555,8 @@ if __name__ == '__main__' :
|
||||||
c.gen_slave()
|
c.gen_slave()
|
||||||
if hostname == short_name(dns.DNSs[0]):
|
if hostname == short_name(dns.DNSs[0]):
|
||||||
print "Ce serveur est également serveur maitre, mais la reconfiguration du DNS maitre se fait par generate."
|
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]):
|
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"
|
print "Serveur maître pour tv.crans.org, génération de la zone"
|
||||||
c = dns()
|
c = dns()
|
||||||
c.gen_tv()
|
c.gen_tv()
|
||||||
import subprocess
|
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"]
|
Dependencies = ["Time"]
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,7 +32,7 @@ def get_channel_list():
|
||||||
for a_line in s:
|
for a_line in s:
|
||||||
try:
|
try:
|
||||||
ch_name, ch_ip = a_line.split(":")
|
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 = {
|
d = {
|
||||||
"name": ch_name,
|
"name": ch_name,
|
||||||
"url": url,
|
"url": url,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue