mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Merge pull request #519 from irina11y/fix-1063-dyndns
[fix] 'dyndns update' should check the upstream dns record
This commit is contained in:
commit
1a05cd80d7
1 changed files with 27 additions and 36 deletions
|
@ -37,6 +37,8 @@ from moulinette.core import MoulinetteError
|
||||||
from moulinette.utils.log import getActionLogger
|
from moulinette.utils.log import getActionLogger
|
||||||
from moulinette.utils.filesystem import read_file, write_to_file, rm
|
from moulinette.utils.filesystem import read_file, write_to_file, rm
|
||||||
from moulinette.utils.network import download_json
|
from moulinette.utils.network import download_json
|
||||||
|
from moulinette.utils.process import check_output
|
||||||
|
|
||||||
|
|
||||||
from yunohost.domain import _get_maindomain, _build_dns_conf
|
from yunohost.domain import _get_maindomain, _build_dns_conf
|
||||||
from yunohost.utils.network import get_public_ip
|
from yunohost.utils.network import get_public_ip
|
||||||
|
@ -44,8 +46,6 @@ from yunohost.log import is_unit_operation
|
||||||
|
|
||||||
logger = getActionLogger('yunohost.dyndns')
|
logger = getActionLogger('yunohost.dyndns')
|
||||||
|
|
||||||
OLD_IPV4_FILE = '/etc/yunohost/dyndns/old_ip'
|
|
||||||
OLD_IPV6_FILE = '/etc/yunohost/dyndns/old_ipv6'
|
|
||||||
DYNDNS_ZONE = '/etc/yunohost/dyndns/zone'
|
DYNDNS_ZONE = '/etc/yunohost/dyndns/zone'
|
||||||
|
|
||||||
RE_DYNDNS_PRIVATE_KEY_MD5 = re.compile(
|
RE_DYNDNS_PRIVATE_KEY_MD5 = re.compile(
|
||||||
|
@ -96,7 +96,7 @@ def _dyndns_available(provider, domain):
|
||||||
domain -- The full domain that you'd like.. e.g. "foo.nohost.me"
|
domain -- The full domain that you'd like.. e.g. "foo.nohost.me"
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
True if the domain is avaible, False otherwise.
|
True if the domain is available, False otherwise.
|
||||||
"""
|
"""
|
||||||
logger.debug("Checking if domain %s is available on %s ..."
|
logger.debug("Checking if domain %s is available on %s ..."
|
||||||
% (domain, provider))
|
% (domain, provider))
|
||||||
|
@ -193,32 +193,6 @@ def dyndns_update(operation_logger, dyn_host="dyndns.yunohost.org", domain=None,
|
||||||
|
|
||||||
old_ipv4, old_ipv6 = (None, None) # (default values)
|
old_ipv4, old_ipv6 = (None, None) # (default values)
|
||||||
|
|
||||||
if os.path.isfile(OLD_IPV4_FILE):
|
|
||||||
old_ipv4 = read_file(OLD_IPV4_FILE).rstrip()
|
|
||||||
|
|
||||||
if os.path.isfile(OLD_IPV6_FILE):
|
|
||||||
old_ipv6 = read_file(OLD_IPV6_FILE).rstrip()
|
|
||||||
|
|
||||||
# Get current IPv4 and IPv6
|
|
||||||
ipv4_ = get_public_ip()
|
|
||||||
ipv6_ = get_public_ip(6)
|
|
||||||
|
|
||||||
if ipv4 is None:
|
|
||||||
ipv4 = ipv4_
|
|
||||||
|
|
||||||
if ipv6 is None:
|
|
||||||
ipv6 = ipv6_
|
|
||||||
|
|
||||||
logger.debug("Old IPv4/v6 are (%s, %s)" % (old_ipv4, old_ipv6))
|
|
||||||
logger.debug("Requested IPv4/v6 are (%s, %s)" % (ipv4, ipv6))
|
|
||||||
|
|
||||||
# no need to update
|
|
||||||
if old_ipv4 == ipv4 and old_ipv6 == ipv6:
|
|
||||||
logger.info("No updated needed.")
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
logger.info("Updated needed, going on...")
|
|
||||||
|
|
||||||
# If domain is not given, try to guess it from keys available...
|
# If domain is not given, try to guess it from keys available...
|
||||||
if domain is None:
|
if domain is None:
|
||||||
(domain, key) = _guess_current_dyndns_domain(dyn_host)
|
(domain, key) = _guess_current_dyndns_domain(dyn_host)
|
||||||
|
@ -262,6 +236,30 @@ def dyndns_update(operation_logger, dyn_host="dyndns.yunohost.org", domain=None,
|
||||||
'zone %s' % host,
|
'zone %s' % host,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
old_ipv4 = check_output("dig @%s +short %s" % (dyn_host, domain)).strip() or None
|
||||||
|
old_ipv6 = check_output("dig @%s +short aaaa %s" % (dyn_host, domain)).strip() or None
|
||||||
|
|
||||||
|
# Get current IPv4 and IPv6
|
||||||
|
ipv4_ = get_public_ip()
|
||||||
|
ipv6_ = get_public_ip(6)
|
||||||
|
|
||||||
|
if ipv4 is None:
|
||||||
|
ipv4 = ipv4_
|
||||||
|
|
||||||
|
if ipv6 is None:
|
||||||
|
ipv6 = ipv6_
|
||||||
|
|
||||||
|
logger.debug("Old IPv4/v6 are (%s, %s)" % (old_ipv4, old_ipv6))
|
||||||
|
logger.debug("Requested IPv4/v6 are (%s, %s)" % (ipv4, ipv6))
|
||||||
|
|
||||||
|
# no need to update
|
||||||
|
if old_ipv4 == ipv4 and old_ipv6 == ipv6:
|
||||||
|
logger.info("No updated needed.")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
logger.info("Updated needed, going on...")
|
||||||
|
|
||||||
dns_conf = _build_dns_conf(domain)
|
dns_conf = _build_dns_conf(domain)
|
||||||
del dns_conf["extra"] # Ignore records from the 'extra' category
|
del dns_conf["extra"] # Ignore records from the 'extra' category
|
||||||
|
|
||||||
|
@ -305,18 +303,11 @@ def dyndns_update(operation_logger, dyn_host="dyndns.yunohost.org", domain=None,
|
||||||
command = ["/usr/bin/nsupdate", "-k", key, DYNDNS_ZONE]
|
command = ["/usr/bin/nsupdate", "-k", key, DYNDNS_ZONE]
|
||||||
subprocess.check_call(command)
|
subprocess.check_call(command)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
rm(OLD_IPV4_FILE, force=True) # Remove file (ignore if non-existent)
|
|
||||||
rm(OLD_IPV6_FILE, force=True) # Remove file (ignore if non-existent)
|
|
||||||
raise MoulinetteError(errno.EPERM,
|
raise MoulinetteError(errno.EPERM,
|
||||||
m18n.n('dyndns_ip_update_failed'))
|
m18n.n('dyndns_ip_update_failed'))
|
||||||
|
|
||||||
logger.success(m18n.n('dyndns_ip_updated'))
|
logger.success(m18n.n('dyndns_ip_updated'))
|
||||||
|
|
||||||
if ipv4 is not None:
|
|
||||||
write_to_file(OLD_IPV4_FILE, ipv4)
|
|
||||||
if ipv6 is not None:
|
|
||||||
write_to_file(OLD_IPV6_FILE, ipv6)
|
|
||||||
|
|
||||||
|
|
||||||
def dyndns_installcron():
|
def dyndns_installcron():
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue