]> ToastFreeware Gitweb - toast/tdyndns.git/blobdiff - bin/tdyndns_update
Now using common base class for exceptions.
[toast/tdyndns.git] / bin / tdyndns_update
index ea158328465cd7290c43473e93abc2d2a9f9e832..ce0b73a7510a7b0d163a8b1560b4988a6d07cbf0 100755 (executable)
@@ -2,16 +2,20 @@
 import sys
 import re
 import argparse
-from subprocess import Popen, PIPE
+from subprocess import Popen, PIPE, call
 import ipaddr
 
 
-class NsupdateError(Exception):
+class ExternalProgramError(RuntimeError):
+       pass
+
+
+class NsupdateError(ExternalProgramError):
        def __init__(self, returncode):
                self.returncode = returncode
 
 
-class BlockipError(Exception):
+class BlockipError(ExternalProgramError):
        def __init__(self, returncode):
                self.returncode = returncode
 
@@ -52,9 +56,9 @@ def blockip_whitelist_add(ip):
        :param ip: ipv4 address
        :raises a BlockipError in case of errors."""
        command = "iptables -I blockip -s {ip} -j ACCEPT".format(ip=ip)
-       p = Popen(command, shell=True)
-       if p.returncode != 0:
-               raise NsupdateError(p.returncode)
+       p = call(command, shell=True)
+       if p != 0:
+               raise BlockipError(p)
 
 
 def blockip_whitelist_delete(ip):
@@ -62,9 +66,9 @@ def blockip_whitelist_delete(ip):
        :param ip: ipv4 address
        :raises a BlockipError in case of errors."""
        command = "iptables -D blockip -s {ip} -j ACCEPT".format(ip=ip)
-       p = Popen(command, shell=True)
-       if p.returncode != 0:
-               raise NsupdateError(p.returncode)
+       p = call(command, shell=True)
+       if p != 0:
+               raise BlockipError(p)
 
 
 def main(args):
@@ -82,7 +86,7 @@ def main(args):
                        nsupdate_add(args.fqdn, args.ttl, args.ip)
                        if ipfamily_by_ip(args.ip) == 'A':
                                blockip_whitelist_add(args.ip)
-       except NsupdateError as e:
+       except ExternalProgramError as e:
                sys.exit(e.returncode)