diff --git a/README b/README index ef1348d..e3957d5 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ Public version of the DNSSEC key rollover monitor and checker. -The tool has been described in a paper released at the SATIN conference -. See the paper at +The tool has been described in a paper released at the SATIN conference +. See the paper at . @@ -9,8 +9,9 @@ Basic instructions: 1) sqlite3 dnssec.sqlite < create.sql -2) Edit ~/.key-report.ini may be using key-report.ini.sample as a -starting point. +2) Edit ~/.key-report.ini; you can use key-report.ini.sample as a +starting point. Set fileonly to a file which is appended to if +you don't want to (or can't) send e-mail. 3) while true: key-store-and-report.py $YOURDOMAIN $YOURSERVER diff --git a/key-report.ini.sample b/key-report.ini.sample index b8a6432..cf078a1 100644 --- a/key-report.ini.sample +++ b/key-report.ini.sample @@ -3,3 +3,4 @@ mailserver: smtp.example.net prefix: DNSSEC Check of my zones maintainer: John.Foo@bar.example output: false +fileonly: /path/to/file diff --git a/key-store-and-report.py b/key-store-and-report.py index 5c23267..ae91465 100755 --- a/key-store-and-report.py +++ b/key-store-and-report.py @@ -25,6 +25,7 @@ maintainer_address = "foo@bar" output = True syslog = False +file_only = False SECTION = "default" version = sys.argv[0] + " $Revision: 10774 $ (Python %s)" % \ re.sub ("\n", " ", sys.version) @@ -35,6 +36,7 @@ # prefix: DNSSEC Check at AFNIC # maintainer: Stephane.Bortzmeyer+dnssec-key-check@nic.fr # timeout: 10 +# fileonly: xxxx.out # append output to file; no mail is sent class DNSerror(Exception): pass @@ -49,10 +51,23 @@ def sendemail(subject, content): (maintainer_address, maintainer_address, ("[%s] " % email_prefix) + subject, version)) msg = msg + content + "\r\n" - server = smtplib.SMTP(mail_server) - server.set_debuglevel(0) - server.sendmail(maintainer_address, maintainer_address, msg) - server.quit() + + if file_only: + timestr = time.strftime("%Y-%m-%d %H:%M:%S %z") + msg = ("%s -- %s\n" % (timestr, subject)) + msg = msg + content + "\n" + try: + f = open(file_only, 'a') + f.write(msg) + f.close() + except Exception, e: + print "Cannot open output file {0}: {1}".format(file_only, str(e)) + sys.exit(2) + else: + server = smtplib.SMTP(mail_server) + server.set_debuglevel(0) + server.sendmail(maintainer_address, maintainer_address, msg) + server.quit() def get_rr(zone, rrtype, ns_address, handler=None): """ rrtype must be a character _string_. handler is a function @@ -135,8 +150,12 @@ def update_zones(set): if len(sys.argv) != 3: raise Exception("Usage: dnssec.py zonename nameserver-address") -config = ConfigParser.SafeConfigParser() -config.readfp(open(os.path.expanduser("~/.key-report.ini"))) +try: + config = ConfigParser.SafeConfigParser() + config.readfp(open(os.path.expanduser("~/.key-report.ini"))) +except: + print "Cannot open config file {0}".format(os.path.expanduser("~/.key-report.ini")) + sys.exit(2) if config.has_option(SECTION, 'mailserver'): mail_server = config.get(SECTION, 'mailserver') @@ -152,6 +171,8 @@ def update_zones(set): output = config.getboolean(SECTION, 'output') if config.has_option(SECTION, 'syslog'): syslog = config.getboolean(SECTION, 'syslog') +if config.has_option(SECTION, 'fileonly'): + file_only = config.get(SECTION, 'fileonly') generator = random.Random() formatter_long = logging.Formatter('%(name)s: %(asctime)s %(levelname)s %(message)s', '%Y-%m-%d %H:%M:%S')