Better catching of specific exceptions instead of try: except:

Added verification of password/keyname
This commit is contained in:
2004-01-23 12:59:17 +00:00
parent f5521e6230
commit de0e8d27d6

View File

@@ -156,9 +156,14 @@ def update(msg):
import dns.tsigkeyring
import dns.update
# The name of the key and the secret
keyring = dns.tsigkeyring.from_text({
import binascii # for exception handling
try:
keyring = dns.tsigkeyring.from_text({
msg['keyname']: msg['keysecret']
})
})
except binascii.Error:
msg['error'].append("Your password is incorrect.")
return
# dns.update.Update(name of domain, keyring, 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'])
# doit, servername
import socket # Import socket so we can catch exceptions
try:
response = dns.query.tcp(update, '217.78.32.198')
except:
except socket.error:
msg['error'].append("An error occurred in the server communication.")
return
except dns.tsig.BadSignature:
msg['error'].append("Your password could not be verified.\n Check your password and keyname.")
return
# Verify response
if not msg.has_key('quiet'):
@@ -183,8 +192,10 @@ 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:
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):
# Check if the ip address exists and if it needs an update
import dns.resolver
ip = ""
host = msg['hostname'] + "." + msg['domain']
try:
ans = dns.resolver.query(msg['hostname'] + "." + msg['domain'], 'A')
ans = dns.resolver.query(host, 'A')
for res in ans:
ip = res.to_text()
except:
ip = ""
except dns.exception.Timeout:
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'):
msg['error'].append("Nameserver already up to date")