Advertisement
bomba

evil

Jun 5th, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. #from subprocess import call
  4. #import boto.route53
  5.  
  6. #import re
  7. import os
  8. #import sys
  9. import tempfile
  10. import shutil
  11.  
  12. #rc = call("./digger.sh", shell=True)
  13. file_domini = open("lista_con_ns_novanet.txt", "r")
  14. dir_name = '/var/named/'
  15. filename_suffix = '.zone'
  16. bad_words = ['TTL']
  17. prep_str = "$TTL 1d"
  18.  
  19.  
  20. def line_prepender(filename, line):
  21.     """ aggiunge a inizio
  22.    file la stringa $TTL 1d"""
  23.     with open(filename, 'r+') as f:
  24.         content = f.read()
  25.         f.seek(0, 0)
  26.         f.write(line.rstrip('\r\n') + '\n' + content)
  27.  
  28.  
  29. def create_temporary_copy(path):
  30.     """ crea file temporaneo"""
  31.     temp_dir = tempfile.gettempdir()
  32.     temp_path = os.path.join(temp_dir, 'zone_file.tmp')
  33.     shutil.copy2(path,  temp_path)
  34.     return temp_path
  35.  
  36.  
  37. def zone_file_checker(percorso_file):
  38.     """ aggiunge, modifica e verifica
  39.    le condizioni per cui il file di zona
  40.     sia corretto e non dia problemi
  41.     in fase di migrazione"""
  42.     file_di_zona = open(filename, 'r')
  43.     text = file_di_zona.read()
  44.  
  45.     # copio file_di_zona su tmp, e rimuovo righe di eventuali
  46.     # occorrenze di TTL
  47.     with open(create_temporary_copy(filename), 'r+') as tmp:
  48.  
  49.         for line in text:
  50.  
  51.             # vedi context manager e any
  52.             if not any(bad_word in line for bad_word in bad_words):
  53.                 tmp.write(line)
  54.  
  55.             # aggiungo $TTL 1d in prepending
  56.             line_prepender(tmp, prep_str)
  57.  
  58.             # aggiungo @ davanti agli mx records
  59.             if line.lstrip().startswith('IN') and 'MX' in line:
  60.                 line = "@" + line[1:]
  61.                 tmp.write(line)
  62.         # esco
  63.         print tmp
  64.         tmp.close()
  65.     file_di_zona.close()
  66.  
  67. print "controllo nomi di dominio"
  68.  
  69. # funzione principale
  70.  
  71. for riga in file_domini:
  72.     # modifico casi particolari
  73.     if not riga.startswith('('):
  74.  
  75.         if riga.startswith('design4resilience.com'):
  76.             riga = riga.replace('4', '_for_')
  77.  
  78.         # rimpiazzo seguendo la sintassi del nome
  79.         zone_name = riga.replace('.', '_').replace('\n', '')
  80.  
  81.         filename = dir_name + zone_name + filename_suffix
  82.         print filename
  83.  
  84.         count = 0
  85.         try:
  86.             zone_file_checker(filename)
  87.  
  88.         except IOError as e:
  89.             count += 1
  90.             # print filename + ":"
  91.             print "    I/O error({0}): {1}".format(e.errno, e.strerror)
  92.  
  93. if count > 0:
  94.             print "IOError: %d nomi di dominio non trovati" % count
  95.  
  96. file_domini.close()
  97.  
  98.  
  99.  
  100. # conn = boto.route53.connect_to_region('eu-west-1')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement