[bind.py] Ajout des DS pour wifi.crans.eu et v6.crans.eu, ajout des champs SSHFP depuis ldap, hack sale avec os.chmod pour que bind puisse toujours écrire dans les fichiers de zone sur les slaves même quand "quelqu'un" lance un generate.py --dns

Ignore-this: e90db43493bb2e4f69e27518f755ae16

darcs-hash:20130112034846-3a55a-ffc5138ac8e44f6a171df956804bec91e22d613b.gz
This commit is contained in:
Valentin Samir 2013-01-12 04:48:46 +01:00
parent bb54dec933
commit d859a4e0e8

View file

@ -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') )
@ -385,6 +393,13 @@ zone "%(NOM_zone)s" {
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 = ''
for zone, lignes in direct.items() + reverse.items() :
@ -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}