diff --git a/TODO b/TODO index d20f59c..19aaa13 100644 --- a/TODO +++ b/TODO @@ -23,6 +23,7 @@ Done: -k keyname -n hostname -p password + -q quiet -t ttl - Auto-detect the machine's external ip address' Should work on OS X, Linux and Windows. diff --git a/dnsupdate.py b/dnsupdate.py index 1d30c00..db7eea3 100644 --- a/dnsupdate.py +++ b/dnsupdate.py @@ -2,11 +2,13 @@ # dnsupdate.py # Updates a dynamic dns-record using a TSIG key. + def checkerror(msg): if len(msg['error']) > 0: - for error in msg['error']: - print "Error: %s" % error - print "Use -h for help" + if not msg.has_key('quiet'): + for error in msg['error']: + print "Error: %s" % error + print "Use -h for help" return 1 else: return 0 @@ -35,6 +37,9 @@ def getparams(msg): parser.add_option("-c", "--config", type="string", help="Alternate config file") + parser.add_option("--delete", + action="store_true", + help="Remove the host from the zone") parser.add_option("-d", "--domain", type="string", help="Domain to update") @@ -50,6 +55,9 @@ def getparams(msg): parser.add_option("-p", "--password", type="string", help="TSIG key") + parser.add_option("-q", "--quiet", + action="store_true", + help="Quit mode") parser.add_option("-t", "--ttl", type="int", help="TTL in seconds") @@ -68,6 +76,8 @@ def getparams(msg): if ip: msg['ipaddress'] = ip + if options.delete: + msg['delete'] = options.delete if options.domain: msg['domain'] = options.domain if options.keyname: @@ -76,9 +86,12 @@ def getparams(msg): msg['hostname'] = options.name if options.password: msg['keysecret'] = options.password + if options.quiet: + msg['quiet'] = options.quiet if options.ttl: msg['ttl'] = options.ttl - + + return msg @@ -120,8 +133,11 @@ def update(msg): # dns.update.Update(name of domain, keyring, keyname) update = dns.update.Update(msg['domain'], keyring=keyring, keyname=msg['keyname']) - # update.replace(hostname, ttl, record-type, new ip) - update.replace(msg['hostname'], msg['ttl'], 'a', msg['ipaddress']) + if msg.has_key('delete'): + update.delete(msg['hostname']) + else: + # update.replace(hostname, ttl, record-type, new ip) + update.replace(msg['hostname'], msg['ttl'], 'a', msg['ipaddress']) # doit, servername try: @@ -131,10 +147,14 @@ def update(msg): return # Verify response - if response.rcode() == 0: - print "Host '%s.%s' has been added with ip address %s" % (msg['hostname'], msg['domain'], msg['ipaddress']) - else: - print "An error has occurred, the server returned:\n%s" % response + if not msg.has_key('quiet'): + if response.rcode() == 0: + if msg.has_key("delete"): + 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']) + else: + print "An error has occurred, the server returned:\n%s" % response @@ -167,12 +187,15 @@ def verify_ip(msg): except: ip = "" - if ip == msg['ipaddress']: + if ip == msg['ipaddress'] and not msg.has_key('delete'): msg['error'].append("Nameserver already up to date") + elif ip == "" and msg.has_key('delete'): + msg['error'].append("Nameserver does not recognise the hostname") return msg if __name__=="__main__": + import sys msg = {} msg['error'] = [] @@ -183,3 +206,8 @@ if __name__=="__main__": if err == 0: update(msg) checkerror(msg) + if err == 0: + sys.exit(0) + + sys.exit(1) +