diff options
-rw-r--r-- | ddns.wsgi | 13 | ||||
-rw-r--r-- | ddns/__init__.py | 7 | ||||
-rw-r--r-- | ddns/auth.py | 4 | ||||
-rw-r--r-- | ddns/backend/dnsupdate.py | 11 | ||||
-rw-r--r-- | ddns/cfg_parser.py | 8 | ||||
-rw-r--r-- | ddns/frontend/dyn_com.py | 4 | ||||
-rwxr-xr-x | run.py | 13 |
7 files changed, 38 insertions, 22 deletions
@@ -1,4 +1,15 @@ #import sys #sys.path.insert(0, '/path/to/ddns/dir/') -#from main import app as application + +import os +import ddns.cfg_parser + +if os.environ.get('DDNS_CFG_PATH'): + cfg_file = os.environ['DDNS_CFG_PATH'] +else: + cfg_file = os.path.dirname(os.path.realpath(__file__)) + '/ddns.cfg' + +ddns.cfg_parser.cfg_file = cfg_file +ddns.cfg_parser.read_config() + from ddns import app as application diff --git a/ddns/__init__.py b/ddns/__init__.py index b0de21e..7e4bc7b 100644 --- a/ddns/__init__.py +++ b/ddns/__init__.py @@ -1,8 +1,8 @@ -from flask import Flask, request, Response +from flask import Flask import ddns.cfg_parser -cfg_parser.cfg_file = '/home/marius/ddns/ddns.cfg' -cfg_parser.read_config() +#cfg_parser.cfg_file = 'ddns.cfg' +#cfg_parser.read_config() app = Flask(__name__) @@ -11,6 +11,5 @@ def index(): app.add_url_rule('/', 'index', index) -#from ddns.frontend.dyn_com import dyn_com import ddns.frontend.dyn_com app.add_url_rule('/nic/update', 'ddns.frontend.dyn_com.dyn_com', ddns.frontend.dyn_com.dyn_com) diff --git a/ddns/auth.py b/ddns/auth.py index 6624aad..030d239 100644 --- a/ddns/auth.py +++ b/ddns/auth.py @@ -4,10 +4,8 @@ from functools import wraps import ddns.cfg_parser import hash -auth_cfg = ddns.cfg_parser.cfg['users'] - def check_auth(username, password): - for user in auth_cfg: + for user in ddns.cfg_parser.cfg.get('users'): if username == user['username'] and \ hash.hash(user['hash'], password) == user['password']: return True diff --git a/ddns/backend/dnsupdate.py b/ddns/backend/dnsupdate.py index cd1dee2..650759f 100644 --- a/ddns/backend/dnsupdate.py +++ b/ddns/backend/dnsupdate.py @@ -5,7 +5,6 @@ import dns.update import dns.resolver import ddns.cfg_parser -zone_cfg = None keyring = None def resolve(domain, rtype='A'): @@ -23,7 +22,7 @@ def check_ip(domain, ip, rtype='A'): return False def get_zone(name): - for zone in zone_cfg: + for zone in ddns.cfg_parser.cfg.get('zones'): if zone['name'] == name: return zone return None @@ -53,6 +52,10 @@ def get_hash_method(hash_name): return dns.tsig.default_algorithm def update_dns(zone, hostname, ip, ttl=300): + global keyring + if not keyring: + keyring = gen_keyring(ddns.cfg_parser.cfg.get('dnskeys')) + zone = get_zone(zone) dns_srv = zone['ns'] @@ -68,7 +71,3 @@ def update_dns(zone, hostname, ip, ttl=300): # if not check_ip(hostname+'.'+zone['name'], ip, rtype): update.replace(hostname.encode('ascii'), ttl, rtype, ip.strNormal(0)) res = dns.query.tcp(update, dns_srv) - -zone_cfg = ddns.cfg_parser.cfg['zones'] -keyring = gen_keyring(ddns.cfg_parser.cfg['dnskeys']) - diff --git a/ddns/cfg_parser.py b/ddns/cfg_parser.py index e8134cd..8defb71 100644 --- a/ddns/cfg_parser.py +++ b/ddns/cfg_parser.py @@ -9,9 +9,9 @@ def read_config(): global cfg if not cfg_file or not os.path.exists(cfg_file): - return None + cfg = None + return with io.open(cfg_file, 'r') as fp: - _cfg = yaml.load(fp) - - cfg = _cfg + cfg = yaml.load(fp) + fp.close() diff --git a/ddns/frontend/dyn_com.py b/ddns/frontend/dyn_com.py index bbd61e5..5ef6e11 100644 --- a/ddns/frontend/dyn_com.py +++ b/ddns/frontend/dyn_com.py @@ -1,6 +1,6 @@ -from flask import request, Response -import ddns.backend.dnsupdate +from flask import request from IPy import IP +import ddns.backend.dnsupdate import ddns.auth import ddns.cfg_parser @@ -1,5 +1,14 @@ #!/usr/bin/env python import ddns +import os +import ddns.cfg_parser -if __name__ == '__main__': - ddns.app.run(host="0.0.0.0", debug=True) +if os.environ.get('DDNS_CFG_PATH'): + cfg_file = os.environ['DDNS_CFG_PATH'] +else: + cfg_file = os.path.dirname(os.path.realpath(__file__)) + '/ddns.cfg' + +ddns.cfg_parser.cfg_file = cfg_file +ddns.cfg_parser.read_config() + +ddns.app.run(debug=True) |