luci.app-ddns: Update to 2.4.9-1 1600/head
authorChristian Schoenebeck <christian.schoenebeck@gmail.com>
Sat, 27 Jan 2018 15:11:07 +0000 (16:11 +0100)
committerChristian Schoenebeck <christian.schoenebeck@gmail.com>
Sat, 27 Jan 2018 15:11:07 +0000 (16:11 +0100)
Read registered IP from file, updated by ddns-scripts.
Only read from DNS if file does not exist or outdated (check_interval).
Require ddns-scripts v 2.7.7

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
applications/luci-app-ddns/Makefile
applications/luci-app-ddns/luasrc/controller/ddns.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
applications/luci-app-ddns/luasrc/tools/ddns.lua

index 69f9880d4ff6896fb5cef695db5e41ddf5b1a0a9..50365e5215a1ae660f1005b37bce21d68e24ec32 100644 (file)
@@ -2,7 +2,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-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# Copyright 2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
 #
 # This is free software, licensed under the Apache License, Version 2.0
 
@@ -12,11 +12,11 @@ include $(TOPDIR)/rules.mk
 
 # Version == major.minor.patch
 # increase on new functionality (minor) or patches (patch)
-PKG_VERSION:=2.4.8
+PKG_VERSION:=2.4.9
 
 # Release == build
 # increase on changes of translation files
-PKG_RELEASE:=2
+PKG_RELEASE:=1
 
 PKG_LICENSE:=Apache-2.0
 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
index 1dfa6255417c1d73cf36c75ead165fe5a525d0e0..3d31e4e0b6e516e6c93ecfc1b9f26243d3c41c17 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-2017 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-2"
+local app_version = "2.4.9-1"
 
 function index()
        local nxfs      = require "nixio.fs"            -- global definitions not available
@@ -187,19 +187,26 @@ local function _get_status()
 
                -- 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
index 6ba3ea0dd846e23e0b786b38d0cb7f3aefdf9973..114f831c170f16a9a2b870c818b0bc9e7ec2842d 100644 (file)
@@ -1,4 +1,4 @@
--- 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.
 
 local NXFS = require "nixio.fs"
@@ -122,22 +122,29 @@ function dom.set_one(self, section)
        end
 end
 function dom.set_two(self, section)
-       local lookup_host = self.map:get(section, "lookup_host") or ""
-       if lookup_host == "" then return "" end
-       local dnsserver = self.map:get(section, "dnsserver") or ""
-       local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0)
-       local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0)
-       local force_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0)
-       local is_glue = tonumber(self.map:get(section, "is_glue") or 0)
-       local command = CTRL.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 ip = SYS.exec(command)
+       local chk_sec  = DDNS.calc_seconds(
+                               tonumber(self.map:get(section, "check_interval")) or 10,
+                               self.map:get(section, "check_unit") or "minutes" )
+       local ip = DDNS.get_regip(section, chk_sec)
+       if ip == "NOFILE" then
+               local lookup_host = self.map:get(section, "lookup_host") or ""
+               if lookup_host == "" then return "" end
+               local dnsserver = self.map:get(section, "dnsserver") or ""
+               local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0)
+               local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0)
+               local force_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0)
+               local is_glue = tonumber(self.map:get(section, "is_glue") or 0)
+               local command = CTRL.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]]
+               ip = SYS.exec(command)
+       end
        if ip == "" then ip = translate("no data") end
        return ip
 end
index 209d9c3a4152576ce8f44c7439f5a6306d2103a5..690b9b30ceb57d62a1ef3bce90917326e229d5ac 100755 (executable)
@@ -1,4 +1,4 @@
--- 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.tools.ddns", package.seeall)
@@ -74,6 +74,23 @@ function get_lastupd(section)
        return etime
 end
 
+-- read registered IP from [section].ip file
+function get_regip(section, chk_sec)
+       local uci   = UCI.cursor()
+       local rdir  = uci:get("ddns", "global", "ddns_rundir") or "/var/run/ddns"
+       local ip = "NOFILE"
+       if NXFS.access("%s/%s.ip" % { rdir, section }) then
+               local ftime = NXFS.stat("%s/%s.ip" % { rdir, section }, "ctime") or 0
+               local otime = os.time()
+               -- give ddns-scripts time (9 sec) to update file
+               if otime < (ftime + chk_sec + 9) then
+                       ip = NXFS.readfile("%s/%s.ip" % { rdir, section })
+               end
+       end
+       uci:unload("ddns")
+       return ip
+end
+
 -- read PID from run file and verify if still running
 function get_pid(section)
        local uci  = UCI.cursor()