Merge pull request #577 from cshore/pull-request-safe-file-upload
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 17 Dec 2015 01:32:47 +0000 (02:32 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 17 Dec 2015 01:32:47 +0000 (02:32 +0100)
luci-base: Make default for FileUpload 'safe'

18 files changed:
applications/luci-app-ahcp/po/sv/ahcp.po
applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua
applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua
applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua
applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua
applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua
applications/luci-app-wshaper/po/sv/wshaper.po
modules/luci-base/htdocs/luci-static/resources/cbi.js
modules/luci-base/luasrc/cbi/datatypes.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua
protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua
protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua
protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua

index b5f0b7d..a7c7a38 100644 (file)
@@ -22,7 +22,7 @@ msgid ""
 msgstr ""
 
 msgid "Active AHCP Leases"
-msgstr ""
+msgstr "Aktiva AHCP-hyror"
 
 msgid "Address"
 msgstr "Adress"
@@ -40,13 +40,13 @@ msgid "Announced NTP servers"
 msgstr "Aviserade NTP-servrar"
 
 msgid "Announced prefixes"
-msgstr ""
+msgstr "Aviserade prefix"
 
 msgid "Collecting data..."
 msgstr "Samlar in data..."
 
 msgid "Forwarder"
-msgstr ""
+msgstr "Vidarebefordrare"
 
 msgid "General Setup"
 msgstr "Allmän inställning"
@@ -61,16 +61,16 @@ msgid "IPv6 only"
 msgstr "Endast IPv6"
 
 msgid "Lease directory"
-msgstr ""
+msgstr "Hyr mappen"
 
 msgid "Lease validity time"
-msgstr ""
+msgstr "Giltighetstid för hyran"
 
 msgid "Log file"
 msgstr "Logg-fil"
 
 msgid "Multicast address"
-msgstr ""
+msgstr "Multicast-adress"
 
 msgid "Operation mode"
 msgstr "Driftsläge"
@@ -82,7 +82,7 @@ msgid "Protocol family"
 msgstr "Protokoll-familj"
 
 msgid "Served interfaces"
-msgstr ""
+msgstr "Betjänade gränssnitt"
 
 msgid "Server"
 msgstr "Server"
@@ -94,16 +94,16 @@ msgid "Specifies the announced IPv4 and IPv6 name servers"
 msgstr "Specificerar de aviserade IPv4 och IPv6 namn-servrarna"
 
 msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
-msgstr ""
+msgstr "Specificerar de aviserade IPv4 och IPv6 nätverksprefixen i CIDR-noteringen"
 
 msgid "The AHCP Service is not running."
 msgstr "AHCP-tjänsten körs inte."
 
 msgid "The AHCP Service is running with ID %s."
-msgstr ""
+msgstr "AHCP-tjänsten körs med ID %s."
 
 msgid "There are no active leases."
-msgstr ""
+msgstr "Det finns inga aktiva hyror."
 
 msgid "Unique ID file"
 msgstr "Unik ID-fil"
index 9ff2ed9..a6087e9 100644 (file)
@@ -92,7 +92,7 @@ s = m:section(NamedSection, "voicemail_smtp", "voicemail", translate("Outgoing m
 s.anonymous = true
 
 serv = s:option(Value, "smtp_server", translate("SMTP Server Hostname or IP Address"))
-serv.datatype = "host"
+serv.datatype = "host(0)"
 
 port = s:option(Value, "smtp_port", translate("SMTP Port Number"))
 port.datatype = "port"
index 5d4f135..34288c6 100644 (file)
@@ -264,7 +264,7 @@ h = s:taboption("remote_usage", Value, "externhost", translate("Domain/IP Addres
                 The best thing to input is a static IP address. If your IP address is dynamic and it changes, \
                 your configuration will become invalid. Hence, it's recommended to set up Dynamic DNS in this case. \
                 and enter your Dynamic DNS hostname here. You can configure Dynamic DNS with the luci-app-ddns package."))
-h.datatype = "host"
+h.datatype = "host(0)"
 
 p = s:taboption("remote_usage", Value, "bindport", translate("External SIP Port"),
                 translate("Pick a random port number between 6500 and 9500 for the service to listen on. \
index ed1ed1e..9b46202 100644 (file)
@@ -84,7 +84,7 @@ function pwd.write(self, section, value)
 end
 
 h = s:option(Value, "host", translate("SIP Server/Registrar"))
-h.datatype = "host"
+h.datatype = "host(0)"
 
 p = s:option(ListValue, "register", translate("Enable Incoming Calls (Register via SIP)"),
              translate("This option should be set to \"Yes\" if you have a DID \(real telephone number\) \
@@ -103,7 +103,7 @@ p.default = "yes"
 from = s:option(Value, "fromdomain",
                 translate("SIP Realm (needed by some providers)"))
 from.optional = true
-from.datatype = "host"
+from.datatype = "host(0)"
 
 port = s:option(Value, "port", translate("SIP Server/Registrar Port"))
 port.optional = true
@@ -111,6 +111,6 @@ port.datatype = "port"
 
 op = s:option(Value, "outboundproxy", translate("Outbound Proxy"))
 op.optional = true
-op.datatype = "host"
+op.datatype = "host(0)"
 
 return m
index 59266e5..950d7a7 100644 (file)
@@ -12,7 +12,7 @@ enable.default = 0
 
 host = s:option(Value, "Host", translate("Host"), translate("IP or hostname where to get the txtinfo output from"))
 host.placeholder = "127.0.0.1"
-host.datatype = "host"
+host.datatype = "host(1)"
 host.rmempty = true
 
 port = s:option(Value, "Port", translate("Port"))
index 19bdd9a..11f34fb 100644 (file)
@@ -227,7 +227,7 @@ ta = s:option(Value, "target", translate("Target host"),
 
 ta.rmempty = true
 ta.placeholder = "0.0.0.0/0"
-ta.datatype = "host"
+ta.datatype = "host(1)"
 
 
 v = s:option(Value, "via", translate("Via proxy"),
@@ -235,5 +235,6 @@ v = s:option(Value, "via", translate("Via proxy"),
 
 v:depends({type="proxy"})
 v.placeholder = "10.0.0.1:8080"
+v.datatype = "ip4addrport"
 
 return m
index 883416b..f64370b 100644 (file)
@@ -38,7 +38,7 @@ period = s:option(Value, "period",
 pinghost = s:option(Value, "pinghosts", 
                    translate("Ping host"),
                    translate("Host address to ping"))
-pinghost.datatype = "host"
+pinghost.datatype = "host(1)"
 pinghost.default = "8.8.8.8"
 pinghost:depends({mode="ping"})
 
index b85651a..84c5ce1 100644 (file)
@@ -10,40 +10,40 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 msgid "Downlink"
-msgstr ""
+msgstr "Ner-länk"
 
 msgid "Downstream bandwidth in kbit/s"
-msgstr ""
+msgstr "Nerströms bandbredd i kbit/s"
 
 msgid "Host or Network in CIDR notation."
 msgstr ""
 
 msgid "Interface"
-msgstr ""
+msgstr "Gränssnitt"
 
 msgid "Low priority destination ports"
-msgstr ""
+msgstr "Destinations-portar med låg prioritet"
 
 msgid "Low priority hosts (Destination)"
-msgstr ""
+msgstr "Värdar med låg prioritet (Destination)"
 
 msgid "Low priority hosts (Source)"
-msgstr ""
+msgstr "Värdar med låg prioritet (Källa)"
 
 msgid "Low priority source ports"
-msgstr ""
+msgstr "Käll-portar med låg prioritet"
 
 msgid "Uplink"
-msgstr ""
+msgstr "Upplänk"
 
 msgid "Upstream bandwidth in kbit/s"
-msgstr ""
+msgstr "Bandbredd uppströms i kbit/s"
 
 msgid "Wondershaper"
-msgstr ""
+msgstr "Wondershaper"
 
 msgid "Wondershaper settings"
-msgstr ""
+msgstr "Inställningar för Wondershaper"
 
 msgid ""
 "Wondershaper shapes traffic to ensure low latencies for interactive traffic "
index 4b7227f..1c4123b 100644 (file)
@@ -139,10 +139,11 @@ var cbi_validators = {
                return (this.match(/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/) != null);
        },
 
-       'host': function()
+       'host': function(ipv4only)
        {
                return cbi_validators.hostname.apply(this) ||
-                       cbi_validators.ipaddr.apply(this);
+                       ((ipv4only != 1) && cbi_validators.ipaddr.apply(this)) ||
+                       ((ipv4only == 1) && cb_validators.ip4addr.apply(this));
        },
 
        'hostname': function()
@@ -161,28 +162,49 @@ var cbi_validators = {
                        cbi_validators.host.apply(this);
        },
 
-       'hostport': function()
+       'hostport': function(ipv4only)
        {
                var hp = this.split(/:/);
 
                if (hp.length == 2)
-                       return (cbi_validators.host.apply(hp[0]) &&
+                       return (cbi_validators.host.apply(hp[0], ipv4only) &&
                                cbi_validators.port.apply(hp[1]));
 
                return false;
        },
 
-       'ipaddrport': function()
+       'ip4addrport': function()
        {
                var hp = this.split(/:/);
 
                if (hp.length == 2)
                        return (cbi_validators.ipaddr.apply(hp[0]) &&
                                cbi_validators.port.apply(hp[1]));
-
                return false;
        },
 
+       'ipaddrport': function(bracket)
+       {
+               if (this.match(/^([^\[\]:]+):([^:]+)$/)) {
+                       var addr = RegExp.$1
+                       var port = RegExp.$2
+                       return (cbi_validators.ip4addr.apply(addr) &&
+                               cbi_validators.port.apply(port));
+                } else if ((bracket == 1) && (this.match(/^\[(.+)\]:([^:]+)$/))) {
+                       var addr = RegExp.$1
+                       var port = RegExp.$2
+                       return (cbi_validators.ip6addr.apply(addr) &&
+                               cbi_validators.port.apply(port));
+                } else if ((bracket != 1) && (this.match(/^([^\[\]]+):([^:]+)$/))) {
+                       var addr = RegExp.$1
+                       var port = RegExp.$2
+                       return (cbi_validators.ip6addr.apply(addr) &&
+                               cbi_validators.port.apply(port));
+               } else {
+                       return false;
+               }
+       },
+
        'wpakey': function()
        {
                var v = this;
index 4c003be..626ad91 100644 (file)
@@ -176,22 +176,41 @@ function hostname(val)
        return false
 end
 
-function host(val)
-       return hostname(val) or ipaddr(val)
+function host(val, ipv4only)
+       return hostname(val) or ((ipv4only == 1) and ip4addr(val)) or ((not (ipv4only == 1)) and ipaddr(val))
 end
 
 function network(val)
        return uciname(val) or host(val)
 end
 
-function hostport(val)
+function hostport(val, ipv4only)
        local h, p = val:match("^([^:]+):([^:]+)$")
-       return not not (h and p and host(h) and port(p))
+       return not not (h and p and host(h, ipv4only) and port(p))
 end
 
-function ipaddrport(val)
+function ip4addrport(val, bracket)
        local h, p = val:match("^([^:]+):([^:]+)$")
-       return not not (h and p and ipaddr(h) and port(p))
+       return (h and p and ip4addr(h) and port(p))
+end
+
+function ip4addrport(val)
+       local h, p = val:match("^([^:]+):([^:]+)$")
+       return (h and p and ip4addr(h) and port(p))
+end
+
+function ipaddrport(val, bracket)
+       local h, p = val:match("^([^%[%]:]+):([^:]+)$")
+       if (h and p and ip4addr(h) and port(p)) then
+               return true
+       elseif (bracket == 1) then
+               h, p = val:match("^%[(.+)%]:([^:]+)$")
+               if  (h and p and ip6addr(h) and port(p)) then
+                       return true
+               end
+       end
+       h, p = val:match("^([^%[%]]+):([^:]+)$")
+       return (h and p and ip6addr(h) and port(p))
 end
 
 function wpakey(val)
index 4dc52ad..572446f 100644 (file)
@@ -135,7 +135,7 @@ rd = s:taboption("general", DynamicList, "rebind_domain",
        translate("List of domains to allow RFC1918 responses for"))
 
 rd:depends("rebind_protection", "1")
-rd.datatype = "host"
+rd.datatype = "host(1)"
 rd.placeholder = "ihost.netflix.com"
 
 
index b91c29b..4452892 100644 (file)
@@ -749,7 +749,7 @@ auth_server:depends({mode="ap", encryption="wpa2"})
 auth_server:depends({mode="ap-wds", encryption="wpa"})
 auth_server:depends({mode="ap-wds", encryption="wpa2"})
 auth_server.rmempty = true
-auth_server.datatype = "host"
+auth_server.datatype = "host(0)"
 
 auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812))
 auth_port:depends({mode="ap", encryption="wpa"})
@@ -773,7 +773,7 @@ acct_server:depends({mode="ap", encryption="wpa2"})
 acct_server:depends({mode="ap-wds", encryption="wpa"})
 acct_server:depends({mode="ap-wds", encryption="wpa2"})
 acct_server.rmempty = true
-acct_server.datatype = "host"
+acct_server.datatype = "host(0)"
 
 acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813))
 acct_port:depends({mode="ap", encryption="wpa"})
index 94ba805..2874b56 100644 (file)
@@ -204,7 +204,7 @@ if has_ntpd then
 
 
                o = s:option(DynamicList, "server", translate("NTP server candidates"))
-               o.datatype = "host"
+               o.datatype = "host(0)"
                o:depends("enable", "1")
 
                -- retain server list even if disabled
index 9315dc2..7b5e604 100644 (file)
@@ -39,7 +39,7 @@ protocol.optional = true
 server = section:taboption("general", Value, "server",
        translate("Tunnel setup server"),
        translate("Optional, specify to override default server (tic.sixxs.net)"))
-server.datatype = "host"
+server.datatype = "host(0)"
 server.optional = true
 
 
index 4ed34ae..ad3f2ed 100644 (file)
@@ -13,7 +13,7 @@ oc_key_file = "/etc/openconnect/user-key-" .. ifc .. ".pem"
 oc_ca_file = "/etc/openconnect/ca-" .. ifc .. ".pem"
 
 server = section:taboption("general", Value, "server", translate("VPN Server"))
-server.datatype = "host"
+server.datatype = "host(0)"
 
 port = section:taboption("general", Value, "port", translate("VPN Server port"))
 port.placeholder = "443"
index 5e8b3fc..506170c 100644 (file)
@@ -8,7 +8,7 @@ local ipv6, defaultroute, metric, peerdns, dns, mtu
 
 
 server = section:taboption("general", Value, "server", translate("L2TP Server"))
-server.datatype = "or(host, hostport)"
+server.datatype = "or(host(1), hostport(1))"
 
 
 username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
index c93353a..eca7bdd 100644 (file)
@@ -8,7 +8,7 @@ local sshuser, server, port, ssh_options, identity, ipaddr, peeraddr
 sshuser = section:taboption("general", Value, "sshuser", translate("SSH username"))
 
 server = section:taboption("general", Value, "server", translate("SSH server address"))
-server.datatype = "host"
+server.datatype = "host(0)"
 
 port = section:taboption("general", Value, "port", translate("SSH server port"))
 port.datatype = "port"
index d81db1f..462d701 100644 (file)
@@ -9,7 +9,7 @@ local defaultroute, metric, peerdns, dns,
 
 
 server = section:taboption("general", Value, "server", translate("VPN Server"))
-server.datatype = "host"
+server.datatype = "host(0)"
 
 
 username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))