X-Git-Url: https://git.ralfj.de/dyn-nsupdate.git/blobdiff_plain/5395e7dcae4d4263e5d84845097757dec5518bbf..1a68dfd140219eb54670d5c961d9d684a7c63666:/client-scripts/dyn-ns-client diff --git a/client-scripts/dyn-ns-client b/client-scripts/dyn-ns-client index 5006fbd..11e4512 100755 --- a/client-scripts/dyn-ns-client +++ b/client-scripts/dyn-ns-client @@ -29,7 +29,7 @@ VERBOSE_CHANGE = 1 VERBOSE_FULL = 2 def sslContext(config): - if config['DEFAULT']['ssl_check_cert'].lower() in ('0', 'false', 'no'): + if config['DEFAULT'].get('ssl_check_cert', 'yes').lower() in ('0', 'false', 'no'): context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) return context else: @@ -50,7 +50,10 @@ def getConfigDir(): return os.path.expanduser("~/.config/dyn-nsupdate") def urlopen(url, config): - return urllib.request.urlopen(url, context=sslContext(config)).read().decode('utf-8').strip() + if sys.version_info >= (3, 4, 3): + return urllib.request.urlopen(url, context=sslContext(config)).read().decode('utf-8').strip() + else: + return urllib.request.urlopen(url).read().decode('utf-8').strip() def getMyIP(family, config, methods = {}, verbose = 0): '''Returns our current IP address ( can be "IPv4" or "IPv6"), detected as given by the configuration. @@ -58,9 +61,15 @@ def getMyIP(family, config, methods = {}, verbose = 0): method = config[family]['method'] if method == 'none': return None + elif method == 'remove': + return "" elif method == 'web': server = config[family].get('server', config['DEFAULT']['server']) - ip = urlopen('https://'+server+'/checkip', config) + url = 'https://'+server+'/checkip' + try: + ip = urlopen(url, config) + except urllib.error.URLError: + raise Exception("Error fetching {}, make sure the URL is correct and the internet connection actually works.".format(url)) if verbose >= VERBOSE_FULL: print("Server",server,"says my",family,"is",ip) return ip @@ -140,9 +149,17 @@ def updateDomain(server, domain, ipv4, ipv6, password, config, verbose): if verbose >= VERBOSE_CHANGE: msg = "Successfully updated domain {} on {}:".format(domain, server) if ipv4 is not None: - msg += " IPv4={}".format(ipv4) + if curIPv4 == ipv4: + msg += " IPv4={} (unchanged)".format(curIPv4) + else: + msg += " IPv4={} -> {}".format(curIPv4, ipv4) + if ipv4 is not None and ipv6 is not None: + msg += "," if ipv6 is not None: - msg += " IPv6={}".format(ipv6) + if curIPv6 == ipv6: + msg += " IPv6={} (unchanged)".format(curIPv6) + else: + msg += " IPv6={} -> {}".format(curIPv6, ipv6) print(msg) # all went all right return True @@ -159,7 +176,7 @@ if __name__ == "__main__": dest="config", default=os.path.join(getConfigDir(), "dyn-ns-client.conf"), help="The configuration file") parser.add_argument("-v", "--verbose", - action="count", dest="verbose", + action="count", dest="verbose", default=0, help="Be more verbose") args = parser.parse_args()