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
: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):
: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):
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)