treewide: filter shell arguments through shellquote() where applicable
[project/luci.git] / applications / luci-app-ddns / luasrc / controller / ddns.lua
index 63bb8bf..5f4a511 100755 (executable)
@@ -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-2016 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)
@@ -20,11 +20,11 @@ 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.7.6"                    -- minimum version of service required
+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.4.8-1"
+local app_version = "2.4.9-1"
 
 function index()
        local nxfs      = require "nixio.fs"            -- global definitions not available
@@ -180,28 +180,33 @@ 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 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)
+               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
@@ -296,7 +301,7 @@ function startstop(section, enabled)
        uci:unload("ddns")
 
        -- start ddns-updater for section
-       local command = luci_helper .. [[ -S ]] .. section .. [[ -- start]]
+       local command = "%s -S %s -- start" %{ luci_helper, UTIL.shellquote(section) }
        os.execute(command)
        NX.nanosleep(3) -- 3 seconds "show time"