+Version: 2.1.0-3
+Date: 2014-12-07
+ddns-scripts: 2.1.0-2 or greater needed
+
+- modified controller
+ - remove support for ddns-scripts Version 1.x
+ - ddns-scripts not correctly installed do not start
+ - no config file create an empty one
+- moved log settings to advanced tab
+- set default syslog level "Notice"
+- removed special handling for dynamic_dns_helper.sh in postinst
+
+--------------------------------------------------------------------------------
Version: 2.1.0-2
Date: 2014-11-15
ddns-scripts: 2.1.0-2 or greater needed
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
- # luci updates are not in sync with ddns-script updates !!!
- # needed because luci update might delete helper script
- # copy dynamic_dns_helper.tmp.sh from ddns-scripts
- cp -f /usr/lib/ddns/dynamic_dns_lucihelper.tmp.sh /usr/lib/ddns/dynamic_dns_lucihelper.sh
-
( . /etc/uci-defaults/luci-ddns ) && rm -f /etc/uci-defaults/luci-ddns
exit 0
}
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
- # luci updates are not in sync with ddns-script updates !!!
- # needed because luci update might delete helper script
- # copy dynamic_dns_helper.tmp.sh from ddns-scripts
- cp -f /usr/lib/ddns/dynamic_dns_lucihelper.tmp.sh /usr/lib/ddns/dynamic_dns_lucihelper.sh
-
( . /etc/uci-defaults/luci-ddns ) && rm -f /etc/uci-defaults/luci-ddns
exit 0
}
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util"
-local luci_ddns_version = "2.1.0-2" -- luci-app-ddns / openwrt Makefile compatible version
+local luci_ddns_version = "2.1.0-3" -- luci-app-ddns / openwrt Makefile compatible version
local ddns_scripts_min = "2.1.0-2" -- minimum version of ddns-scripts required
function index()
- -- above 'require "mod"' definitions are not recognized
- -- inside index() during initialisation
-
- -- no configuration file, don't start
- if not nixio.fs.access("/etc/config/ddns") then
+ -- no services_ipv6 file or no dynamic_dns_lucihelper.sh
+ -- do NOT start
+ if not nixio.fs.access("/usr/lib/ddns/services_ipv6")
+ or not nixio.fs.access("/usr/lib/ddns/dynamic_dns_lucihelper.sh") then
return
end
- -- ddns-scripts 1.0.0 installed, run old luci app
- if not nixio.fs.access("/usr/lib/ddns/services_ipv6")
- or nixio.fs.access("/usr/lib/ddns/url_escape.sed") then
- local page
- page = entry({"admin", "services", "ddns"}, cbi("ddns/ddns"), _("Dynamic DNS"), 60)
- page.dependent = true
- page = entry({"mini", "network", "ddns"}, cbi("ddns/ddns", {autoapply=true}), _("Dynamic DNS"), 60)
- page.dependent = true
- -- it looks like ddns-scripts 2.x.x are installed
- else
- entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
- entry( {"admin", "services", "ddns", "detail"}, cbi("ddns/detail"), nil ).leaf = true
- entry( {"admin", "services", "ddns", "hints"}, cbi("ddns/hints",
- {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}), nil ).leaf = true
- entry( {"admin", "services", "ddns", "logview"}, call("logread") ).leaf = true
- entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true
- entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true
+ -- no config create an empty one
+ if not nixio.fs.access("/etc/config/ddns") then
+ nixio.fs.writefile("/etc/config/ddns", "")
end
+
+ entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
+ entry( {"admin", "services", "ddns", "detail"}, cbi("ddns/detail"), nil ).leaf = true
+ entry( {"admin", "services", "ddns", "hints"}, cbi("ddns/hints",
+ {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}), nil ).leaf = true
+ entry( {"admin", "services", "ddns", "logview"}, call("logread") ).leaf = true
+ entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true
+ entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true
end
-- function to read all sections status and return data array
+++ /dev/null
---[[
-LuCI - Lua Configuration Interface
-
-Copyright 2008 Steven Barth <steven@midlink.org>
-Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-]]--
-
-require("luci.tools.webadmin")
-
-m = Map("ddns", translate("Dynamic DNS"),
- translate("Dynamic DNS allows that your router can be reached with " ..
- "a fixed hostname while having a dynamically changing " ..
- "IP address."))
-
-s = m:section(TypedSection, "service", "")
-s.addremove = true
-s.anonymous = false
-
-s:option(Flag, "enabled", translate("Enable"))
-
-interface = s:option(ListValue, "interface", translate("Event interface"), translate("Network on which the ddns-updater scripts will be started"))
-luci.tools.webadmin.cbi_add_networks(interface)
-interface.default = "wan"
-
-svc = s:option(ListValue, "service_name", translate("Service"))
-svc.rmempty = false
-svc.default = "dyndns.org"
-
-local services = { }
-local fd = io.open("/usr/lib/ddns/services", "r")
-if fd then
- local ln
- repeat
- ln = fd:read("*l")
- local s = ln and ln:match('^%s*"([^"]+)"')
- if s then services[#services+1] = s end
- until not ln
- fd:close()
-end
-
-local v
-for _, v in luci.util.vspairs(services) do
- svc:value(v)
-end
-
-function svc.cfgvalue(...)
- local v = Value.cfgvalue(...)
- if not v or #v == 0 then
- return "-"
- else
- return v
- end
-end
-
-function svc.write(self, section, value)
- if value == "-" then
- m.uci:delete("ddns", section, self.option)
- else
- Value.write(self, section, value)
- end
-end
-
-svc:value("-", "-- "..translate("custom").." --")
-
-local url = s:option(Value, "update_url", translate("Custom update-URL"))
-url:depends("service_name", "-")
-url.rmempty = true
-
-local hostname = s:option(Value, "domain", translate("Hostname"))
-hostname.rmempty = true
-hostname.default = "mypersonaldomain.dyndns.org"
-hostname.datatype = "host"
-
-local username = s:option(Value, "username", translate("Username"))
-username.rmempty = true
-
-local pw = s:option(Value, "password", translate("Password"))
-pw.rmempty = true
-pw.password = true
-
-require("luci.tools.webadmin")
-
-local src = s:option(ListValue, "ip_source",
- translate("Source of IP address"))
-src.default = "network"
-src:value("network", translate("network"))
-src:value("interface", translate("interface"))
-src:value("web", translate("URL"))
-
-local iface = s:option(ListValue, "ip_network", translate("Network"))
-iface:depends("ip_source", "network")
-iface.rmempty = true
-iface.default = "wan"
-luci.tools.webadmin.cbi_add_networks(iface)
-iface = s:option(ListValue, "ip_interface", translate("Interface"))
-iface:depends("ip_source", "interface")
-iface.rmempty = true
-for k, v in pairs(luci.sys.net.devices()) do
- iface:value(v)
-end
-
-local web = s:option(Value, "ip_url", translate("URL"))
-web:depends("ip_source", "web")
-web.default = "http://checkip.dyndns.com/"
-web.rmempty = true
-
-
-local ci = s:option(Value, "check_interval", translate("Check for changed IP every"))
-ci.datatype = "and(uinteger,min(1))"
-ci.default = 10
-
-local unit = s:option(ListValue, "check_unit", translate("Check-time unit"))
-unit.default = "minutes"
-unit:value("minutes", translate("min"))
-unit:value("hours", translate("h"))
-
-fi = s:option(Value, "force_interval", translate("Force update every"))
-fi.datatype = "and(uinteger,min(1))"
-fi.default = 72
-
-local unit = s:option(ListValue, "force_unit", translate("Force-time unit"))
-unit.default = "hours"
-unit:value("minutes", translate("min"))
-unit:value("hours", translate("h"))
-
-
-return m
end
end
--- use_syslog -- ###############################################################
-slog = ns:taboption("basic", ListValue, "use_syslog",
- translate("Log to syslog"),
- translate("Writes log messages to syslog. Critical Errors will always be written to syslog.") )
-slog.default = "0"
-slog:value("0", translate("No logging"))
-slog:value("1", translate("Info"))
-slog:value("2", translate("Notice"))
-slog:value("3", translate("Warning"))
-slog:value("4", translate("Error"))
-
--- use_logfile (NEW) -- ########################################################
-logf = ns:taboption("basic", Flag, "use_logfile",
- translate("Log to file"),
- translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" ..
- translate("File") .. [[: "]] .. log_dir .. [[/]] .. section .. [[.log"]] )
-logf.orientation = "horizontal"
-logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because
-logf.default = "1" -- if not defined write to log by default
-function logf.parse(self, section)
- DDNS.flag_parse(self, section)
-end
-
-- TAB: Advanced ##################################################################################
-- IPv4 - ip_source -- #########################################################
src4 = ns:taboption("advanced", ListValue, "ipv4_source",
end
end
+-- use_syslog -- ###############################################################
+slog = ns:taboption("advanced", ListValue, "use_syslog",
+ translate("Log to syslog"),
+ translate("Writes log messages to syslog. Critical Errors will always be written to syslog.") )
+slog.default = "2"
+slog:value("0", translate("No logging"))
+slog:value("1", translate("Info"))
+slog:value("2", translate("Notice"))
+slog:value("3", translate("Warning"))
+slog:value("4", translate("Error"))
+
+-- use_logfile (NEW) -- ########################################################
+logf = ns:taboption("advanced", Flag, "use_logfile",
+ translate("Log to file"),
+ translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" ..
+ translate("File") .. [[: "]] .. log_dir .. [[/]] .. section .. [[.log"]] )
+logf.orientation = "horizontal"
+logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because
+logf.default = "1" -- if not defined write to log by default
+function logf.parse(self, section)
+ DDNS.flag_parse(self, section)
+end
+
-- TAB: Timer #####################################################################################
-- check_interval -- ###########################################################
ci = ns:taboption("timer", Value, "check_interval",
rc.default = 5
rc.rmempty = false -- validate ourselves for translatable error messages
function rc.validate(self, value)
- if not DTYP.uinteger(value)
- or tonumber(value) < 1 then
- return nil, err_tab_timer(self) .. translate("minimum value '1'")
+ if not DTYP.uinteger(value) then
+ return nil, err_tab_timer(self) .. translate("minimum value '0'")
else
return value
end
-- one button on top, one at the buttom
%>
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, false)"
-<%=
-attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.inputtitle)
+<%=
+attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.inputtitle)
%> />
<br /><br />
-- in openwrt theme there are problems with a width of 100 so we check for theme and set to lower value
%>
<textarea style="width: <%if media == "/luci-static/openwrt.org" then%>98.7%<%else%>100%<%end%> ; min-height: 500px; border: 3px solid #cccccc; padding: 5px; font-family: monospace; resize: none;" wrap="off" readonly="readonly"
-<%=
-attr("name", cbid .. ".txt") .. attr("id", cbid .. ".txt") .. ifattr(self.rows, "rows")
+<%=
+attr("name", cbid .. ".txt") .. attr("id", cbid .. ".txt") .. ifattr(self.rows, "rows")
%> >
<%-=pcdata(self:cfgvalue(section))-%>
</textarea>
<br /><br />
-<%
--- one button on top, one at the buttom
+<%
+-- one button on top, one at the buttom
%>
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, true)"
<%= attr("name", section) .. attr("id", cbid .. ".btn2") .. attr("value", self.inputtitle) %> />
<%+cbi/valueheader%>
<% if self:cfgvalue(section) ~= false then
--- We need to garantie that function cfgvalue run first to set missing parameters
+-- We need to garantie that function cfgvalue run first to set missing parameters
%>
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
<!-- type="button" onclick="..." enable standard onclick functionalty -->
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
- <%=
- attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
+ <%=
+ attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
%> />
<% end %>