summaryrefslogtreecommitdiffhomepage
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/luci-app-ddns/Makefile21
-rw-r--r--applications/luci-app-ddns/luasrc/controller/ddns.lua17
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua63
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua156
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua18
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua12
-rw-r--r--applications/luci-app-ddns/luasrc/tools/ddns.lua74
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/global_value.htm34
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm12
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/system_status.htm59
-rw-r--r--applications/luci-app-ddns/po/de/ddns.po134
-rw-r--r--applications/luci-app-ddns/po/templates/ddns.pot107
-rw-r--r--applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua2
-rw-r--r--applications/luci-app-privoxy/Makefile22
-rwxr-xr-xapplications/luci-app-privoxy/luasrc/controller/privoxy.lua91
-rwxr-xr-xapplications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua (renamed from applications/luci-app-privoxy/luasrc/model/cbi/privoxy/detail.lua)217
-rwxr-xr-xapplications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua47
-rw-r--r--applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua1
-rw-r--r--applications/luci-app-upnp/luasrc/controller/upnp.lua2
19 files changed, 797 insertions, 292 deletions
diff --git a/applications/luci-app-ddns/Makefile b/applications/luci-app-ddns/Makefile
index 18906cd1c2..f20b49e902 100644
--- a/applications/luci-app-ddns/Makefile
+++ b/applications/luci-app-ddns/Makefile
@@ -6,32 +6,33 @@
include $(TOPDIR)/rules.mk
-# LuCI specific settings
-LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
-LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts
-
PKG_NAME:=luci-app-ddns
# Version == major.minor.patch
# increase on new functionality (minor) or patches (patch)
-PKG_VERSION:=2.1.1
+PKG_VERSION:=2.2.1
# Release == build
# increase on changes of translation files
-PKG_RELEASE:=0
+PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+# LuCI specific settings
+LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
+LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts
+LUCI_PKGARCH:=all
+
define Package/$(PKG_NAME)/config
# shown in make menuconfig <Help>
help
$(LUCI_TITLE)
-
- Version : $(PKG_VERSION)-$(PKG_RELEASE)
- Maintainer: $(PKG_MAINTAINER)
+ .
+ Version: $(PKG_VERSION)-$(PKG_RELEASE)
+ $(PKG_MAINTAINER)
endef
-include ../../luci.mk
+include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua
index 56d2b66e21..0b82021e2a 100644
--- a/applications/luci-app-ddns/luasrc/controller/ddns.lua
+++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua
@@ -15,7 +15,7 @@ local SYS = require "luci.sys"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util"
-DDNS_MIN = "2.1.0-2" -- minimum version of service required
+DDNS_MIN = "2.2.0-1" -- minimum version of service required
function index()
local nxfs = require "nixio.fs" -- global definitions not available
@@ -36,6 +36,7 @@ function index()
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", "global"}, cbi("ddns/global"), 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
@@ -90,7 +91,7 @@ local function _get_status()
end
-- process running but update needs to happen
- -- problems it force_seconds > uptime
+ -- problems if force_seconds > uptime
force_seconds = (force_seconds > uptime) and uptime or force_seconds
if pid > 0 and ( lasttime + force_seconds - uptime ) <= 0 then
datenext = "_verify_"
@@ -103,7 +104,7 @@ local function _get_status()
elseif pid == 0 and enabled == 0 then
datenext = "_disabled_"
- -- no process running and NOT
+ -- no process running and enabled
elseif pid == 0 and enabled ~= 0 then
datenext = "_stopped_"
end
@@ -149,11 +150,11 @@ end
-- called by XHR.get from detail_logview.htm
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 uci = UCI.cursor()
+ local log_dir = uci:get("ddns", "global", "log_dir") or "/var/log/ddns"
+ local lfile = log_dir .. "/" .. section .. ".log"
+ local ldata = NXFS.readfile(lfile)
- local ldata=NXFS.readfile(lfile)
if not ldata or #ldata == 0 then
ldata="_nodata_"
end
@@ -164,10 +165,10 @@ end
-- called by XHR.get from overview_status.htm
function startstop(section, enabled)
local uci = UCI.cursor()
+ local pid = DDNS.get_pid(section)
local data = {} -- Array to transfer data to javascript
-- if process running we want to stop and return
- local pid = DDNS.get_pid(section)
if pid > 0 then
local tmp = NX.kill(pid, 15) -- terminate
NX.nanosleep(2) -- 2 second "show time"
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
index 77753c03a7..40a66ef152 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
@@ -1,11 +1,11 @@
-- 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-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0.
local NX = require "nixio"
-local FS = require "nixio.fs"
+local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local UTIL = require "luci.util"
local DISP = require "luci.dispatcher"
@@ -14,21 +14,21 @@ local DTYP = require "luci.cbi.datatypes"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
-- takeover arguments -- #######################################################
-section = arg[1]
+local section = arg[1]
-- check supported options -- ##################################################
-- saved to local vars here because doing multiple os calls slow down the system
-has_ipv6 = DDNS.check_ipv6() -- IPv6 support
-has_ssl = DDNS.check_ssl() -- HTTPS support
-has_proxy = DDNS.check_proxy() -- Proxy support
-has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
-has_force = has_ssl and has_dnstcp -- Force IP Protocoll
+local has_ipv6 = DDNS.check_ipv6() -- IPv6 support
+local has_ssl = DDNS.check_ssl() -- HTTPS support
+local has_proxy = DDNS.check_proxy() -- Proxy support
+local has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
+local has_force = has_ssl and has_dnstcp -- Force IP Protocoll
-- html constants -- ###########################################################
-font_red = "<font color='red'>"
-font_off = "</font>"
-bold_on = "<strong>"
-bold_off = "</strong>"
+local font_red = "<font color='red'>"
+local font_off = "</font>"
+local bold_on = "<strong>"
+local bold_off = "</strong>"
-- error text constants -- #####################################################
err_ipv6_plain = translate("IPv6 not supported") .. " - " ..
@@ -136,7 +136,10 @@ log_dir = m.uci:get(m.config, "global", "log_dir") or "/var/log/ddns"
-- cbi-section definition -- ###################################################
ns = m:section( NamedSection, section, "service",
translate("Details for") .. ([[: <strong>%s</strong>]] % section),
- translate("Configure here the details for selected Dynamic DNS service") )
+ translate("Configure here the details for selected Dynamic DNS service.")
+ .. [[<br /><a href="http://wiki.openwrt.org/doc/uci/ddns#version_1x" target="_blank">]]
+ .. translate("For detailed information about parameter settings look here.")
+ .. [[</a>]] )
ns.instance = section -- arg [1]
ns:tab("basic", translate("Basic Settings"), nil )
ns:tab("advanced", translate("Advanced Settings"), nil )
@@ -344,7 +347,7 @@ function ush.validate(self, value)
end
elseif (#url > 0) then
return nil, err_tab_basic(self) .. translate("either url or script could be set")
- elseif not FS.access(value) then
+ elseif not NXFS.access(value) then
return nil, err_tab_basic(self) .. translate("File not found")
end
return value
@@ -765,7 +768,7 @@ function ips.validate(self, value)
if (usev6:formvalue(section) == "0" and src4:formvalue(section) ~= "script")
or (usev6:formvalue(section) == "1" and src6:formvalue(section) ~= "script") then
return ""
- elseif not value or not (#value > 0) or not FS.access(split[1], "x") then
+ elseif not value or not (#value > 0) or not NXFS.access(split[1], "x") then
return nil, err_tab_adv(self) ..
translate("not found or not executable - Sample: '/path/to/script.sh'")
else
@@ -855,6 +858,34 @@ function eif6.write(self, section, value)
end
end
+-- IPv4/IPv6 - bind_network -- #################################################
+if has_ssl or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
+ bnet = ns:taboption("advanced", ListValue, "bind_network",
+ translate("Bind Network") )
+ bnet:depends("ipv4_source", "web")
+ bnet:depends("ipv6_source", "web")
+ bnet.rmempty = true
+ bnet.default = ""
+ bnet:value("", translate("-- default --"))
+ WADM.cbi_add_networks(bnet)
+ function bnet.cfgvalue(self, section)
+ local value = AbstractValue.cfgvalue(self, section)
+ if not has_ssl and value ~= "" then
+ self.description = bold_on .. font_red ..
+ translate("Binding to a specific network not supported") .. font_off .. "<br />" ..
+ translate("please set to 'default'") .. " !" .. bold_off
+ else
+ self.description = translate("OPTIONAL: Network to use for communication") ..
+ "<br />" .. translate("Casual users should not change this setting")
+ end
+ return value
+ end
+ function bnet.validate(self, value)
+ if (value ~= "" and has_ssl ) or value == "" then return value end
+ return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !"
+ end
+end
+
-- IPv4 + IPv6 - force_ipversion (NEW) -- ######################################
-- optional to force wget/curl and host to use only selected IP version
-- command parameter "-4" or "-6"
@@ -1198,7 +1229,7 @@ lv.inputtitle = translate("Read / Reread log file")
lv.rows = 50
function lv.cfgvalue(self, section)
local lfile=log_dir .. "/" .. section .. ".log"
- if FS.access(lfile) then
+ if NXFS.access(lfile) then
return lfile .. "\n" .. translate("Please press [Read] button")
end
return lfile .. "\n" .. translate("File not found or empty")
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua
new file mode 100644
index 0000000000..e1718739f9
--- /dev/null
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua
@@ -0,0 +1,156 @@
+-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+-- Licensed to the public under the Apache License 2.0.
+
+local NX = require "nixio"
+local NXFS = require "nixio.fs"
+local DISP = require "luci.dispatcher"
+local SYS = require "luci.sys"
+local DDNS = require "luci.tools.ddns" -- ddns multiused functions
+
+-- cbi-map definition -- #######################################################
+local m = Map("ddns")
+
+-- first need to close <a> from cbi map template our <a> closed by template
+m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]]
+ .. translate("Dynamic DNS")
+
+m.description = translate("Dynamic DNS allows that your router can be reached with " ..
+ "a fixed hostname while having a dynamically changing IP address.")
+
+m.redirect = DISP.build_url("admin", "services", "ddns")
+
+function m.commit_handler(self)
+ if self.changed then -- changes ?
+ os.execute("/etc/init.d/ddns reload &") -- reload configuration
+ end
+end
+
+-- cbi-section definition -- ###################################################
+local ns = m:section( NamedSection, "global", "ddns",
+ translate("Global Settings"),
+ translate("Configure here the details for all Dynamic DNS services including this LuCI application.")
+ .. [[<br /><strong>]]
+ .. translate("It is NOT recommended for casual users to change settings on this page.")
+ .. [[</strong><br />]]
+ .. [[<a href="http://wiki.openwrt.org/doc/uci/ddns#version_2x1" target="_blank">]]
+ .. translate("For detailed information about parameter settings look here.")
+ .. [[</a>]]
+
+-- section might not exist
+function ns.cfgvalue(self, section)
+ if not self.map:get(section) then
+ self.map:set(section, nil, self.sectiontype)
+ end
+ return self.map:get(section)
+end
+
+-- allow_local_ip -- ##########################################################
+local ali = ns:option(Flag, "allow_local_ip")
+ali.title = translate("Allow non-public IP's")
+ali.description = translate("Non-public and by default blocked IP's") .. ":"
+ .. [[<br /><strong>IPv4: </strong>]]
+ .. "0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.168/16"
+ .. [[<br /><strong>IPv6: </strong>]]
+ .. "::/32, f000::/4"
+ali.reempty = true
+ali.default = "0"
+function ali.parse(self, section)
+ DDNS.flag_parse(self, section)
+end
+function ali.validate(self, value)
+ if value == self.default then
+ return "" -- default = empty
+ end
+ return value
+end
+
+-- date_format -- #############################################################
+local df = ns:option(Value, "date_format")
+df.title = translate("Date format")
+df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">]]
+ .. translate("For supported codes look here")
+ .. [[</a>]]
+df.template = "ddns/global_value"
+df.rmempty = true
+df.default = "%F %R"
+df.date_string = ""
+function df.cfgvalue(self, section)
+ local value = AbstractValue.cfgvalue(self, section) or self.default
+ local epoch = os.time()
+ self.date_string = DDNS.epoch2date(epoch, value)
+ return value
+end
+function df.validate(self, value)
+ if value == self.default then
+ return "" -- default = empty
+ end
+ return value
+end
+
+-- run_dir -- #################################################################
+local rd = ns:option(Value, "run_dir")
+rd.title = translate("Status directory")
+rd.description = translate("Directory contains PID and other status information for each running section")
+rd.rmempty = true
+rd.default = "/var/run/ddns"
+function rd.validate(self, value)
+ if value == self.default then
+ return "" -- default = empty
+ end
+ return value
+end
+
+-- log_dir -- #################################################################
+local ld = ns:option(Value, "log_dir")
+ld.title = translate("Log directory")
+ld.description = translate("Directory contains Log files for each running section")
+ld.rmempty = true
+ld.default = "/var/log/ddns"
+function ld.validate(self, value)
+ if value == self.default then
+ return "" -- default = empty
+ end
+ return value
+end
+
+-- log_lines -- ###############################################################
+local ll = ns:option(Value, "log_lines")
+ll.title = translate("Log length")
+ll.description = translate("Number of last lines stored in log files")
+ll.rmempty = true
+ll.default = "250"
+ll.datatype = "and(uinteger,min(1))"
+function ll.validate(self, value)
+ local n = tonumber(value)
+ if not n or math.floor(n) ~= n or n < 1 then
+ return nil, self.title .. ": " .. translate("minimum value '1'")
+ end
+ if value == self.default then
+ return "" -- default = empty
+ end
+ return value
+end
+
+-- use_curl -- ################################################################
+if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0)
+and NXFS.access("/usr/bin/curl") then
+ local pc = ns:option(Flag, "use_curl")
+ pc.title = translate("Use cURL")
+ pc.description = translate("If both cURL and GNU Wget are installed, Wget is used by default.")
+ .. [[<br />]]
+ .. translate("To use cURL activate this option.")
+ pc.orientation = "horizontal"
+ pc.rmempty = true
+ pc.default = "0"
+ function pc.parse(self, section)
+ DDNS.flag_parse(self, section)
+ end
+ function pc.validate(self, value)
+ if value == self.default then
+ return "" -- default = empty
+ end
+ return value
+ end
+end
+
+return m
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
index 009ba99eb8..ff7aa7a41c 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
@@ -8,7 +8,7 @@ local DDNS = require "luci.tools.ddns" -- ddns multiused functions
-- check supported options -- ##################################################
-- saved to local vars here because doing multiple os calls slow down the system
-has_ssl = DDNS.check_ssl() -- HTTPS support
+has_ssl = DDNS.check_ssl() -- HTTPS support and --bind-network / --interface
has_proxy = DDNS.check_proxy() -- Proxy support
has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
-- correct ddns-scripts version
@@ -88,6 +88,22 @@ if not has_ssl then
translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.")
end
+-- No bind_network
+if not has_ssl then
+ local dv = s:option(DummyValue, "_no_bind_network")
+ dv.titleref = DISP.build_url("admin", "system", "packages")
+ dv.rawhtml = true
+ dv.title = bold_on ..
+ translate("Binding to a specific network not supported") .. bold_off
+ dv.value = translate("Neither GNU Wget with SSL nor cURL installed to select a network to use for communication.") ..
+ "<br />- " ..
+ translate("You should install GNU Wget with SSL or cURL package.") ..
+ "<br />- " ..
+ translate("GNU Wget will use the IP of given network, cURL will use the physical interface.") ..
+ "<br />- " ..
+ translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.")
+end
+
-- cURL without proxy support
if has_ssl and not has_proxy then
local dv = s:option(DummyValue, "_no_proxy")
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
index 83b10e9366..9e8df2d089 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
@@ -27,8 +27,6 @@ bold_off = [[</strong>]]
m = Map("ddns")
-- first need to close <a> from cbi map template our <a> closed by template
---m.title = [[</a><a href="javascript:alert(']] .. CTRL.show_versions() ..[[')">]] ..
--- translate("Dynamic DNS")
m.title = [[</a><a href="javascript:alert(']]
.. translate("Version Information")
.. [[\n\nluci-app-ddns]]
@@ -109,9 +107,13 @@ end
-- TableSection definition -- ##################################################
ts = m:section( TypedSection, "service",
translate("Overview"),
- translate("Below is a list of configured DDNS configurations and their current state." .. "<br />" ..
- "If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations " ..
- "i.e. 'myddns_ipv4' and 'myddns_ipv6'") )
+ translate("Below is a list of configured DDNS configurations and their current state.")
+ .. "<br />"
+ .. translate("If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations "
+ .. "i.e. 'myddns_ipv4' and 'myddns_ipv6'")
+ .. "<br />"
+ .. [[<a href="]] .. DISP.build_url("admin", "services", "ddns", "global") .. [[">]]
+ .. translate("To change global settings click here") .. [[</a>]] )
ts.sectionhead = translate("Configuration")
ts.template = "cbi/tblsection"
ts.addremove = true
diff --git a/applications/luci-app-ddns/luasrc/tools/ddns.lua b/applications/luci-app-ddns/luasrc/tools/ddns.lua
index 2fbcff8bad..6d53931469 100644
--- a/applications/luci-app-ddns/luasrc/tools/ddns.lua
+++ b/applications/luci-app-ddns/luasrc/tools/ddns.lua
@@ -35,7 +35,7 @@ end
-- check if Wget with SSL support or cURL installed
function check_ssl()
- if (SYS.call([[ grep -iq "\+ssl" /usr/bin/wget 2>/dev/null ]]) == 0) then
+ if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) then
return true
else
return NXFS.access("/usr/bin/curl")
@@ -45,12 +45,12 @@ end
-- check if Wget with SSL or cURL with proxy support installed
function check_proxy()
-- we prefere GNU Wget for communication
- if (SYS.call([[ grep -iq "\+ssl" /usr/bin/wget 2>/dev/null ]]) == 0) then
+ if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) then
return true
-- if not installed cURL must support proxy
elseif NXFS.access("/usr/bin/curl") then
- return (SYS.call([[ grep -iq all_proxy /usr/lib/libcurl.so* 2>/dev/null ]]) == 0)
+ return (SYS.call([[ grep -i all_proxy /usr/lib/libcurl.so* >/dev/null 2>&1 ]]) == 0)
-- only BusyBox Wget is installed
else
@@ -100,25 +100,67 @@ end
function ipkg_ver_compare(ver1, comp, ver2)
if not ver1 or not (#ver1 > 0)
or not ver2 or not (#ver2 > 0)
- or not comp or not (#comp > 0) then
- return nil
+ or not comp or not (#comp > 0) then return nil end
+ -- correct compare string
+ if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
+ elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<="
+ elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">="
+ elseif comp == "=" or comp == "==" then comp = "=="
+ elseif comp == "<<" then comp = "<"
+ elseif comp == ">>" then comp = ">"
+ else return nil end
+
+ local av1 = UTIL.split(ver1, "[%.%-]", nil, true)
+ local av2 = UTIL.split(ver2, "[%.%-]", nil, true)
+
+ for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
+ local s1 = av1[i] or ""
+ local s2 = av2[i] or ""
+ local n1 = tonumber(s1)
+ local n2 = tonumber(s2)
+
+ -- one numeric and other empty string then set other to 0
+ if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end
+ if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end
+
+ local nc = (n1 and n2) -- numeric compare
+
+ if nc then
+ -- first "not equal" found return true
+ if comp == "~=" and (n1 ~= n2) then return true end
+ -- first "lower" found return true
+ if (comp == "<" or comp == "<=") and (n1 < n2) then return true end
+ -- first "greater" found return true
+ if (comp == ">" or comp == ">=") and (n1 > n2) then return true end
+ -- not equal then return false
+ if (n1 ~= n2) then return false end
+ else
+ if comp == "~=" and (s1 ~= s2) then return true end
+ if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
+ if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
+ if (s1 ~= s2) then return false end
+ end
end
- return (tonumber(SYS.call(
- [[opkg compare-versions "]] .. ver1 .. [[" "]] .. comp .. [[" "]] .. ver2 .. [["]]
- )) == 1)
+ -- all equal then true
+ return true
end
-- read version information for given package if installed
function ipkg_ver_installed(pkg)
- if not pkg then
- return nil
- end
- -- opkg list-installed [pkg] | cut -d " " -f 3 - return version as sting
- local ver = SYS.exec([[opkg list-installed ]] .. pkg .. [[ | cut -d " " -f 3 ]])
- if (#ver > 0) then
- return ver
+ local version = nil
+ local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r")
+ if control then
+ local ln
+ repeat
+ ln = control:read("*l")
+ if ln and ln:match("^Version: ") then
+ version = ln:gsub("^Version: ", "")
+ break
+ end
+ until not ln
+ control:close()
end
- return nil
+ return version
end
-- replacement of build-in read of UCI option
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm b/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm
new file mode 100644
index 0000000000..159cb60147
--- /dev/null
+++ b/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm
@@ -0,0 +1,34 @@
+
+<!-- ++ BEGIN ++ Dynamic DNS ++ global_value.htm ++ -->
+<%+cbi/valueheader%>
+<script type="text/javascript">//<![CDATA[
+ // event handler on changed date
+ function onkeyup_date(value) {
+ var obj = document.getElementById("cbid.ddns.global.date_format.help");
+ if ( !obj ) { return; } // security check
+
+ if ( value == "" || value.length == 0 ) { value = "%F %R"; }
+ var now = new Date();
+ var txt = now.toLocaleFormat(value);
+ // handle newline(%n) and tab(%t) needs to be converted to HTML
+ txt = txt.replace(new RegExp('\r?\n','g'), '<br />');
+ txt = txt.replace(new RegExp('\t','g'), '&nbsp;&nbsp;&nbsp;&nbsp;');
+ obj.innerHTML = "<%:Current setting%>: <strong>" + txt + "<\/strong>";
+ }
+//]]></script>
+
+<input type="text" class="cbi-input-text" onchange="cbi_d_update(this.id)" onkeyup="onkeyup_date(this.value)"
+ <%=
+ attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) ..
+ ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder")
+ %>
+/>
+<br />
+<div class="cbi-value-description">
+ <span class="cbi-value-helpicon"><img src="<%=resource%>/cbi/help.gif" alt="<%:help%>" /><%=self.description%></span>
+ <br />
+ <span id="<%=cbid%>.help" class="cbi-value-helpicon"><%:Current setting%>: <strong><%=self.date_string%></strong></span>
+</div> <!-- div class="cbi-value-description" -->
+</div> <!-- div class="cbi-value-field" -->
+</div> <!-- div class="cbi-value cbi-value-last" -->
+<!-- ++ END ++ Dynamic DNS ++ global_value.htm ++ -->
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
index 6cca0e75d9..ea8e4a1e31 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
@@ -146,8 +146,7 @@
} else {
// should have data because status changed
// so update screen
- if (data)
- _data2elements(data);
+ if (data) { _data2elements(data); }
}
// make me invisible
obj.parentNode.style.display = "none";
@@ -155,20 +154,19 @@
);
}
- var ddns_ov_XHR = new XHR();
// force to immediate show status on page load (not waiting for XHR.poll)
- ddns_ov_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
- _data2elements(data);
+ if (data) { _data2elements(data); }
}
);
// define only ONE XHR.poll in a page because if one is running it blocks the other one
// optimum is to define on Map or Section Level from here you can reach all elements
// we need update every 15 seconds only
- ddns_ov_XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
- _data2elements(data);
+ if (data) { _data2elements(data); }
}
);
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
index 7c60726e24..4ca0abb0e5 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
@@ -14,53 +14,38 @@
tbl.deleteRow(1);
// variable for Modulo-Division use to set cbi-rowstyle-? (0 or 1)
- var x = -1;
- var i = 1;
-
- // no data => no ddns-scripts Version 2 installed
- if ( !data ) {
- var txt = '<br /><strong><font color="red"><%:Old version of ddns-scripts installed%></font>' ;
- var url = '<a href="' ;
- url += '<%=luci.dispatcher.build_url("admin", "system", "packages")%>' ;
- url += '"><%:install update here%></a></strong>' ;
- var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((i + x) % 2) + 1);
- var td = tr.insertCell(-1);
- td.colSpan = 2 ;
- td.innerHTML = txt + " - " + url
- tr.insertCell(-1).colSpan = 3 ;
- return;
- }
+ var i = -1;
+ var j = 1;
// DDNS Service disabled
if (data[0].enabled == 0) {
var txt = '<strong><font color="red"><%:DDNS Autostart disabled%></font>' ;
var url = '<a href="' + data[0].url_up + '"><%:enable here%></a></strong>' ;
var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((i + x) % 2) + 1);
+ tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1);
var td = tr.insertCell(-1);
td.colSpan = 2 ;
td.innerHTML = txt + " - " + url
tr.insertCell(-1).colSpan = 3 ;
- x++ ;
+ i++ ;
}
- for( i = 1; i < data.length; i++ )
+ for( j = 1; j < data.length; j++ )
{
var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((i + x) % 2) + 1) ;
+ tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1) ;
// configuration
- tr.insertCell(-1).innerHTML = '<strong>' + data[i].section + '</strong>' ;
+ tr.insertCell(-1).innerHTML = '<strong>' + data[j].section + '</strong>' ;
// pid
- // data[i].pid ignored here
+ // data[j].pid ignored here
// last update
- // data[i].datelast ignored here
+ // data[j].datelast ignored here
// next update
- switch (data[i].datenext) {
+ switch (data[j].datenext) {
case "_empty_":
tr.insertCell(-1).innerHTML = '<em><%:Unknown error%></em>' ;
break;
@@ -80,18 +65,18 @@
tr.insertCell(-1).innerHTML = '<em><%:Verify%></em>';
break;
default:
- tr.insertCell(-1).innerHTML = data[i].datenext ;
+ tr.insertCell(-1).innerHTML = data[j].datenext ;
break;
}
// domain
- if (data[i].domain == "_nodomain_")
+ if (data[j].domain == "_nodomain_")
tr.insertCell(-1).innerHTML = '<em><%:config error%></em>';
else
- tr.insertCell(-1).innerHTML = data[i].domain;
+ tr.insertCell(-1).innerHTML = data[j].domain;
// registered IP
- switch (data[i].reg_ip) {
+ switch (data[j].reg_ip) {
case "_nodomain_":
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
break;
@@ -102,15 +87,15 @@
tr.insertCell(-1).innerHTML = '<em><%:IPv6 not supported%></em>';
break;
default:
- tr.insertCell(-1).innerHTML = data[i].reg_ip;
+ tr.insertCell(-1).innerHTML = data[j].reg_ip;
break;
}
// monitored interface
- if (data[i].iface == "_nonet_")
+ if (data[j].iface == "_nonet_")
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
else
- tr.insertCell(-1).innerHTML = data[i].iface;
+ tr.insertCell(-1).innerHTML = data[j].iface;
}
if (tbl.rows.length == 1 || (data[0].enabled == 0 && tbl.rows.length == 2) ) {
@@ -125,19 +110,19 @@
}
}
- var ddns_status_XHR = new XHR();
// force to immediate show status (not waiting for XHR.poll)
- ddns_status_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
- _data2elements(x, data);
+ if (data) { _data2elements(x, data); }
}
);
- ddns_status_XHR.poll(10, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
- _data2elements(x, data);
+ if (data) { _data2elements(x, data); }
}
);
+
//]]></script>
<fieldset class="cbi-section" id="ddns_status_section">
diff --git a/applications/luci-app-ddns/po/de/ddns.po b/applications/luci-app-ddns/po/de/ddns.po
index b965a91fd3..f6e0d5e393 100644
--- a/applications/luci-app-ddns/po/de/ddns.po
+++ b/applications/luci-app-ddns/po/de/ddns.po
@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: luci-app-ddns\n"
-"POT-Creation-Date: 2015-01-17 18:28+0100\n"
-"PO-Revision-Date: 2015-01-17 18:36+0100\n"
+"POT-Creation-Date: 2015-02-08 18:30+0100\n"
+"PO-Revision-Date: 2015-02-08 18:36+0100\n"
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
"Language-Team: \n"
"Language: de\n"
@@ -20,9 +20,15 @@ msgstr "&"
msgid "-- custom --"
msgstr "-- benutzerdefiniert --"
+msgid "-- default --"
+msgstr "-- Standard --"
+
msgid "Advanced Settings"
msgstr "Erweiterte Einstellungen"
+msgid "Allow non-public IP's"
+msgstr "Erlaube Nicht-öffentliche IPs"
+
msgid "Applying changes"
msgstr "Änderungen anwenden"
@@ -38,12 +44,14 @@ msgstr ""
msgid ""
"Below is a list of configured DDNS configurations and their current state."
-"<br />If you want to send updates for IPv4 and IPv6 you need to define two "
-"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr ""
-"Liste der definierten DDNS Konfigurationen und ihr aktueller Status.<br /"
-">Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie "
-"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'"
+"Liste der konfigurierten DDNS Konfigurationen und ihr momentaner Status."
+
+msgid "Bind Network"
+msgstr "Bind-Netzwerk"
+
+msgid "Binding to a specific network not supported"
+msgstr "'Bind' an ein bestimmtes Netzwerk wird nicht unterstützt"
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
@@ -59,6 +67,9 @@ msgstr ""
"BusyBox's nslookup unterstützt es nicht das TCP-Protokoll für DNS Anfragen "
"anstelle des standardmäßigen UDP-Protokolls."
+msgid "Casual users should not change this setting"
+msgstr "Standard Benutzer sollten diese Einstellung nicht ändern."
+
msgid "Check Interval"
msgstr "Prüfinterval"
@@ -71,8 +82,18 @@ msgstr "Konfigurationsfehler"
msgid "Configuration"
msgstr "Einstellungen"
-msgid "Configure here the details for selected Dynamic DNS service"
-msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst"
+msgid ""
+"Configure here the details for all Dynamic DNS services including this LuCI "
+"application."
+msgstr ""
+"Konfiguriere hier die Details für alle Dynamik DNS Dienste einschließlich "
+"dieser LuCI Anwendung."
+
+msgid "Configure here the details for selected Dynamic DNS service."
+msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst."
+
+msgid "Current setting"
+msgstr "Aktuelle Einstellung"
msgid ""
"Currently DDNS updates are not started at boot or on interface events.<br /"
@@ -113,6 +134,9 @@ msgstr "DNS Anfragen über TCP nicht unterstützt"
msgid "DNS-Server"
msgstr "DNS-Server"
+msgid "Date format"
+msgstr "Datumsformat "
+
msgid "Defines the Web page to read systems IPv4-Address from"
msgstr ""
"Definiert die Web-Seite von der die aktuelle IPv4-Adresse des System gelesen "
@@ -159,6 +183,16 @@ msgstr ""
msgid "Details for"
msgstr "Details für"
+msgid "Directory contains Log files for each running section"
+msgstr ""
+"Das Verzeichnis enthält die Protokolldateien aller laufenden Konfigurationen."
+
+msgid ""
+"Directory contains PID and other status information for each running section"
+msgstr ""
+"Das Verzeichnis enthält die PID und andere Statusinformationen aller "
+"laufenden Konfigurationen."
+
msgid "Disabled"
msgstr "Deaktiviert"
@@ -206,6 +240,13 @@ msgstr ""
"Folgen Sie dem Link<br />Hier finden Sie weitere Hinweise um Ihr System für "
"die Nutzung aller Optionen der DDNS Skripte zu optimieren."
+msgid "For detailed information about parameter settings look here."
+msgstr ""
+"Detaillierte Informationen zu den Parametereinstellungen finden Sie hier."
+
+msgid "For supported codes look here"
+msgstr "Unterstützte Kodierungen finden Sie hier."
+
msgid "Force IP Version"
msgstr "Erzwinge IP-Version"
@@ -227,6 +268,16 @@ msgstr "Format"
msgid "Format: IP or FQDN"
msgstr "Format: IP-Adresse oder FQDN"
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget verwendet die IP des gewählten Netzwerkes; cURL verwendet die "
+"physikalische Schnittstelle."
+
+msgid "Global Settings"
+msgstr "Globale Einstellungen"
+
msgid "HTTPS not supported"
msgstr "HTTPS nicht unterstützt"
@@ -263,6 +314,9 @@ msgstr "IPv6 nicht unterstützt"
msgid "IPv6-Address"
msgstr "IPv6-Adresse"
+msgid "If both cURL and GNU Wget are installed, Wget is used by default."
+msgstr "Wenn cURL und GNU Wget installiert sind, wird Wget verwendet."
+
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
@@ -271,6 +325,13 @@ msgstr ""
"über das LuCI Web Interface noch von der Geräte-Konsole"
msgid ""
+"If you want to send updates for IPv4 and IPv6 you need to define two "
+"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
+msgstr ""
+"Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie "
+"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'"
+
+msgid ""
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr ""
"In einigen Versionen von OpenWrt wurde cURL/libcurl ohne Proxy Unterstützung "
@@ -298,6 +359,11 @@ msgstr ""
"werden.<br />Ein Wert von '0' führt das Skript nur einmalig aus. <br />Der "
"Wert muss größer als das Prüfintervall sein oder '0'."
+msgid "It is NOT recommended for casual users to change settings on this page."
+msgstr ""
+"Es wird nicht empfohlen, dass Standard Benutzer die Einstellungen auf dieser "
+"Seite ändern."
+
msgid "Last Update"
msgstr "Letztes Aktualisierung"
@@ -307,6 +373,12 @@ msgstr "Lade"
msgid "Log File Viewer"
msgstr "Protokolldatei"
+msgid "Log directory"
+msgstr "Protokoll-Verzeichnis"
+
+msgid "Log length"
+msgstr "Protokolllänge"
+
msgid "Log to file"
msgstr "Protokoll in Datei schreiben"
@@ -314,6 +386,13 @@ msgid "Log to syslog"
msgstr "Systemprotokoll verwenden"
msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Weder GNU Wget mit SSL noch cURL sind installiert um ein Netzwerk zur "
+"Kommunikation festzulegen."
+
+msgid ""
"Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS "
"protocol."
msgstr ""
@@ -338,9 +417,16 @@ msgstr "Keine Daten"
msgid "No logging"
msgstr "Keine Protokollierung"
+msgid "Non-public and by default blocked IP's"
+msgstr "Nicht-öffentliche und standardmäßig blockierte IPs."
+
msgid "Notice"
msgstr "Notiz"
+msgid "Number of last lines stored in log files"
+msgstr ""
+"Anzahl der letzten Zeilen die in der Protokolldatei gespeichert werden."
+
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
msgstr ""
"OPTIONAL: Erzwingt die Verwendung einer reinen IPv4/IPv6 Kommunikation."
@@ -349,6 +435,9 @@ msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
msgstr ""
"OPTIONAL: Erzwingt die Verwendung von TCP anstelle von UDP bei DNS Anfragen."
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPTIONAL: Netzwerk das zur Kommunikation verwendet werden soll."
+
msgid "OPTIONAL: Proxy-Server for detection and updates."
msgstr "OPTIONAL: Proxy-Server für Adresserkennung und Aktualisierungen"
@@ -357,9 +446,6 @@ msgstr ""
"OPTIONAL: Ersetzt den voreingestellten DNS-Server um die 'Registrierte IP' "
"zu ermitteln."
-msgid "Old version of ddns-scripts installed"
-msgstr "Alte Version von ddns-scripts installiert"
-
msgid "On Error the script will retry the failed action after given time"
msgstr ""
"Bei Fehlern wird das Skript die fehlerhafte Aktion nach der gegebenen Zeit "
@@ -428,6 +514,9 @@ msgstr "Start"
msgid "Start / Stop"
msgstr "Start / Stopp"
+msgid "Status directory"
+msgstr "Status-Verzeichnis"
+
msgid "Stopped"
msgstr "Angehalten"
@@ -444,6 +533,12 @@ msgstr "Kein Dienst konfiguriert"
msgid "Timer Settings"
msgstr "Zeitgeber Einstellungen"
+msgid "To change global settings click here"
+msgstr "Globale Einstellungen können sie hier ändern."
+
+msgid "To use cURL activate this option."
+msgstr "Um cURL zu verwenden aktivieren sie diese Einstellung."
+
msgid "URL"
msgstr "URL"
@@ -466,6 +561,9 @@ msgstr "Aktualisierungsfehler"
msgid "Use HTTP Secure"
msgstr "Verwende sicheres HTTP"
+msgid "Use cURL"
+msgstr "Verwende cURL"
+
msgid "User defined script to read systems IP-Address"
msgstr ""
"Definiert das Skript mit dem die aktuelle IP-Adresse des System gelesen "
@@ -511,6 +609,9 @@ msgstr ""
"Sie sollten das Programmpaket GNU Wget mit SSL (bevorzugt) oder cURL "
"installieren."
+msgid "You should install GNU Wget with SSL or cURL package."
+msgstr "Sie sollten das Programmpaket GNU Wget mit SSL oder cURL installieren."
+
msgid "You should install GNU Wget with SSL or replace libcurl."
msgstr ""
"Sie sollten das Programmpaket GNU Wget mit SSL installieren oder libcurl "
@@ -548,12 +649,12 @@ msgstr "hier aktivieren"
msgid "file or directory not found or not 'IGNORE'"
msgstr "Datei oder Verzeichnis nicht gefunden oder nicht 'IGNORE'"
+msgid "help"
+msgstr "Hilfe"
+
msgid "hours"
msgstr "Stunden"
-msgid "install update here"
-msgstr "Aktualisierung hier installieren"
-
msgid "installed"
msgstr "installiert"
@@ -615,6 +716,9 @@ msgstr "Bitte 'IPv4' Adressversion auswählen"
msgid "please select 'IPv4' address version in"
msgstr "Bitte 'IPv4' Adressversion auswählen in den"
+msgid "please set to 'default'"
+msgstr "Bitte auf 'Standard' setzen"
+
msgid "proxy port missing"
msgstr "Proxy-Port fehlt"
diff --git a/applications/luci-app-ddns/po/templates/ddns.pot b/applications/luci-app-ddns/po/templates/ddns.pot
index 4b983cec1e..6e4f2fe08a 100644
--- a/applications/luci-app-ddns/po/templates/ddns.pot
+++ b/applications/luci-app-ddns/po/templates/ddns.pot
@@ -7,9 +7,15 @@ msgstr ""
msgid "-- custom --"
msgstr ""
+msgid "-- default --"
+msgstr ""
+
msgid "Advanced Settings"
msgstr ""
+msgid "Allow non-public IP's"
+msgstr ""
+
msgid "Applying changes"
msgstr ""
@@ -23,8 +29,12 @@ msgstr ""
msgid ""
"Below is a list of configured DDNS configurations and their current state."
-"<br />If you want to send updates for IPv4 and IPv6 you need to define two "
-"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
+msgstr ""
+
+msgid "Bind Network"
+msgstr ""
+
+msgid "Binding to a specific network not supported"
msgstr ""
msgid ""
@@ -37,6 +47,9 @@ msgid ""
"UDP when requesting DNS server"
msgstr ""
+msgid "Casual users should not change this setting"
+msgstr ""
+
msgid "Check Interval"
msgstr ""
@@ -49,7 +62,15 @@ msgstr ""
msgid "Configuration"
msgstr ""
-msgid "Configure here the details for selected Dynamic DNS service"
+msgid ""
+"Configure here the details for all Dynamic DNS services including this LuCI "
+"application."
+msgstr ""
+
+msgid "Configure here the details for selected Dynamic DNS service."
+msgstr ""
+
+msgid "Current setting"
msgstr ""
msgid ""
@@ -84,6 +105,9 @@ msgstr ""
msgid "DNS-Server"
msgstr ""
+msgid "Date format"
+msgstr ""
+
msgid "Defines the Web page to read systems IPv4-Address from"
msgstr ""
@@ -115,6 +139,13 @@ msgstr ""
msgid "Details for"
msgstr ""
+msgid "Directory contains Log files for each running section"
+msgstr ""
+
+msgid ""
+"Directory contains PID and other status information for each running section"
+msgstr ""
+
msgid "Disabled"
msgstr ""
@@ -158,6 +189,12 @@ msgid ""
"run DDNS scripts with all options"
msgstr ""
+msgid "For detailed information about parameter settings look here."
+msgstr ""
+
+msgid "For supported codes look here"
+msgstr ""
+
msgid "Force IP Version"
msgstr ""
@@ -179,6 +216,14 @@ msgstr ""
msgid "Format: IP or FQDN"
msgstr ""
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+msgid "Global Settings"
+msgstr ""
+
msgid "HTTPS not supported"
msgstr ""
@@ -212,12 +257,20 @@ msgstr ""
msgid "IPv6-Address"
msgstr ""
+msgid "If both cURL and GNU Wget are installed, Wget is used by default."
+msgstr ""
+
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
msgstr ""
msgid ""
+"If you want to send updates for IPv4 and IPv6 you need to define two "
+"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
+msgstr ""
+
+msgid ""
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr ""
@@ -238,6 +291,9 @@ msgid ""
"Interval' except '0' are not supported"
msgstr ""
+msgid "It is NOT recommended for casual users to change settings on this page."
+msgstr ""
+
msgid "Last Update"
msgstr ""
@@ -247,6 +303,12 @@ msgstr ""
msgid "Log File Viewer"
msgstr ""
+msgid "Log directory"
+msgstr ""
+
+msgid "Log length"
+msgstr ""
+
msgid "Log to file"
msgstr ""
@@ -254,6 +316,11 @@ msgid "Log to syslog"
msgstr ""
msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+msgid ""
"Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS "
"protocol."
msgstr ""
@@ -276,22 +343,28 @@ msgstr ""
msgid "No logging"
msgstr ""
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
msgid "Notice"
msgstr ""
+msgid "Number of last lines stored in log files"
+msgstr ""
+
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
msgstr ""
msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
msgstr ""
-msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgid "OPTIONAL: Network to use for communication"
msgstr ""
-msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgid "OPTIONAL: Proxy-Server for detection and updates."
msgstr ""
-msgid "Old version of ddns-scripts installed"
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
msgstr ""
msgid "On Error the script will retry the failed action after given time"
@@ -360,6 +433,9 @@ msgstr ""
msgid "Start / Stop"
msgstr ""
+msgid "Status directory"
+msgstr ""
+
msgid "Stopped"
msgstr ""
@@ -374,6 +450,12 @@ msgstr ""
msgid "Timer Settings"
msgstr ""
+msgid "To change global settings click here"
+msgstr ""
+
+msgid "To use cURL activate this option."
+msgstr ""
+
msgid "URL"
msgstr ""
@@ -394,6 +476,9 @@ msgstr ""
msgid "Use HTTP Secure"
msgstr ""
+msgid "Use cURL"
+msgstr ""
+
msgid "User defined script to read systems IP-Address"
msgstr ""
@@ -430,6 +515,9 @@ msgstr ""
msgid "You should install GNU Wget with SSL (prefered) or cURL package."
msgstr ""
+msgid "You should install GNU Wget with SSL or cURL package."
+msgstr ""
+
msgid "You should install GNU Wget with SSL or replace libcurl."
msgstr ""
@@ -463,10 +551,10 @@ msgstr ""
msgid "file or directory not found or not 'IGNORE'"
msgstr ""
-msgid "hours"
+msgid "help"
msgstr ""
-msgid "install update here"
+msgid "hours"
msgstr ""
msgid "installed"
@@ -529,6 +617,9 @@ msgstr ""
msgid "please select 'IPv4' address version in"
msgstr ""
+msgid "please set to 'default'"
+msgstr ""
+
msgid "proxy port missing"
msgstr ""
diff --git a/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua b/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua
index 8cf35b79b6..c4be1818f2 100644
--- a/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua
+++ b/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua
@@ -30,7 +30,7 @@ function pwd.write(self, section, value)
pass = value
else
local t = tonumber(nixio.getpid()*os.time())
- local salt = "$5$" .. t .. "$"
+ local salt = "$1$" .. t .. "$"
pass = nixio.crypt(value, salt)
end
Value.write(self, section, pass)
diff --git a/applications/luci-app-privoxy/Makefile b/applications/luci-app-privoxy/Makefile
index 4c1fc578a8..bc2c57ee93 100644
--- a/applications/luci-app-privoxy/Makefile
+++ b/applications/luci-app-privoxy/Makefile
@@ -6,33 +6,33 @@
include $(TOPDIR)/rules.mk
-# LuCI specific settings
-LUCI_TITLE:=LuCI Support for Privoxy WEB proxy
-LUCI_DEPENDS:=+luci-mod-admin-full +privoxy
-LUCI_PKGARCH:=all
-
PKG_NAME:=luci-app-privoxy
# Version == major.minor.patch
# increase "minor" on new functionality and "patch" on patches/optimization
-PKG_VERSION:=1.0.2
+PKG_VERSION:=1.0.3
# Release == build
# increase on changes of translation files
-PKG_RELEASE:=0
+PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+# LuCI specific settings
+LUCI_TITLE:=LuCI Support for Privoxy WEB proxy
+LUCI_DEPENDS:=+luci-mod-admin-full +privoxy
+LUCI_PKGARCH:=all
+
define Package/$(PKG_NAME)/config
# shown in make menuconfig <Help>
help
$(LUCI_TITLE)
-
- Version : $(PKG_VERSION)-$(PKG_RELEASE)
- Maintainer: $(PKG_MAINTAINER)
+ .
+ Version: $(PKG_VERSION)-$(PKG_RELEASE)
+ $(PKG_MAINTAINER)
endef
-include ../../luci.mk
+include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua
index de73d0c5df..9ffc404ce9 100755
--- a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua
+++ b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua
@@ -7,26 +7,16 @@ local NX = require "nixio"
local NXFS = require "nixio.fs"
local HTTP = require "luci.http"
local UCI = require "luci.model.uci"
+local UTIL = require "luci.util"
local SYS = require "luci.sys"
PRIVOXY_MIN = "3.0.22-0" -- minimum version of service required
function index()
- local _sys = require "luci.sys"
- local _verinst = _sys.exec([[opkg list-installed ]] .. "privoxy" .. [[ | cut -d " " -f 3 ]])
- local _cmd = [[opkg compare-versions "]] .. _verinst .. [[" ">=" "]] .. "3.0.22-0" .. [["]]
- local _verok = tonumber(_sys.call(_cmd))
-
- -- check config file and version
- if not nixio.fs.access("/etc/config/privoxy") or (_verok == 0) then
- entry( {"admin", "services", "privoxy"}, cbi("privoxy/apperror",
- {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true }), _("Privoxy WEB proxy"), 59)
- else
- entry( {"admin", "services", "privoxy"}, cbi("privoxy/detail"), _("Privoxy WEB proxy"), 59)
- entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true
- entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true
- entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true
- end
+ entry( {"admin", "services", "privoxy"}, cbi("privoxy"), _("Privoxy WEB proxy"), 59)
+ entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true
+ entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true
+ entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true
end
-- called by XHR.get from detail_logview.htm
@@ -80,18 +70,71 @@ function get_pid(from_lua)
end
end
--- get the "name" of the current active theme
-function get_theme()
- local _uci = UCI.cursor()
- local _base = _uci:get("luci", "main", "mediaurlbase") -- only pathname
- _uci:unload("luci")
+-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
+function ipkg_ver_compare(ver1, comp, ver2)
+ if not ver1 or not (#ver1 > 0)
+ or not ver2 or not (#ver2 > 0)
+ or not comp or not (#comp > 0) then return nil end
+ -- correct compare string
+ if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
+ elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<="
+ elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">="
+ elseif comp == "=" or comp == "==" then comp = "=="
+ elseif comp == "<<" then comp = "<"
+ elseif comp == ">>" then comp = ">"
+ else return nil end
+
+ local av1 = UTIL.split(ver1, "[%.%-]", nil, true)
+ local av2 = UTIL.split(ver2, "[%.%-]", nil, true)
+
+ for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do
+ local s1 = av1[i] or ""
+ local s2 = av2[i] or ""
+ local n1 = tonumber(s1)
+ local n2 = tonumber(s2)
+
+ -- one numeric and other empty string then set other to 0
+ if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end
+ if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end
- for k, v in pairs(luci.config.themes) do
- if k:sub(1, 1) ~= "." and v == _base then
- return k
+ local nc = (n1 and n2) -- numeric compare
+
+ if nc then
+ -- first "not equal" found return true
+ if comp == "~=" and (n1 ~= n2) then return true end
+ -- first "lower" found return true
+ if (comp == "<" or comp == "<=") and (n1 < n2) then return true end
+ -- first "greater" found return true
+ if (comp == ">" or comp == ">=") and (n1 > n2) then return true end
+ -- not equal then return false
+ if (n1 ~= n2) then return false end
+ else
+ if comp == "~=" and (s1 ~= s2) then return true end
+ if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
+ if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
+ if (s1 ~= s2) then return false end
end
end
- return nil
+ -- all equal then true
+ return true
+end
+
+-- read version information for given package if installed
+function ipkg_ver_installed(pkg)
+ local version = nil
+ local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r")
+ if control then
+ local ln
+ repeat
+ ln = control:read("*l")
+ if ln and ln:match("^Version: ") then
+ version = ln:gsub("^Version: ", "")
+ break
+ end
+ until not ln
+ control:close()
+ end
+ return version
end
-- replacement of build-in Flag.parse of cbi.lua
diff --git a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/detail.lua b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua
index 2c846a1f99..c009313e3a 100755
--- a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/detail.lua
+++ b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua
@@ -1,37 +1,69 @@
--- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+-- Copyright 2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed under the Apache License, Version 2.0
local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local UTIL = require "luci.util"
+local DISP = require "luci.dispatcher"
local DTYP = require "luci.cbi.datatypes"
local CTRL = require "luci.controller.privoxy" -- this application's controller
-- Bootstrap theme needs 2 or 3 additional linefeeds for tab description for better optic
-local LFLF = (CTRL.get_theme() == "Bootstrap") and [[<br /><br /><br />]] or [[]]
local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]]
--- cbi-map -- ##################################################################
-local m = Map("privoxy")
-m.title = [[</a><a href="javascript:alert(']]
+local VERINST = CTRL.ipkg_ver_installed("privoxy")
+local VEROK = CTRL.ipkg_ver_compare(VERINST,">=",CTRL.PRIVOXY_MIN)
+
+local TITLE = [[</a><a href="javascript:alert(']]
.. translate("Version Information")
.. [[\n\nluci-app-privoxy]]
.. [[\n\t]] .. translate("Version") .. [[:\t]]
- .. SYS.exec([[opkg list-installed ]] .. [[luci-app-privoxy]] .. [[ | cut -d " " -f 3 ]])
+ .. CTRL.ipkg_ver_installed("luci-app-privoxy")
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]]
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.PRIVOXY_MIN .. [[ ]] .. translate("or higher")
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]]
- .. [[\n\t]] .. translate("Version") .. [[:\t]]
- .. SYS.exec([[opkg list-installed ]] .. [[privoxy]] .. [[ | cut -d " " -f 3 ]])
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. VERINST
.. [[\n\n]]
.. [[')">]]
.. translate("Privoxy WEB proxy")
-m.description = translate("Privoxy is a non-caching web proxy with advanced filtering "
+
+local DESC = translate("Privoxy is a non-caching web proxy with advanced filtering "
.. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
.. "controlling access, and removing ads and other obnoxious Internet junk.")
.. [[<br /><strong>]]
.. translate("For help use link at the relevant option")
.. [[</strong>]]
+
+-- Error handling if wrong privoxy version installed -- ########################
+if not nixio.fs.access("/etc/config/privoxy") or not VEROK then
+ local f = SimpleForm("_no_config")
+ f.title = TITLE
+ f.description = DESC
+ f.submit = false
+ f.reset = false
+
+ local s = f:section(SimpleSection)
+ s.title = [[<font color="red">]] .. [[<strong>]]
+ .. translate("Software update required")
+ .. [[</strong>]] .. [[</font>]]
+
+ local v = s:option(DummyValue, "_update_needed")
+ v.titleref = DISP.build_url("admin", "system", "packages")
+ v.rawhtml = true
+ v.value = [[<h3><strong><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;]]
+ .. translate("The currently installed 'privoxy' package is not supported by LuCI application.")
+ .. [[<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;]]
+ .. translate("required") .. ": " .. CTRL.PRIVOXY_MIN .. " *** ".. translate("installed") .. ": " .. VERINST
+ .. [[<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;]]
+ .. translate("Please update to the current version!")
+ .. [[<br /><br /></strong></h3>]]
+ return f
+end
+
+-- cbi-map -- ##################################################################
+local m = Map("privoxy")
+m.title = TITLE
+m.description = DESC
function m.commit_handler(self)
if self.changed then -- changes ?
os.execute("/etc/init.d/privoxy reload &") -- reload configuration
@@ -45,8 +77,7 @@ ns:tab("local",
translate("Local Set-up"),
translate("If you intend to operate Privoxy for more users than just yourself, "
.. "it might be a good idea to let them know how to reach you, what you block "
- .. "and why you do that, your policies, etc.")
- .. LFLF )
+ .. "and why you do that, your policies, etc.") )
local function err_tab_local(title, msg)
return string.format(translate("Local Set-up") .. " - %s: %s", title, msg )
end
@@ -55,16 +86,14 @@ ns:tab("filter",
translate("Files and Directories"),
translate("Privoxy can (and normally does) use a number of other files "
.. "for additional configuration, help and logging. This section of "
- .. "the configuration file tells Privoxy where to find those other files.")
- .. LFLF )
+ .. "the configuration file tells Privoxy where to find those other files.") )
local function err_tab_filter(title, msg)
return string.format(translate("Files and Directories") .. " - %s: %s", title, msg )
end
ns:tab("access",
translate("Access Control"),
- translate("This tab controls the security-relevant aspects of Privoxy's configuration.")
- .. LFLF )
+ translate("This tab controls the security-relevant aspects of Privoxy's configuration.") )
local function err_tab_access(title, msg)
return string.format(translate("Access Control") .. " - %s: %s", title, msg )
end
@@ -73,8 +102,7 @@ ns:tab("forward",
translate("Forwarding"),
translate("Configure here the routing of HTTP requests through a chain of multiple proxies. "
.. "Note that parent proxies can severely decrease your privacy level. "
- .. "Also specified here are SOCKS proxies.")
- .. LFLF )
+ .. "Also specified here are SOCKS proxies.") )
ns:tab("misc",
translate("Miscellaneous"),
@@ -175,7 +203,7 @@ piu.optional = true
piu.rmempty = true
-- trust-info-url --------------------------------------------------------------
-local tiu = ns:taboption("local", DynamicList, "trust_info_url")
+local tiu = ns:taboption("local", Value, "trust_info_url")
tiu.title = string.format(HELP, "TRUST-INFO-URL", "Trust Info URLs" )
tiu.description = translate("A URL to be displayed in the error page that users will see if access to an untrusted page is denied.")
.. [[<br /><strong>]]
@@ -240,15 +268,15 @@ function cd.validate(self, value)
end
-- templdir --------------------------------------------------------------------
-local td = ns:taboption("filter", Value, "templdir")
-td.title_base = "Template Directory"
-td.title = string.format(HELP, "TEMPLDIR", td.title_base )
-td.description = translate("An alternative directory where the templates are loaded from.")
+local tld = ns:taboption("filter", Value, "templdir")
+tld.title_base = "Template Directory"
+tld.title = string.format(HELP, "TEMPLDIR", tld.title_base )
+tld.description = translate("An alternative directory where the templates are loaded from.")
.. [[<br />]]
.. translate("No trailing '/', please.")
-td.placeholder = "/etc/privoxy/templates"
-td.rmempty = true
-function td.validate(self, value)
+tld.placeholder = "/etc/privoxy/templates"
+tld.rmempty = true
+function tld.validate(self, value)
if not NXFS.access(value) then
return nil, err_tab_filter(self.title_base, translate("Directory does not exist!") )
else
@@ -256,6 +284,16 @@ function td.validate(self, value)
end
end
+-- temporary-directory ---------------------------------------------------------
+local td = ns:taboption("filter", Value, "temporary_directory")
+td.title_base = "Temporary Directory"
+td.title = string.format(HELP, "TEMPORARY-DIRECTORY", td.title_base )
+td.description = translate("A directory where Privoxy can create temporary files.")
+ .. [[<br /><strong>]]
+ .. translate("Only when using 'external filters', Privoxy has to create temporary files.")
+ .. [[</strong>]]
+td.rmempty = true
+
-- actionsfile -----------------------------------------------------------------
local af = ns:taboption("filter", DynamicList, "actionsfile")
af.title_base = "Action Files"
@@ -343,7 +381,7 @@ tf.description = translate("The trust mechanism is an experimental feature for b
.. [[<br /><strong>]]
.. translate("It is NOT recommended for the casual user.")
.. [[</strong>]]
-tf.placeholder = "sites.trust"
+tf.placeholder = "user.trust"
tf.rmempty = true
function tf.validate(self, value)
local confdir = cd:formvalue(ns.section)
@@ -767,133 +805,144 @@ function st.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d1 = ns:taboption("debug", Flag, "debug_1")
-d1.title = string.format(HELP, "DEBUG", "Debug 1" )
-d1.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.")
+-- debug 1 ---------------------------------------------------------------------
+local d0 = ns:taboption("debug", Flag, "debug_1")
+d0.title = string.format(HELP, "DEBUG", "Debug 1" )
+d0.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.")
+d0.rmempty = true
+function d0.parse(self, section)
+ CTRL.flag_parse(self, section)
+end
+
+-- debug 2 ---------------------------------------------------------------------
+local d1 = ns:taboption("debug", Flag, "debug_2")
+d1.title = string.format(HELP, "DEBUG", "Debug 2" )
+d1.description = translate("Show each connection status")
d1.rmempty = true
function d1.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d2 = ns:taboption("debug", Flag, "debug_2")
-d2.title = string.format(HELP, "DEBUG", "Debug 2" )
-d2.description = translate("Show each connection status")
+-- debug 4 ---------------------------------------------------------------------
+local d2 = ns:taboption("debug", Flag, "debug_4")
+d2.title = string.format(HELP, "DEBUG", "Debug 4" )
+d2.description = translate("Show I/O status")
d2.rmempty = true
function d2.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d3 = ns:taboption("debug", Flag, "debug_4")
-d3.title = string.format(HELP, "DEBUG", "Debug 4" )
-d3.description = translate("Show I/O status")
+-- debug 8 ---------------------------------------------------------------------
+local d3 = ns:taboption("debug", Flag, "debug_8")
+d3.title = string.format(HELP, "DEBUG", "Debug 8" )
+d3.description = translate("Show header parsing")
d3.rmempty = true
function d3.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d4 = ns:taboption("debug", Flag, "debug_8")
-d4.title = string.format(HELP, "DEBUG", "Debug 8" )
-d4.description = translate("Show header parsing")
+-- debug 16 --------------------------------------------------------------------
+local d4 = ns:taboption("debug", Flag, "debug_16")
+d4.title = string.format(HELP, "DEBUG", "Debug 16" )
+d4.description = translate("Log all data written to the network")
d4.rmempty = true
function d4.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d5 = ns:taboption("debug", Flag, "debug_16")
-d5.title = string.format(HELP, "DEBUG", "Debug 16" )
-d5.description = translate("Log all data written to the network")
+-- debug 32 --------------------------------------------------------------------
+local d5 = ns:taboption("debug", Flag, "debug_32")
+d5.title = string.format(HELP, "DEBUG", "Debug 32" )
+d5.description = translate("Debug force feature")
d5.rmempty = true
function d5.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d6 = ns:taboption("debug", Flag, "debug_32")
-d6.title = string.format(HELP, "DEBUG", "Debug 32" )
-d6.description = translate("Debug force feature")
+-- debug 64 --------------------------------------------------------------------
+local d6 = ns:taboption("debug", Flag, "debug_64")
+d6.title = string.format(HELP, "DEBUG", "Debug 64" )
+d6.description = translate("Debug regular expression filters")
d6.rmempty = true
function d6.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d7 = ns:taboption("debug", Flag, "debug_64")
-d7.title = string.format(HELP, "DEBUG", "Debug 64" )
-d7.description = translate("Debug regular expression filters")
+-- debug 128 -------------------------------------------------------------------
+local d7 = ns:taboption("debug", Flag, "debug_128")
+d7.title = string.format(HELP, "DEBUG", "Debug 128" )
+d7.description = translate("Debug redirects")
d7.rmempty = true
function d7.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d8 = ns:taboption("debug", Flag, "debug_128")
-d8.title = string.format(HELP, "DEBUG", "Debug 128" )
-d8.description = translate("Debug redirects")
+-- debug 256 -------------------------------------------------------------------
+local d8 = ns:taboption("debug", Flag, "debug_256")
+d8.title = string.format(HELP, "DEBUG", "Debug 256" )
+d8.description = translate("Debug GIF de-animation")
d8.rmempty = true
function d8.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d9 = ns:taboption("debug", Flag, "debug_256")
-d9.title = string.format(HELP, "DEBUG", "Debug 256" )
-d9.description = translate("Debug GIF de-animation")
+-- debug 512 -------------------------------------------------------------------
+local d9 = ns:taboption("debug", Flag, "debug_512")
+d9.title = string.format(HELP, "DEBUG", "Debug 512" )
+d9.description = translate("Common Log Format")
d9.rmempty = true
function d9.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d10 = ns:taboption("debug", Flag, "debug_512")
-d10.title = string.format(HELP, "DEBUG", "Debug 512" )
-d10.description = translate("Common Log Format")
+-- debug 1024 ------------------------------------------------------------------
+local d10 = ns:taboption("debug", Flag, "debug_1024")
+d10.title = string.format(HELP, "DEBUG", "Debug 1024" )
+d10.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.")
d10.rmempty = true
function d10.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d11 = ns:taboption("debug", Flag, "debug_1024")
-d11.title = string.format(HELP, "DEBUG", "Debug 1024" )
-d11.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.")
+-- debug 2048 ------------------------------------------------------------------
+local d11 = ns:taboption("debug", Flag, "debug_2048")
+d11.title = string.format(HELP, "DEBUG", "Debug 2048" )
+d11.description = translate("CGI user interface")
d11.rmempty = true
function d11.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d12 = ns:taboption("debug", Flag, "debug_2048")
-d12.title = string.format(HELP, "DEBUG", "Debug 2048" )
-d12.description = translate("CGI user interface")
+-- debug 4096 ------------------------------------------------------------------
+local d12 = ns:taboption("debug", Flag, "debug_4096")
+d12.title = string.format(HELP, "DEBUG", "Debug 4096" )
+d12.description = translate("Startup banner and warnings.")
d12.rmempty = true
function d12.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d13 = ns:taboption("debug", Flag, "debug_4096")
-d13.title = string.format(HELP, "DEBUG", "Debug 4096" )
-d13.description = translate("Startup banner and warnings.")
+-- debug 8192 ------------------------------------------------------------------
+local d13 = ns:taboption("debug", Flag, "debug_8192")
+d13.title = string.format(HELP, "DEBUG", "Debug 8192" )
+d13.description = translate("Non-fatal errors - *we highly recommended enabling this*")
d13.rmempty = true
function d13.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
-local d14 = ns:taboption("debug", Flag, "debug_8192")
-d14.title = string.format(HELP, "DEBUG", "Debug 8192" )
-d14.description = translate("Non-fatal errors - *we highly recommended enabling this*")
+-- debug 16384 -----------------------------------------------------------------
+--[[ TODO ???
+local d14 = ns:taboption("debug", Flag, "debug_16384")
+d14.title = string.format(HELP, "DEBUG", "Debug 16384" )
+d14.description = translate("")
d14.rmempty = true
function d14.parse(self, section)
CTRL.flag_parse(self, section)
end
+]]--
--- debug -----------------------------------------------------------------------
+-- debug 32768 -----------------------------------------------------------------
local d15 = ns:taboption("debug", Flag, "debug_32768")
d15.title = string.format(HELP, "DEBUG", "Debug 32768" )
d15.description = translate("Log all data read from the network")
@@ -902,7 +951,7 @@ function d15.parse(self, section)
CTRL.flag_parse(self, section)
end
--- debug -----------------------------------------------------------------------
+-- debug 65536 -----------------------------------------------------------------
local d16 = ns:taboption("debug", Flag, "debug_65536")
d16.title = string.format(HELP, "DEBUG", "Debug 65536" )
d16.description = translate("Log the applying actions")
diff --git a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua
deleted file mode 100755
index fcbb88074d..0000000000
--- a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua
+++ /dev/null
@@ -1,47 +0,0 @@
--- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
--- Licensed under the Apache License, Version 2.0
-
-local CTRL = require "luci.controller.privoxy" -- this application's controller
-local DISP = require "luci.dispatcher"
-local SYS = require "luci.sys"
-
-local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]]
-
--- cbi-map -- ##################################################################
-local m = Map("privoxy")
-m.title = [[</a><a href="javascript:alert(']]
- .. translate("Version Information")
- .. [[\n\nluci-app-privoxy]]
- .. [[\n\t]] .. translate("Version") .. [[:\t]]
- .. SYS.exec([[opkg list-installed ]] .. [[luci-app-privoxy]] .. [[ | cut -d " " -f 3 ]])
- .. [[\n\nprivoxy ]] .. translate("required") .. [[:]]
- .. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.PRIVOXY_MIN .. [[ ]] .. translate("or higher")
- .. [[\n\nprivoxy ]] .. translate("installed") .. [[:]]
- .. [[\n\t]] .. translate("Version") .. [[:\t]]
- .. SYS.exec([[opkg list-installed ]] .. [[privoxy]] .. [[ | cut -d " " -f 3 ]])
- .. [[\n\n]]
- .. [[')">]]
- .. translate("Privoxy WEB proxy")
-m.description = translate("Privoxy is a non-caching web proxy with advanced filtering "
- .. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
- .. "controlling access, and removing ads and other obnoxious Internet junk.")
-
--- cbi-section -- ##############################################################
-local s = m:section(SimpleSection)
-s.title = [[<font color="red">]] .. [[<strong>]]
- .. translate("Software update required")
- .. [[</strong>]] .. [[</font>]]
-
--- old privoxy sofware version --------------------------------------------------------------
-local v = s:option(DummyValue, "_update_needed")
-v.titleref = DISP.build_url("admin", "system", "packages")
-v.rawhtml = true
---v.title = [[<h3>]] .. [[<font color="red">]] .. [[<strong>]]
--- .. translate("Software update required")
--- .. [[</strong>]] .. [[</font>]] .. [[</h3>]] .. [[<br />]]
-v.value = [[<h3>]] .. [[<strong>]]
- .. translate("The currently installed 'privoxy' package is not supported by LuCI application.")
- .. [[<br />]]
- .. translate("Please update to the current version!")
- .. [[</strong>]] .. [[</h3>]]
-return m
diff --git a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
index 329341ddc4..c532b4a6d3 100644
--- a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
+++ b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
@@ -150,7 +150,6 @@ function statistics_render()
if png then
luci.http.prepare_content("image/png")
l12.pump.all(l12.source.file(png), luci.http.write)
- png:close()
end
return
end
diff --git a/applications/luci-app-upnp/luasrc/controller/upnp.lua b/applications/luci-app-upnp/luasrc/controller/upnp.lua
index 8fc697fd6a..790bf29d8c 100644
--- a/applications/luci-app-upnp/luasrc/controller/upnp.lua
+++ b/applications/luci-app-upnp/luasrc/controller/upnp.lua
@@ -19,7 +19,7 @@ function index()
end
function act_status()
- local ipt = io.popen("iptables --line-numbers -t nat -xnvL MINIUPNPD")
+ local ipt = io.popen("iptables --line-numbers -t nat -xnvL MINIUPNPD 2>/dev/null")
if ipt then
local fwd = { }
while true do