From 8f63edec6efd4fe53d325560bc3df9e3082e51cb Mon Sep 17 00:00:00 2001 From: Fredrik Wahlberg Date: Fri, 23 Jan 2004 21:28:50 +0000 Subject: [PATCH] Added option for nameserver Fixed typo in get_ipaddress() Fixed minor bug in --showcfg Response codes from nameserver are reported directly to the user --- dnsupdate.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/dnsupdate.py b/dnsupdate.py index 0cce750..3dccdaa 100644 --- a/dnsupdate.py +++ b/dnsupdate.py @@ -21,7 +21,7 @@ def get_ipaddress(): # this host connects from import re import urllib - remote = opener = urllib.FancyURLopener({}) + opener = urllib.FancyURLopener({}) try: f = opener.open(msg['ipurl']) page = f.read() @@ -59,6 +59,9 @@ def getparams(msg): parser.add_option("-n", "--hostname", type="string", help="Hostname of local machine") + parser.add_option("--nameserver", + type="string", + help="Nameserver to send queries to") parser.add_option("-q", "--quiet", action="store_true", help="Quit mode") @@ -66,7 +69,7 @@ def getparams(msg): type="string", help="TSIG key") parser.add_option("--showcfg", - type="string", + action="store_true", help="Display config file data") parser.add_option("-u", "--ipurl", type="string", @@ -92,6 +95,7 @@ def getparams(msg): 'hostname', 'keyname', 'keysecret', + 'nameserver', 'quiet', 'showcfg', 'ttl', @@ -138,12 +142,10 @@ def readcfg(msg, show=""): if line.find("#", 0, 1) == 0 or not line: continue (key, value) = line.split('\t', 1) - if show: print "%s: %s" % (key.strip(), value.strip()) - if not value.strip().lower() == "false": - msg[key] = value.strip() + msg[key.strip()] = value.strip() cfgfile.close() return msg @@ -177,7 +179,7 @@ def update(msg): # doit, servername import socket # Import socket so we can catch exceptions try: - response = dns.query.tcp(update, '217.78.32.198') + response = dns.query.tcp(update, msg['nameserver']) except socket.error: msg['error'].append("An error occurred in the server communication.") return @@ -192,10 +194,12 @@ def update(msg): print "Host '%s.%s' has been deleted" % (msg['hostname'], msg['domain']) else: print "Host '%s.%s' has been added with ip address %s" % (msg['hostname'], msg['domain'], msg['ipaddress']) - elif response.rcode() == 5: - msg['error'].append("The server refused to accept the update") else: - msg['error'].append("Update refused, the server returned:\n%s" % response) + msg['error'].append("Update denied, server responded %s" % dns.rcode.to_text(response.rcode())) +## elif response.rcode() == 5: +## msg['error'].append("The server refused to accept the update") +## else: +## msg['error'].append("Update refused, the server returned:\n%s" % response) @@ -203,7 +207,7 @@ def validate(msg): import re import string # Verify all required data is present and sanity check incoming data - req_vals = ['domain', 'hostname', 'ipaddress', 'keyname', 'keysecret', 'ttl'] + req_vals = ['domain', 'hostname', 'ipaddress', 'keyname', 'keysecret', 'nameserver', 'ttl'] for value in req_vals: if not msg.has_key(value): msg['error'].append('Missing "%s" parameter' % value)