-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
-- Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
--- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+-- Copyright 2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.ddns", package.seeall)
local UTIL = require "luci.util"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
+luci_helper = "/usr/lib/ddns/dynamic_dns_lucihelper.sh"
+
local srv_name = "ddns-scripts"
-local srv_ver_min = "2.5.0" -- minimum version of service required
-local srv_ver_cmd = [[/usr/lib/ddns/dynamic_dns_updater.sh --version | awk {'print $2'}]]
+local srv_ver_min = "2.7.7" -- minimum version of service required
+local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]]
local app_name = "luci-app-ddns"
local app_title = "Dynamic DNS"
-local app_version = "2.3.1-1"
+local app_version = "2.4.9-1"
function index()
local nxfs = require "nixio.fs" -- global definitions not available
end
function service_version()
local ver = nil
- IPKG.list_installed(srv_name, function(n, ver, d)
- -- nothing to do
+
+ ver = UTIL.exec(srv_ver_cmd)
+ if #ver > 0 then return ver end
+
+ IPKG.list_installed(srv_name, function(n, v, d)
+ if v and (#v > 0) then ver = v end
end
)
- if not ver then
- ver = UTIL.exec(srv_ver_cmd)
- if #ver == 0 then ver = nil end
- end
return ver
end
function service_ok()
end
-- get/set monitored interface and IP version
- local iface = s["interface"] or "_nonet_"
+ local iface = s["interface"] or "wan"
local use_ipv6 = tonumber(s["use_ipv6"]) or 0
- if iface ~= "_nonet_" then
- local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4"
- iface = ipv .. " / " .. iface
- end
+ local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4"
+ iface = ipv .. " / " .. iface
-- try to get registered IP
local lookup_host = s["lookup_host"] or "_nolookup_"
- local dnsserver = s["dns_server"] or ""
- local force_ipversion = tonumber(s["force_ipversion"] or 0)
- local force_dnstcp = tonumber(s["force_dnstcp"] or 0)
- local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]]
- command = command .. [[ get_registered_ip ]] .. lookup_host .. [[ ]] .. use_ipv6 ..
- [[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver
- local reg_ip = SYS.exec(command)
+ local chk_sec = DDNS.calc_seconds(
+ tonumber(s["check_interval"]) or 10,
+ s["check_unit"] or "minutes" )
+ local reg_ip = DDNS.get_regip(section, chk_sec)
+ if reg_ip == "NOFILE" then
+ local dnsserver = s["dns_server"] or ""
+ local force_ipversion = tonumber(s["force_ipversion"] or 0)
+ local force_dnstcp = tonumber(s["force_dnstcp"] or 0)
+ local is_glue = tonumber(s["is_glue"] or 0)
+ local command = luci_helper .. [[ -]]
+ if (use_ipv6 == 1) then command = command .. [[6]] end
+ if (force_ipversion == 1) then command = command .. [[f]] end
+ if (force_dnstcp == 1) then command = command .. [[t]] end
+ if (is_glue == 1) then command = command .. [[g]] end
+ command = command .. [[l ]] .. lookup_host
+ command = command .. [[ -S ]] .. section
+ if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end
+ command = command .. [[ -- get_registered_ip]]
+ reg_ip = SYS.exec(command)
+ end
if reg_ip == "" then
reg_ip = "_nodata_"
end
function logread(section)
-- read application settings
local uci = UCI.cursor()
- local log_dir = uci:get("ddns", "global", "log_dir") or "/var/log/ddns"
- local lfile = log_dir .. "/" .. section .. ".log"
+ local ldir = uci:get("ddns", "global", "ddns_logdir") or "/var/log/ddns"
+ local lfile = ldir .. "/" .. section .. ".log"
local ldata = NXFS.readfile(lfile)
if not ldata or #ldata == 0 then
uci:commit("ddns")
uci:unload("ddns")
- -- start dynamic_dns_updater.sh script
- os.execute ([[/usr/lib/ddns/dynamic_dns_updater.sh %s 0 > /dev/null 2>&1 &]] % section)
+ -- start ddns-updater for section
+ local command = luci_helper .. [[ -S ]] .. section .. [[ -- start]]
+ os.execute(command)
NX.nanosleep(3) -- 3 seconds "show time"
-- status changed so return full status