Better catching of specific exceptions instead of try: except:
Added verification of password/keyname
This commit is contained in:
25
dnsupdate.py
25
dnsupdate.py
@@ -156,9 +156,14 @@ def update(msg):
|
|||||||
import dns.tsigkeyring
|
import dns.tsigkeyring
|
||||||
import dns.update
|
import dns.update
|
||||||
# The name of the key and the secret
|
# The name of the key and the secret
|
||||||
|
import binascii # for exception handling
|
||||||
|
try:
|
||||||
keyring = dns.tsigkeyring.from_text({
|
keyring = dns.tsigkeyring.from_text({
|
||||||
msg['keyname']: msg['keysecret']
|
msg['keyname']: msg['keysecret']
|
||||||
})
|
})
|
||||||
|
except binascii.Error:
|
||||||
|
msg['error'].append("Your password is incorrect.")
|
||||||
|
return
|
||||||
|
|
||||||
# dns.update.Update(name of domain, keyring, keyname)
|
# dns.update.Update(name of domain, keyring, keyname)
|
||||||
update = dns.update.Update(msg['domain'], keyring=keyring, keyname=msg['keyname'])
|
update = dns.update.Update(msg['domain'], keyring=keyring, keyname=msg['keyname'])
|
||||||
@@ -170,11 +175,15 @@ def update(msg):
|
|||||||
update.replace(msg['hostname'], msg['ttl'], 'a', msg['ipaddress'])
|
update.replace(msg['hostname'], msg['ttl'], 'a', msg['ipaddress'])
|
||||||
|
|
||||||
# doit, servername
|
# doit, servername
|
||||||
|
import socket # Import socket so we can catch exceptions
|
||||||
try:
|
try:
|
||||||
response = dns.query.tcp(update, '217.78.32.198')
|
response = dns.query.tcp(update, '217.78.32.198')
|
||||||
except:
|
except socket.error:
|
||||||
msg['error'].append("An error occurred in the server communication.")
|
msg['error'].append("An error occurred in the server communication.")
|
||||||
return
|
return
|
||||||
|
except dns.tsig.BadSignature:
|
||||||
|
msg['error'].append("Your password could not be verified.\n Check your password and keyname.")
|
||||||
|
return
|
||||||
|
|
||||||
# Verify response
|
# Verify response
|
||||||
if not msg.has_key('quiet'):
|
if not msg.has_key('quiet'):
|
||||||
@@ -183,8 +192,10 @@ def update(msg):
|
|||||||
print "Host '%s.%s' has been deleted" % (msg['hostname'], msg['domain'])
|
print "Host '%s.%s' has been deleted" % (msg['hostname'], msg['domain'])
|
||||||
else:
|
else:
|
||||||
print "Host '%s.%s' has been added with ip address %s" % (msg['hostname'], msg['domain'], msg['ipaddress'])
|
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:
|
else:
|
||||||
print "An error has occurred, the server returned:\n%s" % response
|
msg['error'].append("Update refused, the server returned:\n%s" % response)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -211,12 +222,16 @@ def validate(msg):
|
|||||||
def verify_ip(msg):
|
def verify_ip(msg):
|
||||||
# Check if the ip address exists and if it needs an update
|
# Check if the ip address exists and if it needs an update
|
||||||
import dns.resolver
|
import dns.resolver
|
||||||
|
ip = ""
|
||||||
|
host = msg['hostname'] + "." + msg['domain']
|
||||||
try:
|
try:
|
||||||
ans = dns.resolver.query(msg['hostname'] + "." + msg['domain'], 'A')
|
ans = dns.resolver.query(host, 'A')
|
||||||
for res in ans:
|
for res in ans:
|
||||||
ip = res.to_text()
|
ip = res.to_text()
|
||||||
except:
|
except dns.exception.Timeout:
|
||||||
ip = ""
|
msg['error'].append("Connection timeout, could not connect to nameserver.\n")
|
||||||
|
except dns.resolver.NXDOMAIN:
|
||||||
|
pass
|
||||||
|
|
||||||
if ip == msg['ipaddress'] and not msg.has_key('delete'):
|
if ip == msg['ipaddress'] and not msg.has_key('delete'):
|
||||||
msg['error'].append("Nameserver already up to date")
|
msg['error'].append("Nameserver already up to date")
|
||||||
|
|||||||
Reference in New Issue
Block a user