From d859a4e0e87b84354753354eff043ee563afa81a Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Sat, 12 Jan 2013 04:48:46 +0100 Subject: [PATCH] =?UTF-8?q?[bind.py]=20Ajout=20des=20DS=20pour=20wifi.cran?= =?UTF-8?q?s.eu=20et=20v6.crans.eu,=20ajout=20des=20champs=20SSHFP=20depui?= =?UTF-8?q?s=20ldap,=20hack=20sale=20avec=20os.chmod=20pour=20que=20bind?= =?UTF-8?q?=20puisse=20toujours=20=C3=A9crire=20dans=20les=20fichiers=20de?= =?UTF-8?q?=20zone=20sur=20les=20slaves=20m=C3=AAme=20quand=20"quelqu'un"?= =?UTF-8?q?=20lance=20un=20generate.py=20--dns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ignore-this: e90db43493bb2e4f69e27518f755ae16 darcs-hash:20130112034846-3a55a-ffc5138ac8e44f6a171df956804bec91e22d613b.gz --- gestion/gen_confs/bind.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index 2611f7de..336f3cde 100644 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -6,7 +6,7 @@ Copyright (C) Frédéric Pauget Licence : GPLv2 """ -import time, sys, re +import time, sys, re, hashlib, base64, os sys.path.append('/usr/scripts/gestion') from socket import gethostname from gen_confs import gen_config @@ -100,7 +100,12 @@ la base LDAP # DS à publier dans zone parentes : { parent : [ zone. TTL IN DS key_id algo_id 1 hash ] } # ex : { 'crans.eu' : ['wifi.crans.eu. 86400 IN DS 33131 8 1 3B573B0E2712D8A8B1B0C3'] } # /!\ Il faut faire attention au rollback des keys, il faudrait faire quelque chose d'automatique avec opendnssec - DS = {} + DS = { + 'crans.eu': [ + 'wifi.crans.eu. 3600 IN DS 49739 8 2 de49579462a8f439c9b1853c2a06d337ae4e5ffbd41c21449d4c7112794254ed', + 'v6.crans.eu. 3600 IN DS 81 8 2 36fa8d4782ecdbc25f0455e2c14aea899b86cf497ce78c7d90d1cf85647f5190', + ] + } ### Entète des fichiers de zone @@ -258,12 +263,6 @@ zone "%(NOM_zone)s" { direct['crans.org'] += s + '\n' direct['crans.org'] += '\n' - ### Ajout d'eventuel champs DS pour les délégation dnssec - for zone,ds in self.DS: - for s in ds: - direct[zone] += s + '\n' - direct[zone] += '\n' - ### Tri des machines self.anim.iter=len(self.machines) for machine in self.machines : @@ -281,6 +280,15 @@ zone "%(NOM_zone)s" { ligne = "%s\tIN\tA\t%s\n" % ( nom, machine.ip() ) if isinstance(machine,ldap_crans.BorneWifi) and machine.position(): ligne +="%s\tIN\tTXT\t\"LOC %s,%s\"\n" % (nom,machine.position()[0],machine.position()[1]) + for key in machine.sshFingerprint(): + try: + [algo,key]=key.split()[:2] + if algo == "ssh-rsa": algo=1 + elif algo == "ssh-dss": algo=2 + else: raise ValueError("Invalid Algorithms %s" % algo) + key=hashlib.sha1(base64.b64decode(key)).hexdigest() + ligne +="%s\tIN\tSSHFP\t%s\t1\t%s\n" % (nom,algo,key) + except(ValueError,TypeError): pass direct[zone] = direct.get(zone, "") + 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('iso-8859-1'), zone.encode('iso-8859-1') ) @@ -384,6 +392,13 @@ zone "%(NOM_zone)s" { direct['wifi.crans.eu']=re.sub('crans.org','crans.eu',direct['wifi.crans.org']) direct[self.zones_v4_to_v6['crans.eu']]=re.sub('crans.org','crans.eu',direct[self.zones_v4_to_v6['crans.org']]) direct[self.zones_v4_to_v6['wifi.crans.eu']]=re.sub('crans.org','crans.eu',direct[self.zones_v4_to_v6['wifi.crans.org']]) + + + ### Ajout d'eventuel champs DS pour les délégation dnssec + for zone,ds in self.DS.items(): + for s in ds: + direct[zone] += s + '\n' + direct[zone] += '\n' ### Ecriture des fichiers de zone et préparation du fichier de définition f = '' @@ -400,6 +415,7 @@ zone "%(NOM_zone)s" { fd.write(DNS) fd.write(lignes) fd.close() + os.chmod(file,0664) if short_name(gethostname()) in map(short_name, dns.DNSs[1:]): f += self.zone_template_slave % {'NOM_zone': zone, 'FICHIER_zone': path, 'ip_master_DNS': self.ip_master_DNS}