luci-app-ddns: fix to correct system status
[project/luci.git] / applications / luci-app-ddns / luasrc / controller / ddns.lua
old mode 100644 (file)
new mode 100755 (executable)
index 29598ea..1dfa625
@@ -1,7 +1,7 @@
 -- 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-2017 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)
@@ -17,12 +17,14 @@ local UCI  = require "luci.model.uci"
 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.6"                    -- 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.0-1"
+local app_version = "2.4.8-2"
 
 function index()
        local nxfs      = require "nixio.fs"            -- global definitions not available
@@ -96,14 +98,14 @@ function app_title_main()
 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()
@@ -178,21 +180,25 @@ local function _get_status()
                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 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
+               if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end
+               command = command .. [[ -- get_registered_ip]]
                local reg_ip = SYS.exec(command)
                if reg_ip == "" then
                        reg_ip = "_nodata_"
@@ -219,8 +225,8 @@ 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
@@ -287,8 +293,9 @@ function startstop(section, enabled)
        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