#!/usr/bin/python3 import os import sys import configparser import http.client CONF_FNAME = '.dyndns.conf' HOSTNAME = 'edge' DOMAIN = 'lyra.org' def update_response(cfg): conn = http.client.HTTPSConnection(cfg.get('namecheap', 'host')) pwd = cfg.get('namecheap', 'password') path = (cfg.get('namecheap', 'path') + f'?host={HOSTNAME}&domain={DOMAIN}&password={pwd}') conn.request('GET', path) return conn.getresponse() def main(): if '-?' in sys.argv or '-h' in sys.argv or '--help' in sys.argv: print('USAGE: %s [-d] [-v]' % os.path.basename(__file__)) print(' -d: additional debug output') print(' -q: quiet mode (do not print results)') sys.exit(0) cfg = configparser.ConfigParser() cfg.read(os.path.expanduser(f'~/{CONF_FNAME}')) r = update_response(cfg) if r.status != 200: print('ERROR:', r.status, r.reason) sys.exit(1) content = r.read().strip() print(content) return ### FROM update-freedns.py debug = '-d' in sys.argv quiet = '-q' in sys.argv if debug: print('DEBUG:', r.status, r.reason) print('DEBUG:', content) if content.startswith('Updated'): # Response is known. IP was updated. if not quiet: ### need to extract the IP print('IP updated; now:', content) sys.exit(0) if content.startswith('ERROR: Address ') \ and content.endswith(' has not changed.'): # Response is known. IP was not updated. if not quiet: print('IP unchanged; still:', content[15:-17]) sys.exit(0) # Unknown response. print('WARNING: unknown response: (IP may have been updated)') print('----') print(content) print('----') sys.exit(1) if __name__ == '__main__': main()